发布订阅机制和点对点机制

news2024/11/25 1:05:46

【Go项目】25. 在 gin 中引入 WebSocket 和 Hub_哔哩哔哩_bilibili

gorilla/websocket: Package gorilla/websocket is a fast, well-tested and widely used WebSocket implementation for Go. (github.com)

1.订阅发布机制

引用上面链接的内容

发布订阅的基本工作原理

在分布式通信领域中,消息系统一般有两种典型的模式。一种是点对点模式(P2P,Point to Point),另一种是发布订阅模式(Pub/Sub,Publish/Subscribe)。接下来,我们就一起看看这两种模式,以帮助你深入理解发布订阅模式的原理。

首先,我们一起看一下什么是点对点模式

生产者将消息发送到消息中心,然后消费者从消息中心取出对应的消息进行消费。消息被消费后,消息中心不再存储该消息,因此其他消费者无法再消费该消息。也就是说,点对点模式虽然支持多个消费者,但一个消息只能被一个消费者消费,不允许重复消费。

这种模式就好比,限定了每篇论文只能被一个用户消费,比如现在有一篇分布式相关的论文,这篇论文推送给学生 A 之后,论文网站就必须将其删除或下架,也就是说其他用户无法再获取或阅读该论文了。(当然实际情况并不是这样的,这里只是为了方便你理解,我做了相应的假设。)

接下来,我们看一下发布订阅模式

生产者可以发送消息到消息中心,而消息中心通常以主题(Topic)进行划分,每条消息都会有相应的主题,消息会被存储到自己所属的主题中,订阅该主题的所有消费者均可获得该消息进行消费。

我的理解是,点对点模式就是生产者生产的消息有一个固定的消费者,其他人都拿不到,是1-1。

订阅发布更像是分组,生产者生产某一类型的数据,对应一个组的每个成员都能拿到这则消息,是1-n

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

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

相关文章

AQS源码剖析,完整流程解读

目录 1 AQS是什么2 AQS加锁流程3 结构4 AQS方法概览5 AQS源码剖析5.1 加锁方法5.2 释放锁5.3 await等待5.4 signal唤醒 1 AQS是什么 ​ AQS即AbstractQueuedSynchronizer缩写,翻译为抽象队列同步器,是一种用来构建锁和同步器的框架。 平时使用较多的Ree…

【C++】常用排序算法

0.前言 1.sort #include <iostream> using namespace std;// 常用排序算法 sort #include<vector> #include<algorithm>//利用仿函数 打印输出 class myPrint { public:void operator()(int val){cout << val << " ";} };//利用普通函…

车载网络测试 - UDS诊断篇 - CANTP常用缩写

CANTP层规范常用缩写 缩写英文全称中文注释BRSbit rate switch比特率开关BSBlockSize块大小CAN controller area network控制器局域网CAN_DL CAN frame data link layer data length in bytesCAN 帧数据链路层数据长度&#xff08;以字节为单位&#xff09;CAN FDcontroller a…

[kingbase运维之奇怪的现象]

#[kingbase运维之奇怪的现象] ##奇怪的现象 某银行数据中心应用反馈&#xff0c;业务接口日志记录了很多执行慢的SQL&#xff0c;出现的时间是随机的&#xff0c;单独在数据库客户端工具执行会很快返回结果。根据之前的经验推断是业务代码传入的参数类型与数据库表结构字段定义…

HDD-FAT32 ZIP-FAT32 HDD-FAT16 ZIP-FAT16 HDD-NTFS

FAT32、FAT16指的是分区格式&#xff0c; FAT16单个文件最大2G FAT32单个文件最大4G NTFS单个文件大于4G HDD是硬盘启动 ZIP是软盘启动 U盘选HDD HDD-NTFS

buuctf crypto 【还原大师】解题记录

1.打开题目就能直接看到密文 2.感觉爆破直接能解&#xff0c;试试爆破&#xff08;参考文章&#xff1a;[buuctf] crypto全解——前84道&#xff08;不建议直接抄flag&#xff09;_buuctf crypto_咸鱼壹号的博客-CSDN博客&#xff09; import hashlib k TASC?O3RJMV?WDJKX?…

建筑模板9层板和7层板的区别

建筑模板是建筑施工过程中不可或缺的一环&#xff0c;而在建筑模板的选择中&#xff0c;常见的有9层板和7层板两种选项。它们在结构、特性和应用方面存在一些区别。下面将详细探讨9层板和7层板之间的区别。 首先&#xff0c;9层板和7层板的名称源自其板材的层数。9层板由9层木片…

Docker容器技术实战-1

1.docker容器 docker就好比传统的货运集装箱 每个虚拟机都有独立的操作系统&#xff0c;互不干扰&#xff0c;在这个虚拟机里可以跑任何东西 如应用 文件系统随便装&#xff0c;通过Guest OS 做了一个完全隔离&#xff0c;所以安全性很好&#xff0c;互不影响 容器 没有虚拟化…

Tomcat配置ssl、jar包

Tomcat配置ssl 部署tomcat服务&#xff0c;项目做到用https访问&#xff0c;使用nginx去做&#xff0c;访问任意一个子网站&#xff0c;都是https 或者 医美项目需要 上传jdk 456 tomcat war包 [nginx-stable] namenginx stable repo baseurlhttp://nginx.org/packages/…

AI绘画:StableDiffusion实操教程-斗破苍穹-云韵-常服(附高清图下载)

前段时间我分享了StableDiffusion的非常完整的教程&#xff1a;“AI绘画&#xff1a;Stable Diffusion 终极宝典&#xff1a;从入门到精通 ” 不久前&#xff0c;我与大家分享了StableDiffusion的全面教程&#xff1a;“AI绘画&#xff1a;Stable Diffusion 终极宝典&#xff…

用Navicat备份Mysql演示系统数据库的时候出:Too Many Connections

今天用Navicat进行数据备份的时候&#xff0c;发现由于数据库连接数目过多导致连接锁定&#xff0c;这种情况在多人协同开发的场景中很常见。当然我这里也因为多个应用使用了数据库连接&#xff0c;所以出现了Too Many Connections。 可能是超过最大连接数了。 1、进入Navicat…

【JAVA-Day03】JDK安装与IntelliJ IDEA安装、配置环境变量

JDK安装与IntelliJ IDEA安装、配置环境变量 一、JDK 版本介绍1.1 JDK 版本选择JDK 8JDK 11JDK 16JDK 171.2 JDK 下载1.3 JDK 安装1.4 配置环境变量1.5 验证 JDK 安装 二、开发利器——IntelliJ IDEA 的安装2.1 IntelliJ IDEA下载2.2 IntelliJ IDEA安装2.3 IntelliJ IDEA启动2.4…

编译原理:编译原理简明教程知识点梳理(应对考试版)

前言 姜老师是一个好老师&#xff0c;编译原理没有过是我的问题&#xff0c;我爱姜老师。 写这篇博客涉及到好多符号&#xff0c;可以参考这篇文章latex数学公式详细教程 因为打字过于麻烦&#xff0c;很多内容用平板的手写截图&#xff0c;还有电脑截图替代&#xff0c;不太习…

【刷题篇】贪心算法(一)

文章目录 分割平衡字符串买卖股票的最佳时机Ⅱ跳跃游戏钱币找零 分割平衡字符串 class Solution { public:int balancedStringSplit(string s) {int lens.size();int cnt0;int balance0;for(int i0;i<len;i){if(s[i]R){balance--;}else{balance;}if(balance0){cnt;}}return …

MyBatis框架中各种参数类型绑定的方式

MyBatis框架中各种参数类型绑定的方式 一、MyBatis参数绑定 MyBatis框架中&#xff0c;通过Mapper接口和Mapper映射文件的方式来操作数据库的时候&#xff0c;可能需要通过Mapper接口中的方法传递相应的参数拼接到SQL语句上面&#xff0c;那么Mybatis将传递的参数映射到对应S…

用python实现基本数据结构【03/4】

说明 如果需要用到这些知识却没有掌握&#xff0c;则会让人感到沮丧&#xff0c;也可能导致面试被拒。无论是花几天时间“突击”&#xff0c;还是利用零碎的时间持续学习&#xff0c;在数据结构上下点功夫都是值得的。那么Python 中有哪些数据结构呢&#xff1f;列表、字典、集…

03_瑞萨GUI(LVGL)移植实战教程之驱动触摸屏(I2C)

本系列教程配套出有视频教程&#xff0c;观看地址&#xff1a;https://www.bilibili.com/video/BV1gV4y1e7Sg # 3. 驱动触摸屏(I2C) 本次实验我们在上一次实验的基础上驱动I2C触摸屏。从这次实验开始&#xff0c;我们不需要重新创建工程&#xff0c;而是在上一次实验项目的基础…

【Unity编辑器扩展】| SceneView面板扩展

前言【Unity编辑器扩展】| SceneView面板扩展一、Scene界面添加右键菜单二、自定义菜单的方式三、Scene视图中禁用选择对象四、OnSceneGUI()五、Gizmos5.1 绘制线框5.2 拓展方法六、Handles总结前言 前面我们介绍了Unity中编辑器扩展的一些基本概念及基础知识,还有编辑器扩展中…

IDEA中的MySQL数据库所需驱动包的下载和导入方法

文章目录 下载驱动导入方法 下载驱动 MySQL数据库驱动文件下载方法&#xff1a; 最新版的MySQL版本的驱动获取方法&#xff0c;这个超链接是下载介绍的博客 除最新版以外的MySQL版本的驱动获取方法&#xff0c;选择Platform Independent&#xff0c;选择第二个zip压缩包虾藻…

华清远见第六课程作业day3

类 栈 #include <iostream>using namespace std;class Sta{ private:int *data;int top; public:Sta():data(new int(128)){top-1;cout<<"stack::无参构造:"<<endl;}~Sta(){delete data;cout<<"stack::析构函数:"<<this<…