Dubbo 配置官方文档:https://dubbo.apache.org/zh/docs/v3.0/references/configuration/
<dependency>
<groupId>com.alibabagroupId>
<artifactId>dubboartifactId>
<version>2.6.10.1version>
dependency>
<dependency>
<groupId>org.apache.curatorgroupId>
<artifactId>curator-frameworkartifactId>
<version>5.1.0version>
dependency>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<dubbo:application name="demo-provider"/>
<dubbo:registry address="zookeeper://127.0.0.1:2181"/>
<dubbo:protocol name="dubbo" port="20890"/>
<dubbo:service interface="UserService" ref="demoService"/>
<bean id="demoService" class="UserServiceImpl"/>
<dubbo:monitor protocol="registry"/>
beans>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>dubboartifactId>
<version>2.6.10.1version>
dependency>
<dependency>
<groupId>org.apache.curatorgroupId>
<artifactId>curator-frameworkartifactId>
<version>5.1.0version>
dependency>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<dubbo:application name="demo-consumer"/>
<dubbo:registry address="zookeeper://ip:2181"/>
<dubbo:reference interface="UserService" id="userService"/>
<dubbo:monitor protocol="registry"/>
beans>
标签 | 用途 | 解释 |
---|---|---|
service | 服务配置 | 暴露一个服务,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心 |
reference | 引用配置 | 创建一个远程服务代理,一个引用可以指向多个注册中心 |
protocol | 协议配置 | 配置提供服务的协议信息,协议由提供方指定,消费方被动接收 |
application | 应用配置 | 配置当前应用信息,不管应用是消费者还是提供者 |
module | 模块配置 | 配置当前模块信息 |
registry | 注册中心配置 | 配置连接注册中心相关信息 |
monitor | 监控中心配置 | 配置连接监控中心的相关信息 |
provider | 提供方配置 | ProtocolConfig 和 ServiceConfig 某属性没有配置时,使用这个缺省值 |
consumer | 消费者配置 | ReferenceConfig 某属性没有配置时,使用此缺省值 |
method | 方法配置 | 用于 ServiceConfig 和 ReferenceConfig 指定方法级的配置信息 |
argument | 参数配置 | 用于指定方法参数配置 |
默认启动时检查依赖的服务是否可用,不可用抛出异常,阻止 Spring 初始化完成
spring xml 配置文件配置:
<dubbo:reference interface="com.foo.BarService" check="false" />
<dubbo:consumer check="false" />
<dubbo:registry check="false" />
properties 配置文件:
dubbo.reference.com.foo.BarService.check=false
dubbo.reference.check=false
dubbo.consumer.check=false
dubbo.registry.check=false
Dubbo 服务在尝试调用一次后,出现非业务异常,默认会进行额外的两次重试
重试次数不包含第一次调用,0 代表不重试
需要注意幂等性,非幂等不能设置重试次数
xml 配置
<dubbo:consumer retries="2">dubbo:consumer>
一个借口实现出现不兼容升级时,可以使用版本号过度,版本号不同的服务相互之间不引用
xml 配置
<dubbo:service interface="" version="1.0.0" />
<dubbo:service interface="" version="2.0.0" />
<dubbo:reference id="" interface="" version="1.0.0" />
<dubbo:reference id="" interface="" version="2.0.0" />
<dubbo:reference id="" interface="" version="*" />
zookeeper 注册中心宕机,还可以消费 dubbo 暴露的服务
Random LoadBalance(默认):基于权重的负载均衡轮询机制
LeastActive LoadBalance:最小活跃数
ConsistentHash LoadBalance:一致性 hash 负载均衡
服务器压力很大的时候,根据实际业务情况及流量,对一些服务和页面有策略的不处理换种简单的方式处理,从而释放服务器资源保证核心交易正常运作或者高效运作
向注册中心写入动态配置覆盖规则
RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension();
Registry registry = registryFactory.getRegistry(URL.valueOf("zookeeper://10.20.153.10:2181"));
registry.register(URL.valueOf("override://0.0.0.0/com.foo.BarService?category=configurators&dynamic=false&application=foo&mock=force:return+null"));
其中:
mock=force:return+null
表示消费方对该服务的方法调用都直接返回 null 值,不发起远程调用。用来屏蔽不重要服务不可用时对调用方的影响。mock=fail:return+null
表示消费方对该服务的方法调用在失败后,再返回 null 值,不抛异常。用来容忍不重要服务不稳定时对调用方的影响。屏蔽远程调用:屏蔽后将不发起远程调用,直接在客户端返回空对象
容错:容错后,远程调用失败时,返回空对象
集群调用失败时,dubbo 提供了多种容错方案,默认为 failover
快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。
失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。
失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。
并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks="2"
来设置最大并行数。
广播调用所有提供者,逐个调用,任意一台报错则报错。通常用于通知所有提供者更新缓存或日志等本地资源信息。
导入 maven 依赖
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-hystrixartifactId>
<version>2.2.8.RELEASEversion>
dependency>
在消费者和提供者配置对应的容错
在 Application 类上增加 @EnableHystrix
启用 Hystrix starter
在提供的方法上加 @HystrixCommand
,服务被 Hystrix 代理
在消费者也加入 @EnableHystrix
注解,在调用的方法上使用 @HystrixCommand(fallbackMethod="方法名")
ServiceConfig
, ReferenceConfig
为中心,可以直接初始化配置类,也可以通过 spring 解析配置生成配置类ServiceProxy
为中心,扩展接口为 ProxyFactory
RegistryFactory
, Registry
, RegistryService
Invoker
为中心,扩展接口为 Cluster
, Directory
, Router
, LoadBalance
Statistics
为中心,扩展接口为 MonitorFactory
, Monitor
, MonitorService
Invocation
, Result
为中心,扩展接口为 Protocol
, Invoker
, Exporter
Request
, Response
为中心,扩展接口为 Exchanger
, ExchangeChannel
, ExchangeClient
, ExchangeServer
Message
为中心,扩展接口为 Channel
, Transporter
, Client
, Server
, Codec
Serialization
, ObjectInput
, ObjectOutput
, ThreadPool