1. 程式人生 > >dubbo項目開發實戰

dubbo項目開發實戰

負載均衡 ces prot oot pty nag one asf status

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:配置:有很多配置,目前我這用到的,一個是均衡負載配置,一個是服務降級配置,一個是集群容錯(重試)負載均衡配置在服務端和客戶端都可以配置,配置loadbalance屬性即可,缺省為random,可以配置roundrobin
集群容錯配置retries屬性,
服務降級配置:在@Reference裏配置mock屬性
br/>負載均衡配置在服務端和客戶端都可以配置,配置loadbalance屬性即可,缺省為random,可以配置roundrobin
集群容錯配置retries屬性,
服務降級配置:在@Reference裏配置mock屬性

dubbo項目開發實戰