RabbitMQ:将消息标记为已过时
全局问题:我们能否在客户端使用消息之前将其标记为过时?
上下文:
- 我有一个机器集群
- 每台机器在发生变化时都会发送消息
- 该消息是一个发生变化的 Rails 对象
- 客户端,当收到此消息时,只需保存它
场景
- 给定 3 台机器 A、B 和 C
- 给定对象 O 属于机器A
- A 不在网络中
- 机器 A 上的对象 O 发生了很多变化
当网络再次启动时,我想取消有关 O 的所有消息,除了最后一条(生产者端或消费者端)。 所以B和C不会保存O对象的所有状态,而只会保存最后一个。
提问:
- 你认为可能吗?
- 有没有更好的方法来实现同步(我们不想使用MySQL集群)
谢谢。
Global question : can we mark a message as obsolete before it consummed by a client ?
Context:
- I have a cluster of machines
- Each machine send message when something change
- The message is a Rails object that changed
- The client, when getting this message, juste save it
Scenario
- Given 3 machines A, B and C
- Given the object O belongs to machine A
- A is out of network
- There is lot of changes on object O on machine A
When network is up again, I'd like to cancel all the messages regarding O, except the last one (producer side or consummer side).
So B and C will not save all the states of the O object, but only the last one.
Questions :
- Do you think it is possible ?
- Is there a better way to achieve syncronisation (we don't want to use MySQL cluster)
Thank you.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我们正在做一些类似的事情(在.net中),如果一个节点断开网络或重新启动,那么当它回来时,它所做的第一件事就是要求所有其他节点进行状态更新。所有节点将其发送给所有节点。然后,我们使用时间戳仅对消息比最后处理的消息更新的消息进行操作。似乎可以很好地满足我们的需要,即 5 个工作节点都具有相同的配置并在它们之间同步任何更改。
we are doing something silimar (in .net but) if a node goes off network or restarts then when it comes back the first thing it does is ask all the other nodes to a status upadte. All the node send this to all nodes. We then use a time stamp to only act on a message if its more recent than the last last one processed. Appears to work just fine for what we need which is 5 worker nodes all with the same configuration and syncing any chnages between themselves.