客户端队列持久化
Client queue persistence
Amqp 代理具有允许保证交付的持久性设置 - 但只有在消息实际到达代理时才有效。如果出现网络故障,后续客户端 crash/reboot 消息可能会丢失。在 rabbitmq 或 activemq 或其他一些消息传递框架中,客户端(生产者)是否有某种方法可以将消息保存到磁盘,以便在客户端崩溃或重新启动时,任何未发送的消息都不会丢失?
我见过有人 运行 在当地找经纪人来解决这个问题。这似乎是一项不必要的工作,尤其是当您对客户端的部署没有太多控制权时。
实际上,您已经很好地回答了自己的问题。许多寻求客户端持久性的人转向嵌入式代理,因为它实际上是一个非常好的解决方案。拥有一个可以存储和转发的本地代理比每个客户端中的内置持久层给你更多的灵活性,所有本地客户端可以共享一个代理实例,这可以让你在你发现你的情况下根据需要移动存储由于意外的远程停机时间,存储的本地消息正在累积。
当然有一些客户端实现确实提供存储,但要找到一个取决于您选择的代理/协议,当然还有您是否愿意 shell 出钱购买支持或许可,如果该客户端碰巧不是来自开源实现。我认为 MQTT Paho 客户端和其他客户端一样具有本地存储选项。
Amqp 代理具有允许保证交付的持久性设置 - 但只有在消息实际到达代理时才有效。如果出现网络故障,后续客户端 crash/reboot 消息可能会丢失。在 rabbitmq 或 activemq 或其他一些消息传递框架中,客户端(生产者)是否有某种方法可以将消息保存到磁盘,以便在客户端崩溃或重新启动时,任何未发送的消息都不会丢失?
我见过有人 运行 在当地找经纪人来解决这个问题。这似乎是一项不必要的工作,尤其是当您对客户端的部署没有太多控制权时。
实际上,您已经很好地回答了自己的问题。许多寻求客户端持久性的人转向嵌入式代理,因为它实际上是一个非常好的解决方案。拥有一个可以存储和转发的本地代理比每个客户端中的内置持久层给你更多的灵活性,所有本地客户端可以共享一个代理实例,这可以让你在你发现你的情况下根据需要移动存储由于意外的远程停机时间,存储的本地消息正在累积。
当然有一些客户端实现确实提供存储,但要找到一个取决于您选择的代理/协议,当然还有您是否愿意 shell 出钱购买支持或许可,如果该客户端碰巧不是来自开源实现。我认为 MQTT Paho 客户端和其他客户端一样具有本地存储选项。