当前位置:   article > 正文

Dubbo详解(超详细--学习Dubbo看这一篇就够了)_dubbo学习

dubbo学习

一、dubbo是什么?

Dubbo是一个分布式服务框架(http://dubbo.apache.org),致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架(告别Web Service模式中的WSdl,以服务者与消费者的方式在dubbo上注册)

二、Dubbo核心组件:

1)、注册中心(registry)

生产者在此注册并发布内容,消费者在此订阅并接收发布的内容。

2)、消费者(consumer)

客户端,从注册中心获取到方法,可以调用生产者中的方法。

3)、生产者(provider)

服务端,生产内容,生产前需要依赖容器(先启动容器)。

4)、容器(container)

生产者在启动执行的时候,必须依赖容器才能正常启动(默认依赖的是spring容器),

5)、监控(Monitor)

统计服务的调用次数与时间等(

1)、注册中心(registry)

生产者在此注册并发布内容,消费者在此订阅并接收发布的内容。

2)、消费者(consumer)

客户端,从注册中心获取到方法,可以调用生产者中的方法。

3)、生产者(provider)

服务端,生产内容,生产前需要依赖容器(先启动容器)。

4)、容器(container)

生产者在启动执行的时候,必须依赖容器才能正常启动(默认依赖的是spring容器),

5)、监控(Monitor)

统计服务的调用次数与时间等(推荐使用的程序是dubbo-admin(图形化页面程序))

三、Dubbo核心功能:

Dubbo主要提供了3大核心功能:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

1)远程方法调用

网络通信框架,提供对多种NIO框架抽象封装,包括“同步转异步”和“请求-响应”模式的信息交换方式。

2)智能容错和负载均衡

提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。

3)服务注册和发现

服务注册,基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

四、dubbo高级特性:

1)序列化

•dubbo 内部已经将序列化和反序列化的过程内部封装了

•我们只需要在定义pojo类时实现Serializable接口即可

•一般会定义一个公共的pojo模块,让生产者和消费者都依赖该模块。

2)地址缓存

服务提供者向注册中心注册信息,服务消费者向注册中心获取服务提供者的注册信息,同时保存了服务提供者的地址,当下一次请求时就不需要向注册中心获取信息,而是通过缓存的地址向服务提供者直接请求信息。

注册中心挂了,服务是否可以正常访问?

•可以,因为dubbo服务消费者在第一次调用时,会将服务提供方地址缓存到本地,以后在调用则不会访问注册 中心。

•当服务提供者地址发生变化时,注册中心会通知服务消费者。

3)超时与重试

•服务消费者在调用服务提供者的时候发生了阻塞、等待的情形,这个时候,服务消费者会一直等待下去。

•在某个峰值时刻,大量的请求都在同时请求服务消费者,会造成线程的大量堆积,势必会造成雪崩。

•dubbo 利用超时机制来解决这个问题,设置一个超时时间,在这个时间段内,无法完成服务访问,则自动断开连接。

•使用timeout属性配置超时时间,默认值1000,单位毫秒。 设置了超时时间,在这个时间段内,无法完成服务访问,则自动断开连接。

•如果出现网络抖动,则这一次请求就会失败。Dubbo 提供重试机制来避免类似问题的发生。 通过 retries 属性来设置重试次数。默认为 2 次。

实例代码:

服务提供者:

服务消费者:

4)多版本

•灰度发布:当出现新功能时,会让一部分用户先使用新功能,用户反馈没问题时,再将所有用户迁移到新功能。

•dubbo 中使用version 属性来设置和调用同一个接口的不同版本

实例:

可以服务提供者的Service类中添加如下代码:

Service(version = "v1.0"),可以将多个服务提供者的Service类同时添加,但是版本号要不一样。

在服务消费者中,找到启动类的@Reference类中添加version属性,版本号就根据服务提供者的版本需求来定(根据实际情况来选择)

5)负载均衡

负载均衡策略(4种):

•Random :按权重随机,默认值。按权重设置随机概率。

•RoundRobin :按权重轮询。

•LeastActive:最少活跃调用数,相同活跃数的随机。

•ConsistentHash:一致性 Hash,相同参数的请求总是发到同一提供者。

实例代码:

服务提供者:

服务消费者:

6)集群容错

Failover Cluster:失败重试。默认值。当出现失败,重试其它服务器 ,默认重试2次,使用 retries 配置。一般用于读操作 。 Failfast Cluster :快速失败,只发起一次调用,失败立即报错。通常用于写操作。 Failsafe Cluster :失败安全,出现异常时,直接忽略。返回一个空结果。 Failback Cluster :失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。 Forking Cluster :并行调用多个服务器,只要一个成功即返回。 Broadcast Cluster :广播调用所有提供者,逐个调用,任意一台报错则报错。

代码实例:

7)服务降级

在服务器压力过大的时候,可以选择服务降级来减少某些服务占用的资源,从而使得更多的资源分配给核心业务

代码实例:

调用该服务后,不会报错,只会返会null

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/166148
推荐阅读
相关标签
  

闽ICP备14008679号