dubbo service注解用法_SpringCloud系列之Nacos+Dubbo应用篇

ca14372ec9ee539ef21173d570f11a89.png

前言

本文在前篇文章《SpringCloud系列之Nacos应用篇》基础上集成Dubbo,公司项目中新项目采用SpringCloud(后续会逐渐替换至spring cloud alibaba全家桶),老项目采用传统SSM+Dubbo,部分业务上新老项目都有所涉及,原先少许业务上是直接通过http请求来处理新老项目交互的,总觉得这样做不够优雅,也不利于维护,于是自己调研调研看。

在前篇《SpringCloud系列之集成Dubbo应用篇》文章中Dubbo是依托zookeeper作为服务注册发现组件,这次项目中以SpirngCloud,Nacos,Dubbo三者集成起来,减少了Eureka、SpringConfig、zookeeper组件的投入,配置、服务注册发现都依赖Nacos服务,减少维护工作,死磕Nacos即可。

项目版本

spring-boot-version:2.2.5.RELEASE

spring-cloud.version:Hoxton.SR3

nacos.version:1.3.2

dubbo.version:2.6.9/2.7.6

项目说明

新项目模块间采用Feign进行相互交互,老项目模块间采用Dubbo进行交互,新老项目间采用Dubbo交互。在集成Dubbo时也针对Dubbo 2.6.x及Dubbo 2.7.x版本进行分别说明。

当然也可以都使用Dubbo进行交互。

涉及Nacos配置信息,请查阅上篇文章《SpringCloud系列之Nacos应用篇》,本文只涉及新增Dubbo相关的配置,完整项目源码请查看本文文末项目源码。

项目结构

22c811bba0e86c31260343a1efe66ca0.png

项目分支付模块和用户模块,支付模块提供Dubbo服务供用户模块消费,用户模块提供Feign服务供支付模块调用。

  • 集成Dubbo2.6.x

在集成Dubbo2.6.x系列版本中费了不少时间,主要涉及nacos-client版本中不同版本有些类所属包发生了变更,导致集成时提示找不到类,自己尝试调整了下依赖的版本,最终要么这个版本有这个问题,另外一个版本又有另一个问题,都不能很好解决,心想不会就这么凉凉了吧

常见问题如下

java.lang.NoClassDefFoundError: com/alibaba/nacos/client/naming/utils/StringUtils

java.lang.NoClassDefFoundError: com/alibaba/nacos/api/naming/NamingMaintainService

后来在Nacos Github上看到了这条issues,发现基本是同样的问题,就按照以下版本测试了下,居然成功了,后来又在此依赖版本上对相应版本进行了升级。

https://github.com/alibaba/nacos/issues/2022

9635d848ddad1dc22dfcc6ff76663777.png

最终项目依赖如下

pom.xml

                            com.alibaba.cloud            spring-cloud-starter-alibaba-nacos-discovery                                                com.alibaba.nacos                    nacos-client                                                                com.alibaba.cloud            spring-cloud-starter-alibaba-nacos-config                                                com.alibaba.nacos                    nacos-client                                                                com.alibaba.boot            dubbo-spring-boot-starter            0.2.1.RELEASE                            com.alibaba            dubbo            2.6.9                                    com.alibaba            dubbo-registry-nacos            2.6.7                                                com.alibaba.nacos                    nacos-client                                                                com.alibaba.nacos            nacos-client            1.3.2                            io.netty            netty-all            4.1.31.Final        
  • 支付模块

application.properties

Dubbo 2.6.x 系列需在Dubbo配置项中增加dubbo.application.name配置项,不然再启动时会提示缺少该配置项

dubbo.application.name=pay-service# dubbo扫描包路径dubbo.scan.base-packages=com.chinawu.cloud.pay.service# dubbo协议dubbo.protocol.name=dubbo# 随机端口dubbo.protocol.port=-1# zookeeper地址dubbo.registry.address=nacos://127.0.0.1:8848

DPayService.java

@Service为Dubbo注解,import com.alibaba.dubbo.config.annotation.Service;

@Servicepublic class DPayService implements DPayFacade {    @Override    public String goToPay(String userName) {        System.out.println("dubbo.method:goToPay request "+userName);        return "dubbo.method:goToPay result:" + userName + " pay success";    }}

PayServiceApplication.java

SpringBoot 启动类需增加 @EnableDubbo 注解标签,不然服务没法暴露,注册

@SpringBootApplication@EnableDiscoveryClient@EnableAutoConfiguration@EnableFeignClients(basePackages = {"com.chinawu.cloud.user.*"})@EnableDubbopublic class PayServiceApplication {    public static void main(String[] args) {        SpringApplication.run(PayServiceApplication.class, args);    }}
  • 用户模块

application.properties

dubbo.application.name=user-service# dubbo扫描包路径dubbo.scan.base-packages=com.chinawu.cloud.user.service# dubbo协议dubbo.protocol.name=dubbo# 随机端口dubbo.protocol.port=-1# zookeeper地址dubbo.registry.address=nacos://127.0.0.1:8848

UserController.java

@RestController@RequestMapping("/user")@RefreshScopepublic class UserController {    @Value("${spring.datasource.url}")    private String datasourceUrl;    // Dubbo服务消费    @Reference(check = false)    DPayFacade dPayFacade;    /**     *      * 功能:获取数据源连接配置信息     *      * @param     * @author wuyubin     * @date  2020年9月3日     * @return     */    @RequestMapping("/getDatasourceUrl")    public String getDatasourceUrl() {        return datasourceUrl;    }    /**     *      * 功能:测试Dubbo服务调用     *      * @param     * @author wuyubin     * @date  2020年9月3日     * @return     */    @RequestMapping("/goToPay")    public String goToPay() {        return dPayFacade.goToPay("wuyubin");    }}
  • 集成Dubbo2.7.x

集成Dubbo2.7.x系列版本,相比就简单不少,直接引入如下依赖

pom.xml

                            com.alibaba.cloud            spring-cloud-starter-alibaba-nacos-discovery                                                com.alibaba.nacos                    nacos-client                                                                com.alibaba.cloud            spring-cloud-starter-alibaba-nacos-config                                                com.alibaba.nacos                    nacos-client                                                                org.apache.dubbo            dubbo-spring-boot-starter            2.7.8                                    com.alibaba            dubbo-registry-nacos            2.7.6                                                com.alibaba.nacos                    nacos-client                                                                com.alibaba.nacos            nacos-client            1.3.2        
  • 支付模块

application.properties

# dubbo扫描包路径dubbo.scan.base-packages=com.chinawu.cloud.pay.service# dubbo协议dubbo.protocol.name=dubbo# 随机端口dubbo.protocol.port=-1# zookeeper地址dubbo.registry.address=nacos://127.0.0.1:8848

DPayService.java

@Service 为Dubbo注解,import org.apache.dubbo.config.annotation.Service;

@Servicepublic class DPayService implements DPayFacade {    @Override    public String goToPay(String userName) {        System.out.println("dubbo.method:goToPay request "+userName);        return "dubbo.method:goToPay result:" + userName + " pay success";    }}
  • 用户模块

application.properties

# dubbo扫描包路径dubbo.scan.base-packages=com.chinawu.cloud.user.service# dubbo协议dubbo.protocol.name=dubbo# 随机端口dubbo.protocol.port=-1# zookeeper地址dubbo.registry.address=nacos://127.0.0.1:8848

UserController.java

@RestController@RequestMapping("/user")@RefreshScopepublic class UserController {    @Value("${spring.datasource.url}")    private String datasourceUrl;    // Dubbo服务消费    @Reference(check = false)    DPayFacade dPayFacade;    /**     *      * 功能:获取数据源连接配置信息     *      * @param     * @author wuyubin     * @date  2020年9月3日     * @return     */    @RequestMapping("/getDatasourceUrl")    public String getDatasourceUrl() {        return datasourceUrl;    }    /**     *      * 功能:测试Dubbo服务调用     *      * @param     * @author wuyubin     * @date  2020年9月3日     * @return     */    @RequestMapping("/goToPay")    public String goToPay() {        return dPayFacade.goToPay("wuyubin");    }}

测试验证

支付模块和用户模块都启动后,我们进入Nacos后台进行查看,发现服务都已注册上,如下图

867c7a2b22b9665c4ae1c7b141805626.png

请求下用户模块预留的接口(内部通过Dubbo请求支付模块),如下图

http://localhost:9012/user/goToPay

58dbf0bff487b647c5517c694e7c8baf.png

请求下支付模块预留的接口(内部通过Feign请求用户模块),如下图

http://localhost:9011/pay/get

fb2b51f774260d2ec906ebfaa9b3a8db.png

至此Nacos和Dubbo已整合至SpringCloud。

参考资料

https://github.com/alibaba/spring-cloud-alibaba

https://nacos.io/zh-cn/docs/use-nacos-with-dubbo.html

系列文章

SpringCloud系列之配置中心(Config)使用说明SpringCloud系列之服务注册发现(Eureka)应用篇

SpringCloud系列之网关(Gateway)应用篇

SpringCloud系列之集成Dubbo应用篇

SpringCloud系列之集成分布式事务Seata应用篇

SpringCloud系列之Nacos应用篇

项目源码

https://gitee.com/wuyubin/SpringCloudDemo

54703675c13a4d099f51c103d233b90a.png

                                                                                6e0a738eee38fa8535f2ce4e89e9e30b.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这里提供一个基于 Spring Cloud+Spring Boot+Nacos+Dubbo+mybatis plus+RocketMQ+Sentinel+Seata+mysql 的项目手脚架搭建步骤: 1. 首先需要搭建一个 Spring Cloud 项目,可以使用 Spring Initializr 快速创建。选择 Spring Boot 版本和其他依赖项,如 Eureka、Zuul、Config 等。 2. 集成 Nacos 作为注册中心和配置中心。在 pom.xml 中添加相关依赖项,并在 application.yml 中配置 Nacos 服务地址和相关配置。 3. 集成 Dubbo 作为 RPC 框架。在 pom.xml 中添加 Dubbo 和 Zookeeper 相关依赖项,并在 application.yml 中配置 Dubbo 的相关信息。 4. 集成 mybatis plus 作为 ORM 框架。在 pom.xml 中添加 mybatis plus 相关依赖项,并在 application.yml 中配置 mybatis plus 的相关信息。 5. 集成 RocketMQ 作为消息队列。在 pom.xml 中添加 RocketMQ 相关依赖项,并在 application.yml 中配置 RocketMQ 的相关信息。 6. 集成 Sentinel 作为流量控制和熔断降级框架。在 pom.xml 中添加 Sentinel 相关依赖项,并在 application.yml 中配置 Sentinel 的相关信息。 7. 集成 Seata 作为分布式事务框架。在 pom.xml 中添加 Seata 相关依赖项,并在 application.yml 中配置 Seata 的相关信息。 8. 集成 mysql 作为数据库。在 pom.xml 中添加 mysql 相关依赖项,并在 application.yml 中配置 mysql 的相关信息。 9. 编写业务代码,并在 Dubbo 接口上添加 @DubboService 注解,实现业务逻辑。在需要分布式事务的方法上添加 @GlobalTransactional 注解,实现分布式事务。 10. 在需要流量控制的方法上添加 @SentinelResource 注解,实现流量控制和熔断降级。 11. 在需要使用 RocketMQ 的地方,调用 RocketMQTemplate 发送消息,并编写监听器接收消息。 12. 在需要使用 Seata 的地方,调用 Seata 提供的 API 实现分布式事务。 以上是一个简单的搭建步骤,具体的细节还需要根据项目实际情况进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值