dubbo教程-07-如何正确的配置dubbo?

写在前面

hello大家好
欢迎大家来到御风大世界
本次课时我们dubbo系列教程的第7课
在这次课 我将为大家
演示 dubbo的一些配置
如何配置
以及dubbo官方文档的解释

配置方式

通常一个框架 如何给你开放了很多的配置项
那么这个框架肯定是一个优秀的开放的框架
可以配置的东西
就没有必要自己去代码写了
这一点 我觉得dubbo做的很好
我们来到他的官网
http://dubbo.apache.org/zh-cn/docs/user/configuration/xml.html
看到这样一个界面
我们点击配置

imagepng

可以配置的方式 总共有 四个 方式
- XML 配置
- 属性配置
- API配置
- 注解配置

XML配置

在这里 我们首先看 xml 的配置方式
这个最普遍

provider.xml 示例

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">  
    <dubbo:application name="hello-world-app"  />  
    <dubbo:registry address="multicast://224.5.6.7:1234" />  
    <dubbo:protocol name="dubbo" port="20880" />  
    <dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoServiceLocal" />  
    <dubbo:reference id="demoServiceRemote" interface="com.alibaba.dubbo.demo.DemoService" />  
</beans>

所有标签都支持自定义参数,用于不同扩展点实现的特殊配置,如:

<dubbo:protocol name="jms">
    <dubbo:parameter key="queue" value="your_queue" />
</dubbo:protocol>

或: 1(http://dubbo.apache.org/zh-cn/docs/user/configuration/xml.html#fn1)

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">  
    <dubbo:protocol name="jms" p:queue="your_queue" />  
</beans>

配置之间的关系

imagepng

配置覆盖关系

以 timeout 为例,显示了配置的查找顺序,其它 retries, loadbalance, actives 等类似:

  • 方法级优先,接口级次之,全局配置再次之。
  • 如果级别一样,则消费方优先,提供方次之。

其中,服务提供方配置,通过 URL 经由注册中心传递给消费方。

建议由服务提供方设置超时,因为一个方法需要执行多长时间,服务提供方更清楚,如果一个消费方同时引用多个服务,就不需要关心每个服务的超时设置。

理论上 ReferenceConfig 的非服务标识配置,在 ConsumerConfig,ServiceConfig, ProviderConfig 均可以缺省配置。

虽然我们可以使用 多种方式了来 配置dubbo
但是我们这里有一个配置覆盖的概念

覆盖策略

JVM 启动 -D 参数优先,这样可以使用户在部署和启动时进行参数重写,比如在启动时需改变协议的端口。

XML 次之,如果在 XML 中有配置,则 dubbo.properties 中的相应配置项无效。

Properties 最后,相当于缺省值,只有 XML 没有配置时,dubbo.properties 的相应配置项才会生效,通常用于共享公共配置,比如应用名。

配置项解答

要讲这个点的话
我强烈建议大家参看 dubbo的官方文档
说实话 我没有见过这么好的文档
而且是 中英文可以 切换的
我们点击 示例

imagepng

看到了 dubbo 官方 给我们列举的 配置示例
很方便
我建议 大家先把这个 文档好好看几遍
然后 在项目中 运用dubbo的时候
如果遇到了一些场景的话
你就可以通过配置来解决了
有时候 你觉得是 BUG 其实用配置项 就可以轻松解决的

推荐配置

在 Provider 上尽量多配置 Consumer 端属性

原因如下:

  • 作服务的提供者,比服务使用方更清楚服务性能参数,如调用的超时时间、合理的重试次数等
  • 在 Provider 配置后,Consumer 不配置则会使用 Provider 的配置值,即 Provider 配置可以作为 Consumer 的缺省值 1(http://dubbo.apache.org/zh-cn/docs/user/recommend.html#fn1)。否则,Consumer 会使用 Consumer 端的全局设置,这对于 Provider 是不可控的,并且往往是不合理的

Provider 上尽量多配置 Consumer 端的属性,让 Provider 实现者一开始就思考 Provider 服务特点、服务质量等问题。

示例:

<dubbo:service interface="com.alibaba.hello.api.HelloService" version="1.0.0" ref="helloService"
    timeout="300" retry="2" loadbalance="random" actives="0" />

<dubbo:service interface="com.alibaba.hello.api.WorldService" version="1.0.0" ref="helloService"
    timeout="300" retry="2" loadbalance="random" actives="0" >
    <dubbo:method name="findAllPerson" timeout="10000" retries="9" loadbalance="leastactive" actives="5" />
<dubbo:service/>

在 Provider 上可以配置的 Consumer 端属性有:

  1. timeout 方法调用超时
  2. retries 失败重试次数,缺省是 2 2(http://dubbo.apache.org/zh-cn/docs/user/recommend.html#fn2)
  3. loadbalance 负载均衡算法 3(http://dubbo.apache.org/zh-cn/docs/user/recommend.html#fn3),缺省是随机 random。还可以有轮询 roundrobin、最不活跃优先 4(http://dubbo.apache.org/zh-cn/docs/user/recommend.html#fn4)leastactive 等
  4. actives 消费者端,最大并发调用限制,即当 Consumer 对一个服务的并发调用到上限后,新调用会阻塞直到超时,在方法上配置 dubbo:method 则并发限制针对方法,在接口上配置 dubbo:service,则并发限制针对服务

详细配置说明参见:Dubbo配置参考手册

Provider 上配置合理的 Provider 端属性

<dubbo:protocol threads="200" /> 
<dubbo:service interface="com.alibaba.hello.api.HelloService" version="1.0.0" ref="helloService"
    executes="200" >
    <dubbo:method name="findAllPerson" executes="50" />
</dubbo:service>

Provider 上可以配置的 Provider 端属性有:

  1. threads 服务线程池大小
  2. executes 一个服务提供者并行执行请求上限,即当 Provider 对一个服务的并发调用达到上限后,新调用会阻塞,此时 Consumer 可能会超时。在方法上配置 dubbo:method 则并发限制针对方法,在接口上配置 dubbo:service,则并发限制针对服务

配置管理信息

目前有负责人信息和组织信息用于区分站点。有问题时便于的找到服务的负责人,至少写两个人以便备份。负责人和组织的信息可以在注册中心的上看到。

应用配置负责人、组织:

<dubbo:application owner=”ding.lid,william.liangf” organization=”intl” />

service 配置负责人:

<dubbo:service owner=”ding.lid,william.liangf” />

reference 配置负责人:

<dubbo:reference owner=”ding.lid,william.liangf” />

若没有配置 service 和 reference 的负责人,则默认使用 dubbo:application 设置的负责人。

配置 Dubbo 缓存文件

提供者列表缓存文件:

<dubbo:registry file=”${user.home}/output/dubbo.cache” />

注意:

  1. 应用可以根据需要调整缓存文件的路径,保证这个文件不会在发布过程中被清除;
  2. 如果有多个应用进程,注意不要使用同一个文件,避免内容被覆盖;

该文件会缓存注册中心列表和服务提供者列表。配置缓存文件后,应用重启过程中,若注册中心不可用,应用会从该缓存文件读取服务提供者列表,进一步保证应用可靠性。

监控配置

  1. 使用固定端口暴露服务,而不要使用随机端口

    这样在注册中心推送有延迟的情况下,消费者通过缓存列表也能调用到原地址,保证调用成功。

  2. 使用 Dubbo Ops 监控注册中心上的服务提供方

    使用 Dubbo Ops 监控服务在注册中心上的状态,确保注册中心上有该服务的存在。

  3. 服务提供方,使用 Dubbo Qos 的 telnet 或 shell 监控项

    监控服务提供者端口状态:echo status | nc -i 1 20880 | grep OK | wc -l,其中的 20880 为服务端口

  4. 服务消费方,通过将服务强制转型为 EchoService,并调用 $echo() 测试该服务的提供者是可用

    如 assertEqauls(“OK”, ((EchoService)memberService).$echo(“OK”));

不要使用 dubbo.properties 文件配置,推荐使用对应 XML 配置

Dubbo 中所有的配置项都可以配置在 Spring 配置文件中,并且可以针对单个服务配置。

如完全不配置则使用 Dubbo 缺省值,参见 Dubbo配置参考手册 中的说明。

dubbo.properties 中属性名与 XML 的对应关系

  1. 应用名 dubbo.application.name

    <dubbo:application name="myalibaba" >
    
    
  2. 注册中心地址 dubbo.registry.address

    <dubbo:registry address="11.22.33.44:9090" >
    
    
  3. 调用超时 dubbo.service.*.timeout

    可以在多个配置项设置超时 timeout,由上至下覆盖(即上面的优先)5(http://dubbo.apache.org/zh-cn/docs/user/recommend.html#fn5),其它的参数(retriesloadbalanceactives等)的覆盖策略与 timeout 相同。示例如下:

    提供者端特定方法的配置

    <dubbo:service interface="com.alibaba.xxx.XxxService" >
        <dubbo:method name="findPerson" timeout="1000" />
    </dubbo:service>
    
    

    提供者端特定接口的配置

    <dubbo:service interface="com.alibaba.xxx.XxxService" timeout="200" />
    
    
  4. 服务提供者协议 dubbo.service.protocol、服务的监听端口 dubbo.service.server.port

    <dubbo:protocol name="dubbo" port="20880" />
    
    
  5. 服务线程池大小 dubbo.service.max.thread.threads.size

    <dubbo:protocol threads="100" />
    
    
  6. 消费者启动时,没有提供者是否抛异常 alibaba.intl.commons.dubbo.service.allow.no.provider

    <dubbo:reference interface="com.alibaba.xxx.XxxService" check="false" />
    
    

dubbo官方文档

我们一起点击这个链接 http://dubbo.apache.org/zh-cn/docs/user/quick-start.html
一起来学习下

总结

dubbo在很多的地方给我开放和预留了 个性化配置
这个是一个非常方便开发者适配各种场景的 设计
我个人非常赞同
看到他这么多的配置项 而且文档中的各个配置 示例 都写的很详细
让人一看就懂 一看就想自己动手试试
确实很不错
我也希望大家 能够多多的去看他的官方文档
并且对照自己的实际开发
进行验证和体会
如果在这个过程中
大家有什么不明白的地方
也可以到B站 或者 我的博客 公众号 留言告诉我
再一次感谢您的收看 谢谢

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值