1. 程式人生 > >dubbo與springboot的搭配使用

dubbo與springboot的搭配使用

1.版本匹配問題

dubbo官網上是有說明的,也有具體的例子。https://github.com/apache/incubator-dubbo-spring-boot-project

1.x版本的springboot需要對應0.1版本的dubbo-spring-boot-starter跟較低版本的dubbo。

2.x版本的springboot對應0.2版本的dubbo-spring-boot-starter跟2.6.x版本的dubbo。

至於zookeeper倒是沒有明確規定。

2.包說明

        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>

zkclient包服務提供者有就行了,服務消費者可以不打。

其他的,依照官網,需要打的starter也有不同:

2.x的話要打三個包:

        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>

        <!-- Dubbo -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.5</version>
        </dependency>
        <!-- Spring Context Extras -->
        <dependency>
            <groupId>com.alibaba.spring</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>1.0.2</version>
        </dependency>

1.x的話只打那個starter就可以了(注意要0.1.0的)。

還有,0.2.1的包經常搜不到,所以我打了0.2.0的,但是官網最新的是0.2.1。

3.不同版本的配置

體現在dubbo的service、reflect、跟配置資訊的不同。

1.x版本:

服務提供者:

# dubbo springboot 配置
dubbo.application.name=dubbo-provider
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.scan.base-packages=com.chriswei.bean
@Service
@Component
public class helloProviderimpl implements helloProvider {}

服務消費者:

# dubbo springboot 配置
dubbo.application.name=live-dubbo-comsumer
dubbo.registry.address=zookeeper://127.0.0.1:2181
public class HelloConsumer {
    @Reference
    private helloProvider hello;
}

1.x版本這麼匹配就算是能用了,控制檯會打印出你釋出出去的服務,以包全名形式,當然你可以開啟zkCli.cmd,輸入ls /檢視一下你的服務釋出出去沒有。

2.x版本的話,依據官方示例:

服務提供者:

# Spring boot application
spring.application.name = dubbo-provider-demo
server.port = 9090
management.port = 9091

# Base packages to scan Dubbo Components (e.g., @Service, @Reference)
dubbo.scan.basePackages  =com.chriswei.bean

# Dubbo Config properties
## ApplicationConfig Bean
dubbo.application.id = dubbo-provider-demo
dubbo.application.name = dubbo-provider-demo

## ProtocolConfig Bean
dubbo.protocol.id = dubbo
dubbo.protocol.name = dubbo
dubbo.protocol.port = 12345

## RegistryConfig Bean
dubbo.registry.id = my-registry
dubbo.registry.address = zookeeper://127.0.0.1:2181
@Service(
        version = "1.0.0",
        application = "${dubbo.application.id}",
        protocol = "${dubbo.protocol.id}",
        registry = "${dubbo.registry.id}"
)
@Component
public class helloProviderimpl implements helloProvider {}

服務消費者:

# Spring boot application
spring.application.name = dubbo-consumer-demo
server.port = 8082
management.port = 8083


# Dubbo Config properties
## ApplicationConfig Bean
dubbo.application.id = dubbo-consumer-demo
dubbo.application.name = dubbo-consumer-demo

## ProtocolConfig Bean
dubbo.protocol.id = dubbo
dubbo.protocol.name = dubbo
dubbo.protocol.port = 12345
@Service
public class HelloConsumer {
    @Reference(version = "1.0.0",
            application = "${dubbo.application.id}",
            url = "dubbo://localhost:12345")
    private helloProvider hello;
}

特別要注意dubbo://localhost:12345這個寫法,這裡就這麼寫,而不能寫zookeeper://127.0.0.1:2181。