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

相关文章

Spring Boot Interceptor的原理、配置、顺序控制及与Filter的关键区别对比分析

《SpringBootInterceptor的原理、配置、顺序控制及与Filter的关键区别对比分析》本文主要介绍了SpringBoot中的拦截器(Interceptor)及其与过滤器(Filt... 目录前言一、核心功能二、拦截器的实现2.1 定义自定义拦截器2.2 注册拦截器三、多拦截器的执行顺序四、过

SQL Server中行转列方法详细讲解

《SQLServer中行转列方法详细讲解》SQL行转列、列转行可以帮助我们更方便地处理数据,生成需要的报表和结果集,:本文主要介绍SQLServer中行转列方法的相关资料,需要的朋友可以参考下... 目录前言一、为什么需要行转列二、行转列的基本概念三、使用PIVOT运算符进行行转列1.创建示例数据表并插入数

C++,C#,Rust,Go,Java,Python,JavaScript的性能对比全面讲解

《C++,C#,Rust,Go,Java,Python,JavaScript的性能对比全面讲解》:本文主要介绍C++,C#,Rust,Go,Java,Python,JavaScript性能对比全面... 目录编程语言性能对比、核心优势与最佳使用场景性能对比表格C++C#RustGoJavapythonjav

Java 队列Queue从原理到实战指南

《Java队列Queue从原理到实战指南》本文介绍了Java中队列(Queue)的底层实现、常见方法及其区别,通过LinkedList和ArrayDeque的实现,以及循环队列的概念,展示了如何高效... 目录一、队列的认识队列的底层与集合框架常见的队列方法插入元素方法对比(add和offer)移除元素方法

SQL 注入攻击(SQL Injection)原理、利用方式与防御策略深度解析

《SQL注入攻击(SQLInjection)原理、利用方式与防御策略深度解析》本文将从SQL注入的基本原理、攻击方式、常见利用手法,到企业级防御方案进行全面讲解,以帮助开发者和安全人员更系统地理解... 目录一、前言二、SQL 注入攻击的基本概念三、SQL 注入常见类型分析1. 基于错误回显的注入(Erro

Spring IOC核心原理详解与运用实战教程

《SpringIOC核心原理详解与运用实战教程》本文详细解析了SpringIOC容器的核心原理,包括BeanFactory体系、依赖注入机制、循环依赖解决和三级缓存机制,同时,介绍了SpringBo... 目录1. Spring IOC核心原理深度解析1.1 BeanFactory体系与内部结构1.1.1

MySQL 数据库进阶之SQL 数据操作与子查询操作大全

《MySQL数据库进阶之SQL数据操作与子查询操作大全》本文详细介绍了SQL中的子查询、数据添加(INSERT)、数据修改(UPDATE)和数据删除(DELETE、TRUNCATE、DROP)操作... 目录一、子查询:嵌套在查询中的查询1.1 子查询的基本语法1.2 子查询的实战示例二、数据添加:INSE

Java通过ServerSocket与Socket实现通信过程

《Java通过ServerSocket与Socket实现通信过程》本文介绍了Java中的ServerSocket和Socket类,详细讲解了它们的构造方法和使用场景,并通过一个简单的通信示例展示了如何... 目录1 ServerSocket2 Socket3 服务器端4 客户端5 运行结果6 设置超时总结1

python调用dubbo接口的实现步骤

《python调用dubbo接口的实现步骤》本文主要介绍了python调用dubbo接口的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编... 目录 ​​其他实现方式与注意事项​​ ​​高级技巧与集成​​用 python 提供 Dubbo 接口

MySQL 批量插入的原理和实战方法(快速提升大数据导入效率)

《MySQL批量插入的原理和实战方法(快速提升大数据导入效率)》在日常开发中,我们经常需要将大量数据批量插入到MySQL数据库中,本文将介绍批量插入的原理、实现方法,并结合Python和PyMySQ... 目录一、批量插入的优势二、mysql 表的创建示例三、python 实现批量插入1. 安装 PyMyS