zmq:订阅者如何从发布者那里获取所有消息,而发布者发送完所有消息后关闭?

问题描述 投票:0回答:2

发布者发送完所有消息后关闭,订阅者端如何获取发布者的所有消息?例如,如果我发布 1000 条数据,订阅者将获得 500 条数据。当发布者发送完 1000 条数据后,它将关闭。订阅者将无法获取 501-1000 之间的数据。

另一个问题是当订阅者加入主题时。它始终从第一条消息而不是现在的消息中获取主题。与ROS/ROS2不同。

我在python版本中测试了ZeroMQ发布订阅模式。以前我用ROS、ROS2、DDS来开发机器人。

zeromq pyzmq
2个回答
1
投票

您可以尝试使用 XPUB 和 XSUB。这与PUB / SUB完全相同,只不过订阅者必须发送订阅/取消订阅消息,并且XPUBlisher可以接收这些订阅/取消订阅消息。有关详细信息,请参阅API 文档

这意味着你可以这样做:

XPUB发布者:

  1. 创建并绑定套接字
  2. 等待所有 XSUBscriber 订阅的消息传入(每个订阅者一条消息)
  3. 发送 1000 条消息
  4. 发送“已完成”消息
  5. 等待所有 XSUBscriber 取消订阅的消息进来退出

X订阅者:

  1. 创建并连接套接字
  2. 发送订阅消息
  3. 读取并处理消息
  4. 如果消息“已完成”,请发送取消订阅消息
  5. 退出

这将导致发布者一直等待,直到所有订阅者都收到已发送的消息,只有当它知道没有订阅者再收听时才退出。非常有用!


0
投票

虽然发布者在发送所有消息后关闭,如何获取所有消息 来自订阅者端发布者的消息?例如,如果我 发布1000条数据,订阅者获得500条数据。什么时候 发布者发送完1000条数据后,它将关闭。 那么订阅者就无法获取501-1000之间的数据片段。 该现象是由错误的调试日志代码引起的错误。 这个问题毫无意义。请忽略这个问题。 谢谢你的回答,巴扎。我对此感到抱歉。

© www.soinside.com 2019 - 2024. All rights reserved.