使用 zeromq 为死用户缓冲消息
Buffering messages for dead subscriber with zeromq
我在 tcp 中使用 pub-sub 模式。当我的一位订阅者死亡(例如 kill -9)并以相同的 IDENTITY 重新启动时,它不会收到以前的消息。
有什么解决方案可以在重新启动时发送消息? (我知道 0mq 不处理那个)
- 运行 出版商
- 运行 sub0(订阅套接字)
- 运行 sub1(订阅套接字)
- pkill -9 sub0(模拟守护进程死亡)
- 发布者发送消息
- 运行 sub0 再次(相同 ZMQ_IDENTITY)
sub0没有收到丢失的消息
这完全由您的应用程序负责。看看指南...特别是 Chapter 5 on advanced pub/sub patterns, and even more specifically Getting an out of band snapshot.
结果是你的发布服务器实际上有两个套接字,一个用于发布,一个用于其他系统级通信。每当它发布新消息时,它还会将该消息添加到本地缓存中……它永远不会忘记它发送的消息。任何时候您的订阅客户端重新连接到服务器,它的第二个套接字都会向服务器发送请求以获取它错过的所有消息(或者,在链接示例的情况下,数据的整个当前状态),这些消息被发送回到第二个插座对。通过这种方式,当订阅者开始通过正常订阅者频道获取新消息时,订阅者就会了解所有消息的最新信息。
我在 tcp 中使用 pub-sub 模式。当我的一位订阅者死亡(例如 kill -9)并以相同的 IDENTITY 重新启动时,它不会收到以前的消息。
有什么解决方案可以在重新启动时发送消息? (我知道 0mq 不处理那个)
- 运行 出版商
- 运行 sub0(订阅套接字)
- 运行 sub1(订阅套接字)
- pkill -9 sub0(模拟守护进程死亡)
- 发布者发送消息
- 运行 sub0 再次(相同 ZMQ_IDENTITY)
sub0没有收到丢失的消息
这完全由您的应用程序负责。看看指南...特别是 Chapter 5 on advanced pub/sub patterns, and even more specifically Getting an out of band snapshot.
结果是你的发布服务器实际上有两个套接字,一个用于发布,一个用于其他系统级通信。每当它发布新消息时,它还会将该消息添加到本地缓存中……它永远不会忘记它发送的消息。任何时候您的订阅客户端重新连接到服务器,它的第二个套接字都会向服务器发送请求以获取它错过的所有消息(或者,在链接示例的情况下,数据的整个当前状态),这些消息被发送回到第二个插座对。通过这种方式,当订阅者开始通过正常订阅者频道获取新消息时,订阅者就会了解所有消息的最新信息。