dubbo使用redis做註冊中心

業務需要整合dubbo,考慮成本,使用現有的redis作爲註冊中心,項目使用的Spring-boot-starter版本2.7.6

步驟:

參考官方中文文檔 http://dubbo.apache.org/zh-cn/docs/user/quick-start.html

1.在項目中導入依賴:(1.服務提供者provider、服務消費者consumer需要導入以下jar)

<!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.6</version>
        </dependency>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>

2.創建一個module用戶存在dubbo接口,即provider、consumer都需要依賴的,個人建議:不要做任何依賴,越乾淨越好

3.毫無疑問provider、consumer需要依賴該module

4.分別對provider、consumer進行配置

provider、consumer配置基本一樣,唯一不一樣的地方是dubbo.application.name=xxxx

dubbo:
  scan:
    base-packages: com.xxxx.ccp.service
  registry:
    protocol: redis
    parameters:
      # 指定redis數據庫,別問我爲什麼是這個參數,看源碼發現的
      db.index: 1
    # 上面配置了redis故直接取值即可,也可以直接寫成 address: root:[email protected]:6379
    address: root:${spring.redis.password}@${spring.redis.host}:${spring.redis.port}
    cluster: failover
  protocol:
    # 名字任意
    id: xxx-protocol
    port: 20880
    name: dubbo
  application:
    # 名字任意
    name: xxxx-application

5.剩下就是provider實現上面module中的接口,記得在上加上@service註解,注意:不是Spring的service註解,是org.apache.dubbo.config.annotation.Service註解

6.服務consumer消費處,直接@Reference注入即可   @註解路徑是org.apache.dubbo.config.annotation.Reference,示例

    @Reference
    private DubboProviderService dubboProviderService;

啓動順序:

redis服務-> provider -> consumer

遇到的坑

1)

Invalid name="com.alibaba.dubbo.config.ProtocolConfig#0"

原因是

dubbo採用Spring 工具類BeanDefinitionReaderUtils.generateBeanName(builder.getRawBeanDefinition(),register)得到的bean帶有#,而dubbo進行驗證pattern("[\-._0-9a-zA-Z]+"不包含#故報錯

解決辦法:

設置dubbo.protocol.id=xxx # 名稱任意唯一即可

2)開始配置爲

考慮到redis不需要用戶名這樣配置
dubbo:
  registry:
    protocol: redis
    parameters:
      db.index: 1
    address: 127.0.0.1:6379
    password: 123456

啓動報錯提示連接沒有授權,即使配置了password也不行,修改爲如下(加上username隨便寫一值反正沒用)
dubbo:
  registry:
    protocol: redis
    parameters:
      db.index: 1
    address: 127.0.0.1:6379
    username: root
    password: 123456
啓動仍然報錯

修改爲如下完美解決:

dubbo:
  registry:
    protocol: redis
    parameters:
      db.index: 1
    address: root:[email protected]:6379
    cluster: failover

爲解決問題,順便看了url解析邏輯,先根據“?”split,然後在判斷有沒有"://",再判斷有沒有"@",每次分隔進行參數封裝

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章