【架构】Dubbo常用配置

亦凉 2022-05-19 09:11 290阅读 0赞

公司采用了dubbo作为分布式应用,将多项业务拆分。

怎么配置消费者调用提供者?

提供方:

  1. <!-- 提供方应用信息,用于计算依赖关系 -->
  2. <dubbo:application name="hello-world-app" />
  3. <!-- 使用zookeeper注册中心暴露服务地址 -->
  4. <dubbo:registry address="zookeeper://224.5.6.7:1234" />
  5. <!-- 用dubbo协议在20880端口暴露服务 这个端口可用于点对点调试-->
  6. <dubbo:protocol name="dubbo" port="20880" />
  7. <!-- 声明需要暴露的服务接口 -->
  8. <dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoService" />
  9. <!-- 和本地bean一样实现服务 -->
  10. <bean id="demoService" class="com.alibaba.dubbo.demo.provider.DemoServiceImpl" />

消费方:

  1. <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
  2. <dubbo:application name="consumer-of-helloworld-app" />
  3. <!-- 使用zookeeper注册中心暴露发现服务地址 -->
  4. <dubbo:registry address="zookeeper://224.5.6.7:1234" />
  5. <!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
  6. <dubbo:reference id="demoService" interface="com.alibaba.dubbo.demo.DemoService" />

官方文档是这样写的,但是我们一般不采用这种方式,我们可以在xml文件里配扫描包,这样可以清晰看到dubbo提供方接口。

  1. <!-- 扫描注解包路径,多个包用逗号分隔,不填pacakge表示扫描当前ApplicationContext中所有的类 -->
  2. <dubbo:annotation package="com.foo.bar.service" />

常用消费者属性

  1. <!-- 服务启动关闭对该服务提供者的接口是否正常的监测,也就是BarService是否可以正常调用不影响本应用的启动,当为true的时候如果该接口挂了,本应用就起不起来了-->
  2. <dubbo:reference interface="com.foo.BarService" check="false" />
  3. <!-- 关闭所有服务的启动时检查 -->
  4. <dubbo:consumer check="false" />
  5. <!-- 配置重试次数,最好只用于读的重试,写操作可能会引起多次写入 下面三个任意一个配置就行 默认retries="0"-->
  6. <dubbo:service retries="2" />
  7. <dubbo:reference retries="2" />
  8. <dubbo:reference>
  9. <dubbo:method name="findFoo" retries="2" />
  10. </dubbo:reference>

设置提供方只订阅,消费者只注册

提供方只订阅:

  1. <!-- 为方便开发测试,经常会在线下共用一个所有服务可用的注册中心,这时,如果一个正在开发中的服务提供者注册,可能会影响消费者不能正常运行。-->
  2. <!-- 禁用注册配置:-->
  3. <dubbo:registry address="10.20.153.10:9090" register="false" />
  4. <!-- 或者:-->
  5. <dubbo:registry address="10.20.153.10:9090?register=false" />

消费者只注册不订阅:

如果有两个镜像环境,两个注册中心,有一个服务只在其中一个注册中心有部署,另一个注册中心还没来得及部署,而两个注册中心的其它应用都需要依赖此服务,所以需要将服务同时注册到两个注册中心,但却不能让此服务同时依赖两个注册中心的其它服务。

  1. <!-- 禁用订阅配置:-->
  2. <dubbo:registry id="hzRegistry" address="10.20.153.10:9090" />
  3. <dubbo:registry id="qdRegistry" address="10.20.141.150:9090" subscribe="false" />
  4. <!-- 或者:-->
  5. <dubbo:registry id="hzRegistry" address="10.20.153.10:9090" />
  6. <dubbo:registry id="qdRegistry" address="10.20.141.150:9090?subscribe=false" />

协议的选用

不同服务在性能上适用不同的协议传输,大数据用短连接协议,小数据大并发用长连接协议:

  1. <dubbo:application name="world" />
  2. <dubbo:registry id="registry" address="10.20.141.150:9090" username="admin" password="hello1234" />
  3. <!-- 多协议配置 -->
  4. <dubbo:protocol name="dubbo" port="20880" />
  5. <dubbo:protocol name="rmi" port="1099" />
  6. <!-- 使用dubbo协议暴露服务 -->
  7. <dubbo:service interface="com.alibaba.hello.api.HelloService" version="1.0.0" ref="helloService" protocol="dubbo" />
  8. <!-- 使用rmi协议暴露服务 -->
  9. <dubbo:service interface="com.alibaba.hello.api.DemoService" version="1.0.0" ref="demoService" protocol="rmi" />
  10. <!-- 使用多个协议暴露服务 -->
  11. <dubbo:service id="helloService" interface="com.alibaba.hello.api.HelloService" version="1.0.0" protocol="dubbo,hessian" />

如何配置多注册中心?

中文站有些服务来不及在青岛部署,只在杭州部署,而青岛的其它应用需要引用此服务,就可以将服务同时注册到两个注册中心。

  1. <dubbo:application name="world" />
  2. <!-- 多注册中心配置 -->
  3. <dubbo:registry id="hangzhouRegistry" address="10.20.141.150:9090" />
  4. <dubbo:registry id="qingdaoRegistry" address="10.20.141.151:9010" default="false" />
  5. <!-- 向多个注册中心注册 -->
  6. <dubbo:service interface="com.alibaba.hello.api.HelloService" version="1.0.0" ref="helloService" registry="hangzhouRegistry,qingdaoRegistry" />

CRM有些服务是专门为国际站设计的,有些服务是专门为中文站设计的,就要分开配置:

  1. <dubbo:application name="world" />
  2. <!-- 多注册中心配置 -->
  3. <dubbo:registry id="chinaRegistry" address="10.20.141.150:9090" />
  4. <dubbo:registry id="intlRegistry" address="10.20.154.177:9010" default="false" />
  5. <!-- 向中文站注册中心注册 -->
  6. <dubbo:service interface="com.alibaba.hello.api.HelloService" version="1.0.0" ref="helloService" registry="chinaRegistry" />
  7. <!-- 向国际站注册中心注册 -->
  8. <dubbo:service interface="com.alibaba.hello.api.DemoService" version="1.0.0" ref="demoService" registry="intlRegistry" />

Group的简单使用

一个接口有多种实现时用group区分:

  1. <dubbo:service group="feedback" interface="com.xxx.IndexService" />
  2. <dubbo:service group="member" interface="com.xxx.IndexService" />
  3. <dubbo:reference id="feedbackIndexService" group="feedback" interface="com.xxx.IndexService" />
  4. <dubbo:reference id="memberIndexService" group="member" interface="com.xxx.IndexService" />

Dubbo的令牌验证:

防止消费者绕过注册中心访问提供者()

  1. <!--随机token令牌,使用UUID生成-->
  2. <dubbo:provider interface="com.foo.BarService" token="true" />
  3. <!--固定token令牌,相当于密码-->
  4. <dubbo:provider interface="com.foo.BarService" token="123456" />
  5. 也可在服务级别设置:
  6. <!--随机token令牌,使用UUID生成-->
  7. <dubbo:service interface="com.foo.BarService" token="true" />
  8. <!--固定token令牌,相当于密码-->
  9. <dubbo:service interface="com.foo.BarService" token="123456" />

发表评论

表情:
评论列表 (有 0 条评论,290人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Dubbo中的组件

    微服务的架构主要包括服务描述、服务发现、服务调用、服务监控、服务追踪以及服务治理这几个基本组件。 那么每个基本组件从架构和代码设计上该如何实现?组件之间又是如何串联来实现一个

    相关 Dubbo架构

    Apache Dubbo 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。 ![S