自己手写的60+工程的RPC框架成功整合了SpringCloud Alibaba

自己手写的60+工程的RPC框架成功整合了SpringCloud Alibaba,大家好,我是冰河~~,目前,我们自己手写的RPC框架已经完成了整体设计、服务提供者的实现、服务消费者的实现、注册中心的实现、负载均衡的实现、SPI扩展序列化机制、SPI扩展动态代理机制、SPI扩展反射机制、SPI扩展负载均衡策略、SPI扩展增强型负载均衡策略、SPI扩展实现注册中心、心跳机制、增强型心跳机制、重试机制、整合Spring、整合SpringBoot和整合Docker等篇章,共计80+篇文章。,本节,我们就基于《SpringCloud Alibaba》专栏的源码整合自己手写的bhrpc框架,替换掉原有项目中使用的Fegin框架。,在父工程shop-springcloud-alibaba下新建shop-service-api子工程,并在shop-service-api子工程的pom.xml文件中添加如下配置。,shop-service-api子工程的作用就是将shop-user工程中的UserService接口和shop-product工程中的ProductService接口单独分离出来,便于后续整合bhrpc框架。,UserService接口的源码详见:shop-service-api工程下的io.binghe.shop.service.UserService,如下所示。,删除shop-user工程下的io.binghe.shop.user.service.UserService接口,并修改shop-user工程中的报错信息,将报错类中原本依赖io.binghe.shop.user.service.UserService接口修改成依赖io.binghe.shop.service.UserService接口。,ProductService接口的源码详见:shop-service-api工程下的io.binghe.shop.service.ProductService,如下所示。,删除shop-product工程下的io.binghe.shop.product.service.ProductService接口,并修改shop-product工程中的报错信息,将报错类中原本依赖io.binghe.shop.product.service.ProductService接口修改成依赖io.binghe.shop.service.ProductService接口。,shop-user工程对应bhrpc框架的服务提供者角色。,shop-user工程作为bhrpc框架的服务提供者,在pom.xml需要添加如下依赖。,UserServiceImpl类的源码详见:shop-user工程下的io.binghe.shop.user.service.impl.UserServiceImpl,需要将UserServiceImpl类上标注的Spring中的@Service注解,替换成bhrpc框架中的@RpcService注解,修改后的源码如下所示。,可以看到,在UserServiceImpl类上标注了bhrpc框架中的@RpcService注解,并且指定了interfaceClass、version和group属性。,UserStarter类的源码详见:shop-user工程下的io.binghe.shop.UserStarter,主要是在UserStarter类上添加@ComponentScan注解,修改后的源码如下所示。,可以看到,在UserStarter类上标注了@ComponentScan注解,并指定了扫描的包路径为io.binghe.shop和io.binghe.rpc,使其既能够扫描到微服务项目中包下的类,也能够扫描到bhrpc框架包下的类。,由于项目使用了Nacos作为配置中心,所以,需要在Nacos添加shop-user工程作为服务提供者的配置,登录Nacos管理端,找到shop-user工程的配置,如下所示。,图片,shop-user工程的配置,点击编辑按钮,在原有配置的基础上,添加如下配置信息。,可以看到,配置的内容都是bhrpc框架的服务提供者启动时,需要读取的一些参数信息。配置完成后,点击发布按钮进行发布。,至此,shop-user工程改造完成,是不是非常简单呢?我们自己手写的bhrpc框架整合SpringCloud Alibaba项目就是这么简单。,shop-product工程对应bhrpc框架的服务提供者角色。改造shop-product工程的步骤与改造shop-user工程的步骤基本相同。,shop-product工程同样作为bhrpc框架的服务提供者,在pom.xml需要添加如下依赖。,ProductServiceImpl类的源码详见:shop-product工程下的io.binghe.shop.product.service.impl.ProductServiceImpl,需要将ProductServiceImpl类上标注的Spring中的@Service注解,替换成bhrpc框架中的@RpcService注解,修改后的源码如下所示。,可以看到,在ProductServiceImpl类上标注了bhrpc框架中的@RpcService注解,并且指定了interfaceClass、version和group属性。,ProductStarter类的源码详见:shop-product工程下的io.binghe.shop.ProductStarter,主要是在ProductStarter类上添加@ComponentScan注解,修改后的源码如下所示。,可以看到,在ProductStarter类上标注了@ComponentScan注解,并指定了扫描的包路径为io.binghe.shop和io.binghe.rpc,使其既能够扫描到微服务项目中包下的类,也能够扫描到bhrpc框架包下的类。,由于项目使用了Nacos作为配置中心,所以,需要在Nacos添加shop-product工程作为服务提供者的配置,登录Nacos管理端,找到shop-product工程的配置,如下所示。,图片,shop-product工程的配置,点击编辑按钮,在原有配置的基础上,添加如下配置信息。,可以看到,配置的内容也都是bhrpc框架的服务提供者启动时,需要读取的一些参数信息。配置完成后,点击发布按钮进行发布。,至此,shop-product工程改造完成,也是非常简单的。,shop-order工程对应bhrpc框架的服务消费者角色。,shop-order工程作为bhrpc框架的服务消费者,在pom.xml需要添加如下依赖。,为了不影响整体项目原有的逻辑,复制OrderServiceV8Impl类的代码,新增成为OrderServiceV9Impl类,OrderServiceV9Impl类的源码详见:shop-order工程下的io.binghe.shop.order.service.impl.OrderServiceV9Impl,类框架代码如下所示。,将OrderServiceV9Impl类中,原本userService和productService成员变量上标注的Spring中的@Autowired注解替换成bhrpc框架中的@RpcReference注解,替换后的源码如下所示。,可以看到,userService和productService成员变量上标注了bhrpc框架中的@RpcReference注解,并且配置了服务消费者启动时需要的一些参数信息。,注意:需要将OrderServiceV9Impl类中的UserService改成引用io.binghe.shop.service.UserService接口,将ProductService改成引用io.binghe.shop.service.ProductService接口,修改OrderServiceV9Impl类中的一些报错信息。,OrderStarter类的源码详见:shop-order工程下的io.binghe.shop.OrderStarter,主要是在OrderStarter类上添加@ComponentScan注解,修改后的源码如下所示。,可以看到,在OrderStarter类上标注了@ComponentScan注解,并指定了扫描的包路径为io.binghe.shop和io.binghe.rpc,使其既能够扫描到微服务项目中包下的类,也能够扫描到bhrpc框架包下的类。,由于项目使用了Nacos作为配置中心,所以,需要在Nacos添加shop-order工程作为服务消费者的配置,登录Nacos管理端,找到shop-order工程的配置,如下所示。,图片,shop-order工程的配置,点击编辑按钮,在原有配置的基础上,添加如下配置信息。,可以看到,配置的内容都是bhrpc框架的服务消费者启动时,需要读取的一些参数信息。配置完成后,点击发布按钮进行发布。,OrderController类的源码详见:shop-order工程下的io.binghe.shop.order.controller.OrderController,主要是将OrderController类中使用@Qualifier注解标识的orderServiceV8修改成orderServiceV9,如下所示。,至此,shop-order工程改造完成,也是非常简单的。,目前,在SpringCloud Alibaba项目中整合我们自己手写的RPC框架就完成了,是不是非常简单呢?没错,我们自己手写的bhrpc框架整合SpringCloud Alibaba项目就是这么简单!,整合完不测试下怎么行?,分别启动Nacos、RocketMQ、Sentinel、ZipKin、Seata和Zookeeper服务,对应服务的版本在源码的README.md文件中有说明。,按顺序分别启动shop-user工程、shop-product工程、shop-order工程和shop-gateway工程。,输出如下信息,没有报错,说明bhrpc框架监听的是20880端口,表示启动成功。,输出如下信息,没有报错,说明bhrpc框架监听的是20881端口,表示启动成功。,输出如下信息,没有报错,说明启动成功。,输出如下信息,没有报错,说明启动成功。,(1)打开cmd终端,进入MySQL命令行,并进入shop商城数据库,如下所示。,(2)查看商品数据表,如下所示。,这里,我们以id为1001的商品为例,此时发现商品的库存为100。,(3)查询订单数据表,如下所示。,可以发现订单数据表为空。,(4)查询订单条目数据表,如下所示。,可以看到,订单条目数据表为空。,打开浏览器访问http://localhost:10002/server-order/order/submit_order?userId=1001&productId=1001&count=1,如下所示。,图片,访问结果,可以看到,项目返回的结果为success,表示项目执行成功。,(1)查看商品数据表,如下所示。,这里,id为1001的商品库存为99,说明库存已经减少了1。,(2)查询订单数据表,如下所示。,可以看到,在t_order表中新增了一张订单数据表,订单的总金额为2399.00元。,(3)查询订单条目数据表,如下所示。,可以看到,订单条目数据表中条了一条订单条目数据,商品的id为1001,商品名称为华为,商品的价格为2399.00,下单的商品数量为1。,根据测试结果可以看出,我们已经正确在SpringCloud Alibaba项目中整合了我们自己手写的bhrpc框架。,实现了功能不总结下怎么行?,在完成整合Spring的篇章后,我们又开启了整合SpringBoot的篇章,首先,我们完成了服务提供者整合SpringBoot的功能,并基于SpringBoot接入了服务提供者。同时,实现了服务消费者整合SpringBoot的功能,并且基于SpringBoot接入了服务消费者。,在整合Docker章节,我们实现了基于Docker接入了服务提供者和基于Docker接入了服务消费者。,本章,我们更进一步将手写的bhrpc框架整合到SpringCloud Alibaba项目。,总之,我们写的RPC框架正在一步步实现它该有的功能。,最后,我想说的是:学习《RPC手撸专栏》一定要塌下心来,一步一个脚印,动手实践,认真思考,遇到不懂的问题,可以直接到星球发布主题进行提问。一定要记住:纸上得来终觉浅,绝知此事要躬行的道理。否则,一味的CP,或者光看不练,不仅失去了学习的意义,到头来更是一无所获。

文章版权声明

 1 原创文章作者:cmcc,如若转载,请注明出处: https://www.52hwl.com/17081.html

 2 温馨提示:软件侵权请联系469472785#qq.com(三天内删除相关链接)资源失效请留言反馈

 3 下载提示:如遇蓝奏云无法访问,请修改lanzous(把s修改成x)

 免责声明:本站为个人博客,所有软件信息均来自网络 修改版软件,加群广告提示为修改者自留,非本站信息,注意鉴别

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023年3月5日 上午12:00
下一篇 2023年3月7日 下午10:34