dubbo項目開發實戰
阿新 • • 發佈:2019-03-13
負載均衡 ces prot oot pty nag one asf status dubbo結合spring boot,直接采用註解的方式,沒有采用xml配置
使用的是zookeeper作為服務註冊中心
spring cloud的服務化是使用的restful的方式,是基於http,但是http請求會有連接的問題存在,因此使用dubbo的rpc的方式是比較好的服務化的實現方式。
服務化的基本要素是一個服務需要能獨立完成一個業務內容,否則會導致分布式事務的問題。
使用的是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:配置:有很多配置,目前我這用到的,一個是均衡負載配置,一個是服務降級配置,一個是集群容錯(重試)負載均衡配置在服務端和客戶端都可以配置,配置loadbalance屬性即可,缺省為random,可以配置roundrobin
集群容錯配置retries屬性,
服務降級配置:在@Reference裏配置mock屬性
br/>負載均衡配置在服務端和客戶端都可以配置,配置loadbalance屬性即可,缺省為random,可以配置roundrobin
集群容錯配置retries屬性,
服務降級配置:在@Reference裏配置mock屬性
dubbo項目開發實戰