使用 ZeroMQ 实现消息总线

2024-01-01

我必须开发一个消息总线,供进程相互发送和接收消息。目前,我们正在Linux上运行,并计划稍后移植到其他平台。

为此,我使用 TCP 上的 ZeroMQ。该模式是带有转发器的 PUB-SUB。我的总线作为一个单独的进程运行,所有客户端都连接到 SUB 端口来接收消息,并连接到 PUB 来发送消息。每个进程通过唯一的标签订阅消息。 Asend来自进程的调用向所有进程发送消息。 Areceive调用将获取该进程标记有该进程标签的消息。这工作正常。

现在我需要包装 ZeroMQ 的东西。我的客户只需要提供一个唯一的标签。我需要维护标签与 ZeroMQ 上下文和套接字详细信息的全局列表。当客户说,initialize_comms("name");总线需要检查该名称是否唯一,创建 ZeroMQ 上下文和套接字。同样,如果客户说receive("name");总线需要获取带有该标签的消息。

总结一下我面临的问题;

  1. 有没有办法使用 ZeroMQ 提供的设施来实现这一点?
  2. ZeroMQ 是正确的工具吗?还是我应该寻找像 nanomsg 这样的工具?
  3. 带有转发器的 PUB-SUB 是正确的模式吗?
  4. 或者,我在这里错过了什么吗?

Answers

  1. Yes, ZeroMQ有能力满足这个需求

  2. Yes. ZeroMQ是一个正确的工具(而是一个强大的低延迟组件工具箱)。尽管nanomsg具有直接的总线原语,核心分布式逻辑可以集成在ZeroMQ框架

  3. 是与否。上面给出的 PUB-SUB 可以用于模拟“喊叫广播”到总线并建立在使用订阅密钥的 SUB 副作用之上。整个逻辑的其余部分必须重新思考和设计,以便整个制造范围满足您的计划(参考下文)。另请记住,ZeroMQ 的初始版本将 PUB/SUB 原语操作为在接收方完成的传入消息流的“订阅过滤”,因此大规模设计应检查大规模的交通量/洪水风险/流程效率低下......

  4. Yes. ZeroMQ而是一个经过良好调整的原始元素基础(就架构而言,而不是其功能和性能),以构建更聪明、更健壮且几乎可线性扩展的正式通信模式。绘制架构草图后,不要陷入 PUB/SUB 或 PAIR 基元。如果人们忘记了设计的初衷在哪里,那么任何设计都会很糟糕。真正的力量来自。

一个向可扩展和容错总线迈出下一步的好地方

因此,下一步可能要做的最好的一步是恕我直言,获得更多的全局视图,这对于尝试使用 ZeroMQ 进行编码的前几件事来说可能听起来很复杂,但是如果您至少跳到265页 https://hintjens.wdfiles.com/local--files/main:files/cc1pe.pdf of the 代码连接,第 1 卷 https://hintjens.wdfiles.com/local--files/main:files/cc1pe.pdf,如果不是逐步阅读的情况。

有史以来最快的学习曲线将是首先对事物有一个不公开的看法Fig.60 重新发布更新 and Fig.62 HA 克隆服务器对可实现可能的高可用性方法然后回到根源、元素和细节。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ZeroMQ 实现消息总线 的相关文章

  • 域套接字“sendto”遇到“errno 111,连接被拒绝”

    我正在使用域套接字从另一个进程获取值 就像 A 从 B 获取值一样 它可以运行几个月 但最近 A 向 B 发送消息时偶尔会失败 出现 errno 111 连接被拒绝 我检查了B域套接字绑定文件 它是存在的 我也在另一台机器上做了一些测试 效
  • 如何使用应用程序接口将蓝牙套接字传递给另一个活动

    因此 根据我收集的信息 套接字连接既不可序列化 也不可分割 但我需要将蓝牙连接传递给另一个活动 我不想作为中间人编写服务 所以请不要将此作为解决方案发布 我听说有一种方法可以使用自定义应用程序接口来传递这些类型的对象 但我一生都找不到这样的
  • 在 C# 中的同一套接字上发送+接收数据

    我试图使用套接字 System Net Socket 甚至尝试过 TcpListener Client Etc 来在等待或已经发送数据时侦听数据 我做了以下事情 public byte bytesIn public byte bytesOu
  • UI 线程中异步组件的触发事件

    我正在 Net 2 0 中构建一个非可视组件 该组件使用异步套接字 BeginReceive EndReceive 等 异步回调是在运行时创建的工作线程的上下文中调用的 组件用户不必担心多线程 这是主要目标 我想要的 组件用户可以在任何线程
  • Java套接字:在连接被拒绝异常时重试的最佳方法?

    现在我正在这样做 while true try SocketAddress sockaddr new InetSocketAddress ivDestIP ivDestPort downloadSock new Socket downloa
  • Java 服务器-客户端 readLine() 方法

    我有一个客户端类和一个服务器类 如果客户端向服务器发送消息 服务器会将响应发送回客户端 然后客户端将打印它收到的所有消息 例如 如果客户端向服务器发送 A 则服务器将向客户端发送响应 1111 所以我在客户端类中使用 readLine 从服
  • 如何在基于 Linux 的系统上的 C 程序中使用 mqueue?

    如何在基于 Linux 的系统上的 C 程序中使用 mqueue 消息队列 我正在寻找一些好的代码示例 可以展示如何以正确且正确的方式完成此操作 也许是一个操作指南 下面是一个服务器的简单示例 该服务器接收来自客户端的消息 直到收到告诉其停
  • 进程退出后 POSIX 名称信号量不会释放

    我正在尝试使用 POSIX 命名信号量进行跨进程同步 我注意到进程死亡或退出后 信号量仍然被系统打开 在进程 打开它 死亡或退出后是否有办法使其关闭 释放 早期的讨论在这里 当将信号量递减至零的进程崩溃时 如何恢复信号量 https sta
  • 跨平台套接字

    我知道 Windows 不使用 UNIX 套接字 而 Mac OS 使用 到目前为止 我的软件是跨平台的 没有任何代码更改 但现在我想让它进行一些网络通信 我了解 POSIX 套接字 但我对 Windows 的套接字一无所知 目标是实现一个
  • C# 中的 Unix 套接字

    我正在尝试使用 Mono 的 UnixEndPoint 但在使用它之前就失败了 我在 64 位 Windows 7 系统上运行 Xamarind net 4 5 下面是一些代码 证明单一组合不起作用 foreach SocketType s
  • 通过套接字发送包含文件的字典(python)

    是否可以通过套接字发送包含文件 图像或文档 作为值的字典 我尝试了类似下面的东西 但失败了 with open cat jpeg rb as f myFile f read 2048 data id 1283 filename cat jp
  • Python,socket.error:[Errno 10049]

    在开发一个简单的聊天客户端的基础上 遇到以下错误 socket error Errno 10049 The requested address is not valid in its context 代码是 from socket impo
  • 创建进程的多个子进程并维护所有 PID 的共享数组

    我已经分叉了几次 并用 C 创建了一堆子进程 我想将它们所有的 PID 存储在一个共享数组中 PID 的顺序并不重要 例如 我创建了 32 个进程 我想要一个 32 个整数长的数组来存储每个 PID 并且每个进程都可以访问 最好的方法是什么
  • Selector.close() 是否关闭所有客户端套接字?

    我是 nio 套接字的新手 我已经使用 nio 套接字编写了一个服务器 现在我正在尝试编写关闭钩子以确保通过清理资源正常退出 我的问题是Selector close 方法关闭所有客户端套接字 如果没有 请告诉我如何访问所有客户端套接字 而无
  • 错误号:11,资源暂时不可用

    我正在使用 c 套接字来实现可靠的 UDP 协议 我正在使用以下代码在等待确认的套接字上设置超时 我不确定为什么会收到 errno 11 资源暂时不可用 set timer for recv socket struct timeval tv
  • 消息队列与套接字

    我没有太多的套接字编程经验 但我尝试阅读一些相关内容 我对 MDB 和消息队列非常熟悉 有人告诉我队列 例如 MDB 只不过是直接套接字连接 有人可以帮我比较一下这两个吗 两者是无与伦比的 因为它们代表不同的layers 这就像将关系数据库
  • 为什么/何时使用 DDS 而不是 ZeroMQ? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我读了以下内容 DDS AMQP ZeroMQ https stackoverflow com questions 3202521 dds vs
  • C#:如何在 Socket.BeginReceive 回调之前终止套接字?

    我有一个接收来自客户端的连接请求的服务器 该服务器使用异步Socket BeginReceive and Socket EndReceive方法 该代码与找到的代码非常相似here http msdn microsoft com en us
  • TCP打孔问题

    我尝试使用 Python 3 中概述的原则为防火墙编写一个基本的 TCP 打孔器本文 http www bford info pub net p2pnat index html 不过 我无法连接任何东西 这是代码 usr bin pytho
  • 使用 TCP 时是否需要使用校验和来保护我的消息?

    使用 TCP 作为网络协议 在通过线路发送消息之前 我会为每条消息的大小 以及可能的校验和 添加前缀 我想知道 计算和传输消息的校验和是否有意义 以确保消息将被不变地传递 如果以及何时传递 例如因为一些网络错误 目前 我在发送消息本身之前发

随机推荐

  • 将命令行参数传递给 Clozure common lisp

    我之前熟悉python 现在我正在尝试学习common lisp并在windows系统下使用ccl clozure common lisp 我发现没有一种方便的方法来将 lisp 文件作为 python 运行 所以我写了一个bat文件来编译
  • 无法访问映射到 docker 容器端口的主机上的端口

    我已经使用命令启动了一个 docker 容器 sudo docker run it P d plcdimage 该映像是使用具有 EXPOSE 8080 指令的 Dockerfile 构建的 容器运行 jboss 服务器 并在其上部署了应用
  • 如何从函数(UDF)返回表变量?

    我正在使用 SQL Server 2012 并且一直在尝试许多不同的方法来从函数内部返回表变量 但我无法让它工作 我尝试过将变量声明移动到不同的位置等 这是 sql 的核心内容 如果您可以将内容包装在一个 UDF 函数中 该函数实际编译并返
  • 在 Android 上以编程方式发送彩信

    我在执行一项任务时遇到了问题 我应该在 android 2 1 上使用我们自己的界面发送彩信 所以你可以猜测调用默认的 Activity 是不可能的 所以我的问题是 有没有一种方法可以使用 android SDK 以编程方式发送彩信 没有说
  • 如何将 Twitter 小部件插入 GWT 视图

    我有一个在 GWT 应用程序中创建的视图 我想嵌入 使用 twitter 提供的 Twitter 小部件之一 就像这个 http twitter com about resources widgets widget search http
  • 向脚本添加密码屏蔽

    为了练习 我正在编写一个程序来隐藏文件夹 程序本身运行良好 但我想用星号 屏蔽我的输入 我找到了将输入屏蔽为独立脚本的代码 但我无法找到将代码集成到我的代码中的方法 任何帮助将不胜感激 程序代码 echo off color 5F titl
  • 核心数据 - 放弃更改

    希望有人能解释一下发生了什么事 如果我从核心数据模型中获取一个对象 请修改模型中未保留甚至未定义的属性 然后销毁并再次获取该对象 该值仍为先前设置的值 为什么是这样 Promotion promotion Promotion promoti
  • 更改 user.home 系统属性

    如何从 java 程序外部更改 user home 系统属性 以便它认为它是与 D Documents and Settings USERNAME 不同的目录 通过环境变量还是虚拟机参数 设置 VM 参数应该有效 java Duser ho
  • 使用 xlrd 从 Python 中的 Excel 工作表超链接获取 URL

    我正在尝试使用 xlrd 获取 Excel 工作表第二列中元素的超链接 URL 使用时 book open workbook mypath formatting info True sheet book sheet by index 0 r
  • 了解两个不同大小矩阵的 np.corrcoef 输出

    我想计算每个之间的相关性列向量矩阵的A与每个列向量矩阵的B 考虑 vectorsize 777 A np random rand vectorsize 64 B np random rand vectorsize 36 corr np co
  • 在 JavaScript 原型函数中保留对“this”的引用[重复]

    这个问题在这里已经有答案了 我刚刚开始使用原型 JavaScript 但在弄清楚如何保存this当作用域发生变化时 从原型函数内部引用主对象 让我解释一下我的意思 我在这里使用 jQuery MyClass function this el
  • emacs 是否为 html 模式提供隐藏显示

    emacs 是否具有隐藏 显示 html 代码折叠功能 当我使用 org 模式时 我有它 但似乎无法在 nXML html 端找到它 我为 mhtml mode 编写了这个 它运行得很好 它可以通过标签折叠 HTML 以及嵌入的 CSS 和
  • 如何将(参考)Quick book 的 dll 添加到 silverlight 项目?

    我正在使用 silverlight 项目 在此我必须使用 Quick books SDK QBFC 但问题是 silverlight 不允许其他组装 因为 Silverlight 使用不同的运行时和常规 Net 框架的子集 这就是为什么我们
  • 在 R 中使用从宽到长的 Reshape [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试在 R 中将数据从宽到长重塑 我的宽格式数据如下所示 我有以下数据矩阵 在行中我有不同的公司 在列中有来自不同年份的不同变量 收
  • 如何在 Ubuntu 上托管/发布我的 .Net Core WebAPI?

    我正在学习 Net Core 我使用 ASP Net MVC 开发了 Web 应用程序 因为它可以在本地 IIS 上安装和运行 在 Ubuntu 和 Linux 中托管 发布 Net Core WebApi 的类似方式是什么 而不是在 50
  • 允许使用多个字符进行 C++ 字符初始化 [重复]

    这个问题在这里已经有答案了 在通过阅读书籍学习 C 的过程中 我看到了这行 对我来说 奇怪的代码 char ch AB Or char ch AB 这对我来说很奇怪 因为我不明白你可以分配给char多个 字母 没有任何例外 cout lt
  • Delphi Tokyo 64 位将非正规数刷新为零?

    在短暂查看 system math 的源代码时 我发现 64 位版本 Delphi Tokyo 10 2 3 将非正规 IEEE Doubles 刷新为零 从以下程序中可以看出 apptype console uses system sys
  • 所有可能接触项目后端的开发人员都应该了解哪些有用的 SQL 语句/使用模式?

    所有可能接触项目后端的开发人员都应该了解哪些有用的 SQL 语句 Update 就像在算法中一样 我们知道存在排序问题 洗牌问题 并且我们知道它们的一些解决方案 这个问题是针对同一件事 例如 我能想到的一个是 获取不存在的类的列表 由任何学
  • x86 是否具有原子增量来保留存储的值?

    我已经发现lock inc addr但这并没有保留存储值的副本 甚至同一线程中紧随其后的读取也可能发生在竞争写入之后 我发现的最好的解决方案是load inc cas http en wikipedia org wiki Compare a
  • 使用 ZeroMQ 实现消息总线

    我必须开发一个消息总线 供进程相互发送和接收消息 目前 我们正在Linux上运行 并计划稍后移植到其他平台 为此 我使用 TCP 上的 ZeroMQ 该模式是带有转发器的 PUB SUB 我的总线作为一个单独的进程运行 所有客户端都连接到