异步通信方式的两种消息传输模型

news2024/11/20 12:23:02

文章目录

    • 一、点对点模型
      • 1.1 什么是点对点模型
      • 1.2 点对点模型的特点
    • 二、发布订阅模型
      • 2.1 什么是发布订阅模型
      • 2.2 发布订阅模式的日常案例
      • 2.3 发布订阅模型的特点
    • 三、总结
    • 参考资料

一、点对点模型

1.1 什么是点对点模型

点对点模型(也叫队列模型)

在这里插入图片描述

1.2 点对点模型的特点

点对点模型具有如下特点:

  • 消费匿名:消息上下游沟通的唯一的身份就是队列,下游消费者从队列获取消息无法申明独立身份。
  • 一对一通信:基于消费匿名特点,下游消费者即使有多个,但都没有自己独立的身份,因此共享队列中的消息,每一条消息都只会被唯一一个消费者处理。因此点对点模型只能实现一对一通信。

二、发布订阅模型

2.1 什么是发布订阅模型

发布-订阅模型(Publish-Subscribe Pattern)是一种软件设计模式,用于实现消息的发布和订阅机制。在这种模式中,消息的发布者(发布者)将消息发布到一个中心(通常称为主题或频道),而消息的订阅者(订阅者)可以订阅感兴趣的主题或频道,以接收相关的消息通知。

主要组成部分包括:

  1. 发布者(Publisher):负责发布消息到指定的主题或频道。一旦发布者发布了消息,所有订阅了该主题或频道的订阅者都会收到相应的消息通知。
  2. 订阅者(Subscriber):订阅感兴趣的主题或频道,并在有相关消息发布时接收通知。订阅者可以是一个或多个,它们通过注册订阅来表明对特定主题或频道感兴趣。
  3. 主题或频道(Topic/Channel):消息发布者发布消息的地方,订阅者订阅的对象。一个主题或频道可以有多个发布者和多个订阅者。
    在这里插入图片描述

发布订阅模型的更多实现细节查看 RocketMQ 的发布订阅模型实现

2.2 发布订阅模式的日常案例

发布订阅思想比较常见,举个例子:在学术界电子论文的订阅方式中,会议方或出版社负责发布学术论文到论文网站。学生或老师可以在论文网站上订阅自己感兴趣的论文类别,比如分布式系统或人工智能等。一旦会议方或出版社发布了新的论文到论文网站上,论文网站将根据订阅信息,将相应的论文推送给订阅者,通常通过电子邮件等方式进行通知。

引用 分布式通信技术之发布订阅模式 - 知乎 (zhihu.com) 中的图片:

在这里插入图片描述

这里的会议方或出版社充当生产者角色,负责发布论文,而学生或老师则是消费者,订阅并接收感兴趣的论文。论文网站则充当消息中心,负责将论文推送给订阅者。

2.3 发布订阅模型的特点

发布订阅模型的特点包括:

  • 消费独立:相比队列模型的匿名消费方式,发布订阅模型中消费方都会具备的身份,一般叫做订阅组(订阅关系),不同订阅组之间相互独立不会相互影响。

  • 一对多通信:基于独立身份的设计,同一个主题内的消息可以被多个订阅组处理,每个订阅组都可以拿到全量消息。因此发布订阅模型可以实现一对多通信。

  • 多对多通信:多个发布者可以发布消息到同一个主题或频道,多个订阅者也可以订阅同一个主题或频道,实现了多对多的通信模式。

因此,发布订阅模型具备以下优点:

  • 松耦合:发布者和订阅者之间没有直接的依赖关系,它们之间通过消息中心进行通信,使得系统更加灵活和可扩展。
  • 可靠性:即使某个订阅者当前不可用,也不会影响其他订阅者的消息接收。

三、总结

点对点模型和发布订阅模型各有优势:

  • 点对点模型更为简单
  • 发布订阅模型的扩展性更高

参考资料

领域模型概述 | RocketMQ (apache.org)

分布式通信技术之发布订阅模式 - 知乎 (zhihu.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1954816.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Shiro安全框架与SpringBoot的整合(下)

目录 一、整合前的配置 1.1 导入shiro依赖 1.2 config配置 1.2.1 ShiroConfig(⭐) 1.2.2 MyConfig(拦截器配置) 3. 拦截器(LoginInterceptor) 二、认证登录 2.1. controller 2.2 service和serviceImpl(不用) 2.3 mapper …

[Meachines] [Easy] Blocky Jar包反编译

信息收集 IP AddressOpening Ports10.10.10.37TCP:21,22,80,25565 $ nmap -p- 10.10.10.37 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 21/tcp open ftp ProFTPD 1.3.5a 22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 (Ubuntu …

自动驾驶的六个级别是什么?

自动驾驶汽车和先进的驾驶辅助系统(ADAS)预计将帮助拯救全球数百万人的生命,消除拥堵,减少排放,并使我们能够在人而不是汽车周围重建城市。 自动驾驶的世界并不只由一个维度组成。从没有任何自动化到完整的自主体验&a…

VScode调试Python代码

用Python debugger 参考 vscode-python的debug 教学(最全)

动手学深度学习55 循环神经网络 RNN 的实现

动手学深度学习55 循环神经网络 RNN 的实现 从零开始实现简洁实现QA 课件:https://zh-v2.d2l.ai/chapter_recurrent-neural-networks/rnn-scratch.html 从零开始实现 %matplotlib inline import math import torch from torch import nn from torch.nn import fun…

【前端逆向】最佳JS反编译利器,原来就是chrome!

有时候需要反编译别人的 min.js。 比如简单改库、看看别人的 min,js 干了什么,有没有重复加载?此时就需要去反编译Javascript。 Vscode 里面有一些反编译插件,某某Beautify等等。但这些插件看人品,运气不好搞的话,反…

力扣高频SQL 50题(基础版)第二十题

文章目录 力扣高频SQL 50题(基础版)第二十题2356.每位教师所教授的科目种类的数量题目说明思路分析实现过程准备数据实现方式结果截图 力扣高频SQL 50题(基础版)第二十题 2356.每位教师所教授的科目种类的数量 题目说明 表: Te…

算法——二分查找(day10)

目录 69. x 的平方根 题目解析: 算法解析: 代码: 35. 搜索插入位置 题目解析: 算法解析: 代码: 69. x 的平方根 69. x 的平方根 - 力扣(LeetCode) 题目解析: 老…

2025第十九届中国欧亚国际军民两用技术及西安国防电子航空航天暨无人机展

2025第十九届中国欧亚国际军民两用技术及西安国防电子航空航天暨无人机展 时间:2025年3月14-16日 地点:西安国际会展中心 详询主办方陆先生 I38(前三位) I82I(中间四位) 9I72(后面四位&am…

中间层 k8s(Kubernetes) 到底是什么,架构是怎么样的?

你是一个程序员,你用代码写了一个博客应用服务,并将它部署在了云平台上。 但应用服务太过受欢迎,访问量太大,经常会挂。 所以你用了一些工具自动重启挂掉的应用服务,并且将应用服务部署在了好几个服务器上,…

【C++】实验六

题目: 1、苹果和虫子 描述:你买了一箱n个苹果,很不幸的是买完时箱子里混进了一条虫子。虫子每x小时能吃掉一个苹果,假设虫子在吃完一个苹果之前不会吃另一个,那么经过y小时你还有多少个完整的苹果? 输入…

Linux基础复习(三)

前言 接Linux基础复习二 一、常用命令及其解释 Tab补全 在上一篇文章配置了IP然后通过远程SSH连接软件控制主机,在配置过程中会发现有些命令过于长,那么,Tab键补全就可以很好的帮助我们去快速的敲出命令,同时如果有些命令有遗…

AJAX(1)——axios库的使用

什么是AJAX? AJAX是异步的JavaScript和XML。简单来说,就是使用XMLHttpRequest对象与服务器通信。它可以使用JSON,XML,HTML和text文本等格式发送和接收数据。AJAX最吸引人的就是它异步的特性,也就是说它可以在不重新刷新页面的情况下与服务器通信&#…

免费【2024】springboot 宠物救助管理系统的设计与实现

博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

成为git砖家(4): git status 命令简介

1. untracked 和 tracked 状态 Remember that each file in your working directory can be in one of two states: tracked or untracked. Tracked files are files that were in the last snapshot, as well as any newly staged files; they can be unmodified, modified, o…

Feign自定义调用第三方接口并实现负载均衡

Feign自定义调用第三方接口并实现负载均衡 Feign简介: Feign 是一个声明式的、模板化的HTTP客户端,用于简化HTTP客户端的开发。它是Spring Cloud Netflix微服务套件中的一部分,使得编写Java HTTP客户端变得更加容易。它的原理主要是代理模式…

Rust |了解+ 环境配置(rust+vscode)

1 了解rust 1️⃣0️⃣0️⃣秒了解Rust_哔哩哔哩_bilibili 2 安装rust 前提安装过vs,有c环境 1.下载 根据自己的系统下载对应的版本:安装地址 查看自己版本: 右键 此电脑 ;点击 属性 ;查看 系统类型 点击 下载RU…

智慧城管解决方案

1. 项目整体概述 智慧城管项目面临历史发展机遇,十九大提出以人为核心保障民生,推进新型城镇化。市民对政府服务有新诉求,同时云计算、物联网、移动互联网等技术迅速发展。 2. 传统城管业务模式问题 传统城管业务模式存在问题,…

树莓派学习记录

一,型号 第一代Raspberry Pi 1 Model B 第一代升级版 Raspberry Pi 1 B 第二代 Rasberry Pi 2 Model B 第三代及升级版 Rasberry Pi 3 Model B/B 第四代 Rasberry Pi 4 Model B Model A版 比B版便宜 Zero 版 售价更便宜 总结 二,树莓派接口 如下图…

Hello 算法:动画图解、一键运行的数据结构与算法教程

Hello 算法 《Hello 算法》是一份开源、免费的数据结构与算法入门教程,特别适合新手。全书采用动画图解,内容清晰易懂,学习曲线平滑,引导初学者探索数据结构与算法的知识地图。源代码可以一键运行,帮助读者通过练习提…