博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Dubbo总结(四)
阅读量:3959 次
发布时间:2019-05-24

本文共 3557 字,大约阅读时间需要 11 分钟。

一、Dubbo与springboot整合的三种方式

 

1、注解方式

导入dubbo-starter,在application.properties配置属性,

使用@Service暴露服务,使用@Reference接收服务,使用@EnableDubbo开启组件扫描

缺点:注解方式无法做到方法级别的精确配置

 

2、配置文件方式

导入dubbo-starter,保留dubbo.xml文件,使用@ImportResource("consumer.xml")导入配置文件即可

缺点:接口太多不便于管理

 

3、使用注解API方式

将每一个组件手动创建到容器中,使用@EnableDubbo或@DubboComponentScan(),让dubbo来扫描其它组件

@Configurationpublic class DubboConfig {   @Bean   public ApplicationConfig applicationConfig(){       ApplicationConfig applicationConfig = new ApplicationConfig();       applicationConfig.setName("student-service-provider");       return applicationConfig;   }   @Bean   public RegistryConfig registryConfig(){       RegistryConfig registryConfig = new RegistryConfig();       registryConfig.setAddress("zookeeper://127.0.0.1:2181");       return registryConfig;   }   @Bean   public ProtocolConfig protocolConfig(){       ProtocolConfig protocolConfig = new ProtocolConfig();       protocolConfig.setName("dubbo");       protocolConfig.setPort(20881);       return protocolConfig;   }   @Bean    public ServiceConfig
serviceConfig(StudentServiceImpl studentServiceImpl){ ServiceConfig
studentServiceConfig = new ServiceConfig<>(); studentServiceConfig.setInterface(StudentService.class); studentServiceConfig.setRef(studentServiceImpl); studentServiceConfig.setTimeout(1000); studentServiceConfig.setVersion("1.0.0"); MethodConfig methodConfig = new MethodConfig(); methodConfig.setName("getStudentById"); methodConfig.setTimeout(1000); List
list = new LinkedList<>(); list.add(methodConfig); studentServiceConfig.setMethods(list); return studentServiceConfig; }}

二、Dubbo的高可用

高可用通过设计减少系统不能提供服务的时间

 

1、zookeeper宕机与dubbo直连

现象:zookeeper宕机,还可以消费dubbo暴露服务

原因:

1、监控中心宕机不影响使用,但会丢失部分采样数据

2、数据库宕机,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务

3、注册中心对等集群,任意一台宕机,将会自动切换到另一台

4、注册中心宕机,服务提供者和服务消费者仍能通过本地缓存通道

5、服务提供者,任意一台宕机,不影响使用

6、若全部宕机,服务消费者将无法使用,并无限次等待服务提供者回复

直连的方式可以绕开注册中心  @reference("指明机器的地址及端口")

 

2、Dubbo的四种负载均衡机制

基于权重随机

基于权重轮询

 

最少活跃数

 

一致性hash 

 

【配置】

可在Dubbo控制台进行修改,也可在代码中写死

服务端服务级别

客户端服务级别

服务端方法级别

客户端方法级别

 

三、服务熔断和服务降级

当服务器压力过大时,选择性的对一些服务简单处理或不处理,保证核心业务高效运作

通过服务降级临时屏蔽某个出错的非关键服务,并定义降级后的返回策略

向注册中心写入动态配置覆盖规则:

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 值,不抛异常。用来容忍不重要服务不稳定时对调用方的影响。

 

四、集群的容错模式

1、Failover Cluster

失败自动切换,当出现失败,重试其它服务器 。通常用于读操作,

但重试会带来更长延迟。可通过 retries="2" 来设置重试次数(不含第一次)

2、Failfast Cluster

快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录

3、Failsafe Cluster

失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作

4、Failback Cluster

失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。

5、Forking Cluster

并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks="2" 来设置最大并行数。

6、Broadcast Cluster

广播调用所有提供者,逐个调用,任意一台报错则报错 。通常用于通知所有提供者更新缓存或日志等本地资源信息。

【集群模式配置】

按照以下示例在服务提供方和消费方配置集群模式

 

五、整合Hystrix实现集群容错

1、引入依赖

org.springframework.cloud
spring-cloud-starter-netflix-hystrix
1.4.5.RELEASE

2、@EnableHystrix开启服务

3、@HystrixCommand(fallbackMethod = "备用方法")

转载地址:http://rqazi.baihongyu.com/

你可能感兴趣的文章