Dubbo进阶(十四)—— dubbo+zookeeper与提供者provider、消费者consumer通信原理讲解

本文主要是介绍Dubbo进阶(十四)—— dubbo+zookeeper与提供者provider、消费者consumer通信原理讲解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 一、系统基本构造
    • 二、通信原理
    • 三、总结
    • 四、拓展阅读

一、系统基本构造

讲解前,先说一下整个系统框架的基本构造:

  • zookeeper作为注册中心,使用单独服务器,占用2181端口;
  • dubbo-admin作为监控中心,与zookeeper使用相同服务器,tomcat部署占用8080端口;
  • provider作为服务提供者,使用单独服务器,tomcat部署占用8080端口,使用dubbo协议开放20880端口;
  • consumer作为服务消费者,使用单独服务器,tomcat部署占用8080端口;

疑惑:

  • provider服务器端口是8080,为什么telnet测试以及解决方案中开放的端口却是20880
  • 要说dubbo协议开放了20880端口,那8080端口应该也开放啊?
  • zookeeperproviderconsumer之间端口开放和屏蔽情况到底是怎么回事?

二、通信原理

带着这些问题,博主进行了相关验证,最终得出如下结论,先看图,再解释:
这里写图片描述

  1. dubbo协议在20880端口暴露服务
    在提供者的dubbo配置文件中,一般都配置了<dubbo:protocol name="dubbo" port="20880"/>,表明用dubbo协议在20880端口暴露服务,当然如果你不配置,dubbo默认使用20880端口暴露服务,所有消费者都是通过20880端口进行服务调用,对于消费者而言,提供者服务器8080端口是透明的,也就是说提供者服务器端口号可以任意改变,服务也不会有任何影响,消费者无需关心。

从监控中心可以看到如图:
这里写图片描述
除了在指定端口上暴露服务之外,还可以在指定ip上暴露服务,配置如下:

<dubbo:protocol name="dubbo" host="10.1.22.2" port="20880" />
  1. 端口开放情况
    zookeeper作为注册中心,provider提供服务、consumer订阅服务、dubbo-admin管理监控服务,所以zookeeper注册中心的2181端口需要向providerconsumerdubbo-admin开放;

一般情况下,dubbo-admin监控中心与zookeeper注册中心部署在相同的服务器上,zookeeper可以不考虑端口开放给dubbo-admin的情况;

consumer订阅服务,即拿到了provider20880端口暴露的服务,当consumer请求服务时,直接从consumer跳到provider,而不是consumerzookeeper再到provider,所以provider20880无需开放给zookeeper

同理,provider响应服务时,也是直接从providerconsumer,而不是providerzookeeper再到consumer,所以consumer8080无需开放给zookeeper

zookeeper注册中心是完全被动的。

三、总结

  • zookeeper2181端口开放给providerconsumerdubbo-admin ;

  • provider20880开放给所有consumer,但8080服务器端口可以完全屏蔽;

  • consumer8080开放给所有provider;

  • dubbo-admin8080开放给管理员用户,便于通过浏览器监控注册中心服务的情况;

  • 注册中心只负责服务注册目录发布安全授权,实际的服务访问仍然是两个组件之间的点对点连接完成,这种方式下整个架构下获取更高的性能,同时服务管理平台也不容易成为大并发服务访问下的单点瓶颈。

四、拓展阅读

  • 《Dubbo 专栏》

这篇关于Dubbo进阶(十四)—— dubbo+zookeeper与提供者provider、消费者consumer通信原理讲解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/715398

相关文章

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

SpringBoot读取ZooKeeper(ZK)属性的方法实现

《SpringBoot读取ZooKeeper(ZK)属性的方法实现》本文主要介绍了SpringBoot读取ZooKeeper(ZK)属性的方法实现,强调使用@ConfigurationProperti... 目录1. 在配置文件中定义 ZK 属性application.propertiesapplicati

Mysql的主从同步/复制的原理分析

《Mysql的主从同步/复制的原理分析》:本文主要介绍Mysql的主从同步/复制的原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录为什么要主从同步?mysql主从同步架构有哪些?Mysql主从复制的原理/整体流程级联复制架构为什么好?Mysql主从复制注意

Nacos注册中心和配置中心的底层原理全面解读

《Nacos注册中心和配置中心的底层原理全面解读》:本文主要介绍Nacos注册中心和配置中心的底层原理的全面解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录临时实例和永久实例为什么 Nacos 要将服务实例分为临时实例和永久实例?1.x 版本和2.x版本的区别

Java进程CPU使用率过高排查步骤详细讲解

《Java进程CPU使用率过高排查步骤详细讲解》:本文主要介绍Java进程CPU使用率过高排查的相关资料,针对Java进程CPU使用率高的问题,我们可以遵循以下步骤进行排查和优化,文中通过代码介绍... 目录前言一、初步定位问题1.1 确认进程状态1.2 确定Java进程ID1.3 快速生成线程堆栈二、分析

RabbitMQ工作模式中的RPC通信模式详解

《RabbitMQ工作模式中的RPC通信模式详解》在RabbitMQ中,RPC模式通过消息队列实现远程调用功能,这篇文章给大家介绍RabbitMQ工作模式之RPC通信模式,感兴趣的朋友一起看看吧... 目录RPC通信模式概述工作流程代码案例引入依赖常量类编写客户端代码编写服务端代码RPC通信模式概述在R

apache的commons-pool2原理与使用实践记录

《apache的commons-pool2原理与使用实践记录》ApacheCommonsPool2是一个高效的对象池化框架,通过复用昂贵资源(如数据库连接、线程、网络连接)优化系统性能,这篇文章主... 目录一、核心原理与组件二、使用步骤详解(以数据库连接池为例)三、高级配置与优化四、典型应用场景五、注意事

在Spring Boot中实现HTTPS加密通信及常见问题排查

《在SpringBoot中实现HTTPS加密通信及常见问题排查》HTTPS是HTTP的安全版本,通过SSL/TLS协议为通讯提供加密、身份验证和数据完整性保护,下面通过本文给大家介绍在SpringB... 目录一、HTTPS核心原理1.加密流程概述2.加密技术组合二、证书体系详解1、证书类型对比2. 证书获

javascript fetch 用法讲解

《javascriptfetch用法讲解》fetch是一个现代化的JavaScriptAPI,用于发送网络请求并获取资源,它是浏览器提供的全局方法,可以替代传统的XMLHttpRequest,这篇... 目录1. 基本语法1.1 语法1.2 示例:简单 GET 请求2. Response 对象3. 配置请求