dubbo和nacos在大营销项目中的应用
Dubbo配置流程以及踩坑情况
引入dubbo和nacos
- 在项目根pom文件中引入nacos:
1 | <dependency> |
- 配置
application-dev.xml
1 | dubbo: |
dubbo.application
name
:
- 作用:定义 Dubbo 应用的名称。这个名称在服务注册中心(如 Nacos)中用于标识该应用。
- 意义:便于在注册中心中区分不同的 Dubbo 应用,尤其在微服务架构中有多个应用时。
version
:
- 作用:指定应用的版本号。
- 意义:用于服务版本管理,可以在同一个接口的不同版本之间进行区分和兼容。例如,不同版本的服务可以同时存在,消费者可以选择调用特定版本的服务。
dubbo.registry
id
:
- 作用:给注册中心实例指定一个唯一标识符。
- 意义:在配置多个注册中心时,通过
id
区分不同的注册中心实例。
address
:
- 作用:指定注册中心的地址和协议。
- 值:
nacos://127.0.0.1:8848
nacos
:表示使用 Nacos 作为注册中心。127.0.0.1:8848
:Nacos 注册中心的地址和端口。
- 意义:Dubbo 服务提供者和消费者通过这个地址与 Nacos 进行通信,实现服务的注册与发现。
dubbo.protocol
name
:- 作用:指定使用的通信协议。
- 值:
dubbo
,表示使用 Dubbo 协议。 - 意义:Dubbo 支持多种协议(如
dubbo
、rmi
、http
等),选择合适的协议以满足不同的性能和兼容性需求。
port
:- 作用:指定服务提供者监听的端口号。
- 值:
-1
表示自动分配端口。 - 意义:
- 自动分配:在开发或测试环境中,使用自动分配端口可以避免端口冲突,简化配置。
- 固定端口:在生产环境中,建议指定固定端口,便于服务的管理和监控。
dubbo.scan
base-packages
:
- 作用:指定 Dubbo 扫描注解的基础包路径。
- 值:
io.github.jasonxqh.api
- 意义:
- 自动扫描:Dubbo 会自动扫描指定包及其子包下的类,查找并注册带有 Dubbo 注解(如
@DubboService
、@DubboReference
)的服务提供者和消费者。 - 简化配置:无需在每个类上单独配置注册信息,提升开发效率。
- 自动扫描:Dubbo 会自动扫描指定包及其子包下的类,查找并注册带有 Dubbo 注解(如
启动nacos
首先,要在
在docker-compose-environment
中配置nacos信息,运行后 拉取镜像,即可启动
1 | # http://127.0.0.1:8848/nacos 【账号:nacos 密码:nacos】 |
MYSQL_SERVICE_HOST=mysql
:
- 含义:指定 MySQL 服务的主机名为
mysql
。在 Docker Compose 中,服务之间可以通过服务名互相通信。因此,mysql
指的是同一 Docker Compose 文件中定义的名为mysql
的服务。
networks: - my-network
:
- 含义:将 Nacos 容器加入到名为
my-network
的 Docker 网络中。
depends_on: mysql
:
- 含义:Nacos 服务依赖于名为
mysql
的服务,并且在 MySQL 服务健康(service_healthy
)后才启动。
MYSQL_SERVICE_PORT=3306
:
- 含义:指定 MySQL 服务的端口为
3306
,这是 MySQL 的默认端口。
Dubbo 服务提供者(@DubboService
)
@DubboService
是 Dubbo 提供的注解,用于标识一个类为 Dubbo 服务提供者。它相当于 Spring 中的 @Service
注解,但专门用于 Dubbo 服务的发布和注册。
主要功能
- 服务发布:将标注的类作为 Dubbo 服务提供者,自动将其注册到注册中心(如 Nacos、Zookeeper)。
- 配置服务属性:通过注解属性配置服务的版本、分组、超时、重试次数等参数。
- 支持多协议和多注册中心:允许在不同的协议和注册中心下发布服务实例。
常用属性
version
:指定服务的版本号,用于区分不同版本的服务。group
:指定服务的分组,便于在同一个注册中心中管理不同组的服务。interfaceName
:指定服务接口的全限定名(不常用,通常通过接口类自动推断)。timeout
:调用超时时间,单位毫秒。retries
:失败重试次数。protocol
:指定服务使用的协议
比如:
1 | 4j |
- 自动注册:
@DubboService
注解会自动将RaffleActivityController
类注册为 Dubbo 服务,Dubbo 会根据配置将其信息发布到注册中心。 - 版本与分组:通过
version
和group
属性,可以在同一注册中心中管理不同版本和不同组的服务,避免冲突和提高灵活性。 - 超时与重试:通过
timeout
和retries
属性,控制服务调用的容错行为,提升系统的鲁棒性。
bug1
在我正确在application-dev.yml
中配置dubbo时,一开始出现了这个问题,spring无法扫描到我的配置信息。
解决:这种问题很坑,一般不是我们的代码问题,单纯是idea没有刷新配置文件。我们清理缓存并重启即可。
Dubbo 服务消费者(@DubboReference
)
@DubboReference
是 Dubbo 提供的注解,用于注入 Dubbo 服务消费者,即引用远程的 Dubbo 服务。它相当于 Spring 中的 @Autowired
注解,但专门用于引用远程服务。
- 在 测试项目中,引入注册到nacos中的包,然后编写测试类:
1 | 4j |
@DubboReference
:- 作用:这是 Dubbo 提供的注解,用于注入远程服务的引用(即消费者)。
- 属性说明:
interfaceClass
:指定要引用的远程服务接口类。version
:指定服务的版本,用于区分不同版本的服务实例。
- 优势:
- 简化配置:通过注解方式注入远程服务,无需手动配置服务地址。
- 动态代理:Dubbo 自动生成代理对象,简化服务调用。
注意:确保 Dubbo 已正确配置,且
IRaffleActivityService
接口在服务提供者和消费者中版本一致,且接口类在两端保持同步。
bug2
在大营销项目中,需要先 mvn clean install
重新构建项目所有的包,这样测试项目中才能引入最新版本的包。否则会出现引用到过去没有serialize的DTO的报错