前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Dubbo入门到实战2

Dubbo入门到实战2

作者头像
Vincent-yuan
发布2021-11-04 16:11:14
2750
发布2021-11-04 16:11:14
举报
文章被收录于专栏:Vincent-yuan

1、为什么需要dubbo 2、dubbo架构简析 3、dubbo入门 4、zookeeper注册中心加入dubbo 5、dubbo多种配置方式(xml、api、注解) 6、常用场景介绍

接上篇

六 常用场景

在下面的讲解中,都会是以 xml 配置的方式来讲解的,这也是 dubbo 官方比较推荐的方式。以下的操作都是在服务端的 xml 配置文件和消费端的配置文件来讲解的。

6.1 启动时检查

Dubbo 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring 初始化完成,以便上线时,能及早发现问题,默认 `check="true"。

但是,有的时候,我们并不是都需要启动时就检查的,比如测试的时候,我们是需要更快速的启动,所以,这种场景的时候,我们是需要关闭这个功能的。

下面,我们看看如何使用这个功能。

在服务端注册的时候(客户端注册时同样适用);

<dubbo:registry protocol="zookeeper" address="localhost:2181,localhost:2182,localhost:2183" check="false"/>

在客户端引用服务端服务的时候;

<dubbo:reference check="false" id="providerService" interface="com.sihai.dubbo.provider.service.ProviderService"/>

就是这么简单,就是这么强!

6.2 集群容错

dubbo 也是支持集群容错的,同时也有很多可选的方案,其中,默认的方案是 failover,也就是重试机制。

首先,我们先把所有的容错机制都整理一遍,然后再看看使用。

集群模式

说明

使用方法

Failover Cluster

失败自动切换,当出现失败,重试其它服务器。通常用于读操作,但重试会带来更长延迟。可通过 retries="2" 来设置重试次数(不含第一次)。

cluster="xxx" xxx:集群模式名称 ,例如cluster="failover"

Failfast Cluster

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

Failsafe Cluster

失败安全,出现异常时,直接忽略。

Failback Cluster

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

Forking Cluster

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

Broadcast Cluster

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

使用实例 在发布服务或者引用服务的时候设置

<!--服务发布的配置,需要暴露的服务接口--> <dubbo:service cluster="failover" retries="2" interface="com.sihai.dubbo.provider.service.ProviderService" ref="providerService"/>

<dubbo:reference cluster="failover" retries="2" check="false" id="providerService" interface="com.sihai.dubbo.provider.service.ProviderService"/>

6.3 负载均衡

负载均衡想必是一个再熟悉不过的概念了,所以,dubbo 支持也是再正常不过了,这里也总结一下 dubbo 支持的负载均衡的一些方案及使用方法。

负载均衡模式

说明

使用方法

Random LoadBalance

随机 按权重设置随机概率

<dubbo:service loadbalance="xxx"/> xxx:负载均衡方法

RoundRobin LoadBalance

轮询 按公约后的权重设置轮询比率。

LeastActive LoadBalance

最少活跃调用数 相同活跃数的随机,活跃数指调用前后计数差。

ConsistentHash LoadBalance

一致性 Hash 相同参数的请求总是发到同一提供者。 当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动。

6.4 直连提供者

在开发及测试环境下,经常需要绕过注册中心,只测试指定服务提供者,所以,这种情况下,我们只需要直接连接服务端的地即可,其实,这种方法在前面的讲解已经使用到了,第一种讲解的方式就是这种方式,因为这种方式简单。

使用

<dubbo:reference id="providerService" interface="com.sihai.dubbo.provider.service.ProviderService" url="dubbo://192.168.234.1:20880/com.sihai.dubbo.provider.service.ProviderService"/>

说明:可以看到,只要在消费端在 dubbo:reference 节点使用 url 给出服务端的方法即可。

6.5 只订阅

只订阅就是只能够订阅服务端的服务,而不能够注册。

引用官方的使用场景如下:

为方便开发测试,经常会在线下共用一个所有服务可用的注册中心,这时,如果一个正在开发中的服务提供者注册,可能会影响消费者不能正常运行。 可以让服务提供者开发方,只订阅服务(开发的服务可能依赖其它服务),而不注册正在开发的服务,通过直连测试正在开发的服务。

代码语言:javascript
复制
<dubbo:registry register="false" protocol="zookeeper" address="localhost:2181,localhost:2182,localhost:2183" check="false"/>

① 使用只订阅方式

当在服务提供端使用 register="false" 的时候,我们使用下面的方式获取服务端的服务;

<dubbo:reference cluster="failover" retries="2" check="false" id="providerService" interface="com.sihai.dubbo.provider.service.ProviderService"/>

启动信息

图片.png
图片.png

发现,这时候并不是向注册中心 zookeeper 注册,而只是做了发布服务和启动netty

② 不使用只订阅方式

<dubbo:registry protocol="zookeeper" address="localhost:2181,localhost:2182,localhost:2183" check="false"/>

启动信息

可以发现,这里就向注册中心 zookeeper 注册了。

6.6 只注册

只注册正好跟前面的只订阅相反,这个时候可以向注册中心注册,但是,消费端却不能够读到服务。

应用场景

如果有两个镜像环境,两个注册中心,有一个服务只在其中一个注册中心有部署,另一个注册中心还没来得及部署,而两个注册中心的其它应用都需要依赖此服务。

这个时候,可以让服务提供者方只注册服务到另一注册中心,而不从另一注册中心订阅服务。

使用说明

<dubbo:registry subscribe="false" address="localhost:2181"></dubbo:registry>

在服务端的 dubbo:registry 节点下使用 subscribe="false" 来声明这个服务是只注册的服务。

这个时候消费端调用的时候是不能调用的。

6.7 多协议机制

在前面我们使用的协议都是 dubbo 协议,但是 dubbo 除了支持这种协议外还支持其他的协议,比如,rmi、hessian等,另外,而且还可以用多种协议同时暴露一种服务。

使用方法

① 一种接口使用一种协议

先声明多种协议

<!--当前服务发布所依赖的协议;webserovice、Thrift、Hessain、http--> <dubbo:protocol name="dubbo" port="20880"/> <dubbo:protocol name="rmi" port="1099" />

然后在发布接口的时候使用具体协议

<!--服务发布的配置,需要暴露的服务接口--> <dubbo:service cluster="failover" retries="2" interface="com.sihai.dubbo.provider.service.ProviderService" ref="providerService"/> <dubbo:service cluster="failover" retries="2" interface="com.sihai.dubbo.provider.service.ProviderService" ref="providerService" protocol="rmi"/>

在输出日志中,就可以找到rmi发布的接口。

代码语言:javascript
复制
rmi://192.168.234.1:1099/com.sihai.dubbo.provider.service.ProviderService?anyhost=true&application=provider&bean.name=com.sihai.dubbo.provider.service.ProviderService&cluster=failover&dubbo=2.0.2&generic=false&interface=com.sihai.dubbo.provider.service.ProviderService&methods=SayHello&owner=sihai&pid=796&retries=2&side=provider&timestamp=1564281053185, dubbo version: 2.6.6, current host: 192.168.234.1

② 一种接口使用多种协议 声明协议和上面的方式一样,在发布接口的时候有一点不一样。

<dubbo:service cluster="failover" retries="2" interface="com.sihai.dubbo.provider.service.ProviderService" ref="providerService" protocol="rmi,dubbo"/>

说明:protocol属性,可以用,隔开,使用多种协议。

6.8 多注册中心

Dubbo 支持同一服务向多注册中心同时注册,或者不同服务分别注册到不同的注册中心上去,甚至可以同时引用注册在不同注册中心上的同名服务。

服务端多注册中心发布服务

一个服务可以在不同的注册中心注册,当一个注册中心出现问题时,可以用其他的注册中心。

注册

<!--多注册中心--> <dubbo:registry protocol="zookeeper" id="reg1" timeout="10000" address="localhost:2181"/> <dubbo:registry protocol="zookeeper" id="reg2" timeout="10000" address="localhost:2182"/> <dubbo:registry protocol="zookeeper" id="reg3" timeout="10000" address="localhost:2183"/>

发布服务

<!--服务发布的配置,需要暴露的服务接口--> <dubbo:service cluster="failover" retries="2" interface="com.sihai.dubbo.provider.service.ProviderService" ref="providerService" registry="reg1"/> <dubbo:service cluster="failover" retries="2" interface="com.sihai.dubbo.provider.service.ProviderService" ref="providerService" protocol="rmi" registry="reg2"/>

说明:使用registry="reg2"指定该接口使用的注册中心,同时也可以使用多个,用隔开,例如,registry="reg1,,reg2"

消费端多注册中心引用服务

首先,先向不同注册中心注册;

<!--多注册中心--> <dubbo:registry protocol="zookeeper" id="reg1" timeout="10000" address="localhost:2181"/> <dubbo:registry protocol="zookeeper" id="reg2" timeout="10000" address="localhost:2182"/> <dubbo:registry protocol="zookeeper" id="reg3" timeout="10000" address="localhost:2183"/>

其次,不同的消费端服务引用使用不同的注册中心;

!--不同的服务使用不同的注册中心--> <dubbo:reference cluster="failover" retries="2" check="false" id="providerService" interface="com.sihai.dubbo.provider.service.ProviderService" registry="reg1"/> <dubbo:reference cluster="failover" retries="2" check="false" id="providerService2" interface="com.sihai.dubbo.provider.service.ProviderService" registry="reg2"/>

说明:上面分别使用注册中心1和注册中心2。

6.9 多版本

不同的服务是有版本不同的,版本可以更新并且升级,同时,不同的版本之间是不可以调用的。

<!--服务发布的配置,需要暴露的服务接口--> <dubbo:service cluster="failover" retries="2" interface="com.sihai.dubbo.provider.service.ProviderService" ref="providerService" registry="reg1" version="1.0.0"/> <dubbo:service cluster="failover" retries="2" interface="com.sihai.dubbo.provider.service.ProviderService" ref="providerService" protocol="rmi" registry="reg2" version="1.0.0"/>

加入了版本控制。

6.10 日志管理

dubbo 也可以将日志信息记录或者保存到文件中的。

① 使用accesslog输出到log4j

<dubbo:protocol accesslog="true" name="dubbo" port="20880"/> <dubbo:protocol accesslog="true" name="rmi" port="1099" />

② 输出到文件

<dubbo:protocol accesslog="http://localhost/log.txt" name="dubbo" port="20880"/> <dubbo:protocol accesslog="http://localhost/log2.txt" name="rmi" port="1099" />

七 总结

这篇文章就到这里了,主要讲了一下几个内容 1、为什么需要dubbo 2、dubbo架构简析 3、dubbo入门 4、zookeeper注册中心加入dubbo 5、dubbo多种配置方式(xml、api、注解) 6、常用场景介绍

参考:https://segmentfault.com/a/1190000019896723

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 六 常用场景
    • 6.1 启动时检查
      • 6.2 集群容错
        • 6.3 负载均衡
          • 6.4 直连提供者
            • 6.5 只订阅
              • 6.6 只注册
                • 6.7 多协议机制
                  • 6.8 多注册中心
                    • 服务端多注册中心发布服务
                    • 消费端多注册中心引用服务
                  • 6.9 多版本
                    • 6.10 日志管理
                    • 七 总结
                    相关产品与服务
                    微服务引擎 TSE
                    微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档