dubbo 结合 spring boot, 直接采用注解的方式, 没有采用 xml 配置
使用的是 zookeeper 作为服务注册中心
spring cloud 的服务化是使用的 restful 的方式, 是基于 http, 但是 http 请求会有连接的问题存在, 因此使用 dubbo 的 rpc 的方式是比较好的服务化的实现方式.
服务化的基本要素是一个服务需要能独立完成一个业务内容, 否则会导致分布式事务的问题.
1: 创建空的 maven 项目, 引入依赖:
- <!--dubbo-->
- <dependency>
- <groupId>com.alibaba.boot</groupId>
- <artifactId>dubbo-spring-boot-starter</artifactId>
- <version>0.2.0</version>
- </dependency>
2: 使用 properties 配置
- App.service.version=1.0.0
- \# Base packages to scan Dubbo Component: @com.alibaba.dubbo.config.annotation.Service
- dubbo.scan.basePackages=com.seasfood.producer.
- \# Dubbo Config properties
- \## ApplicationConfig Bean
- dubbo.application.id=seasfood-dubbo-id
- dubbo.application.name=seasfood-dubbo-name
- dubbo.application.qos.port=22222
- dubbo.application.qos.enable=true
- \## ProtocolConfig Bean
- dubbo.protocol.id=dubbo-id
- \# 只能是 dubbo, 这个是协议名
- dubbo.protocol.name=dubbo
- dubbo.protocol.port=9090
- dubbo.protocol.status=server
- \## RegistryConfig Bean
- dubbo.registry.id=zookeeper
- dubbo.registry.address=zookeeper://zk-cs:2181
- \# Enables Dubbo All Endpoints
- management.endpoint.dubbo.enabled=true
- management.endpoint.dubbo-shutdown.enabled=true
- management.endpoint.dubbo-configs.enabled=true
- management.endpoint.dubbo-services.enabled=true
- management.endpoint.dubbo-references.enabled=true
- management.endpoint.dubbo-properties.enabled=true
- \# Dubbo Health
- \## StatusChecker Name defaults (default : "memory", "load" )
- management.health.dubbo.status.defaults=memory
- \## StatusChecker Name extras (default : empty )
- management.health.dubbo.status.extras=load,threadpool
3: 声明一个服务接口, 声明一个实现类实现接口, 然后在实现类上注解
- public interface MyInterface{}
- @Service(
- version = "${app.service.version}",
- application = "${dubbo.application.id}",
- protocol = "${dubbo.protocol.id}",
- registry = "${dubbo.registry.id}"
- )
- public class MyService implements MyIneterface {}
4: 如果接口中需要传输 DTO 类型的, 需要给类型实现序列化接口 Serializable, 否则在 rpc 调用会报错
5: 消费者只需要注入使用即可
- @Reference(version = "${app.service.version}",
- lazy = true,
- application = "${dubbo.application.id}",
- registry = "${dubbo.registry.id}"
- )
- private MyInterface myInterface;
6: 配置: 有很多配置, 目前我这用到的, 一个是均衡负载配置, 一个是服务降级配置, 一个是集群容错 (重试)br/> 负载均衡配置在服务端和客户端都可以配置, 配置 loadbalance 属性即可, 缺省为 random, 可以配置 roundrobin
集群容错配置 retries 属性,
服务降级配置: 在 @Reference 里配置 mock 属性
mock=fail:return+null: 当调用失败的时候返回 null 值
来源: http://www.bubuko.com/infodetail-2986328.html