【问题标题】:How messaging infrastructure maps topic to IPC/TCP layer for PUB/SUB?消息传递基础设施如何将主题映射到 PUB/SUB 的 IPC/TCP 层?
【发布时间】:2023-07-24 12:40:01
【问题描述】:

通常人们只会在这一层之上工作 - 但我现在正在处理这一层,我需要将 PUB/SUB 多对多消息传递关系映射到 IPC 或 TCP 基础设施 - 自然,我只能每个地址 1 个发布者绑定。

我能想到的替代方案各有各的缺点:

  1. 添加守护程序并路由消息。这会在消息传递过程中增加单点故障以及额外的层。
  2. 添加注册表。添加单点故障,也无法通知新启动的进程。
  3. 不允许多个发布者针对同一主题 - 在安排架构方面失去了一些灵活性。
  4. 预定义端口范围和IPC地址范围,每个进程定期重试连接它们。添加服务发现延迟,并且所有端口都必须可从操作系统获得。

那么像 JMS、LBM 这样的现代消息传递软件包是如何做到这一点的呢?我知道 Tibco RV 和 Reuters 正在通过方法 1) - 无论如何我可以避免这样的守护进程?

如果重要的话,我正在使用 Java。

谢谢。

【问题讨论】:

  • 你考虑过多播UDP吗?查看 JGroups 以了解消息传递提供程序的示例。
  • @SimonC 好吧,首要任务是能够使其适用于 IPC 通道,以便获得最高性能。鉴于我的知识,我认为 IPC 也有这样的限制。所以我想我必须想出一个有这种约束的解决方案。

标签: java jms ipc messaging tibco-ems


【解决方案1】:

我会尝试通过在每台机器上创建一个本地守护进程来解决请求,该守护进程在本地使用 jms,然后提供持久性。

我会使用 TCP 广播到一个已知端口来通告主题和队列关联到 IP 地址和端口。然后,您可以建立与通告端口的直接连接,以在事务中发布或订阅消息。

【讨论】:

  • 同意。确实没有一个完全干净的解决方案。
相关资源