使用 Spring Boot 和 STOMP 时,有没有办法让队列不删除消息?
When using Spring Boot and STOMP, is there a way to make queues not delete messages?
我有一个应用程序在后端使用 Java,在前端使用 Angular,我正在尝试在两者之间使用 STOMP 消息传递来交换状态数据。
我想做的是让我的服务在启动时发布它们的状态,并将该数据保留在队列中,以供稍后连接到服务器的任何客户端使用。
(编辑)
澄清一下,我并不是说我希望消息在服务器重启后仍然存在。我想要的是某些消息队列保留所有消息,直到服务器重新启动。
如何告诉 Spring Boot 的 STOMP 实现不删除 /queue 的内容?
您可以配置ActiveMQ Artemis as an "external broker" and use a "non-destructive" queue。当 STOMP 客户端接收并确认来自非破坏性队列的消息时,代理将 不会 删除它。您可以定义一个特殊的“初始化”队列,所有客户端最初都连接到该队列以接收您关心的状态数据,然后它们可以连接到完成正常工作所需的任何其他队列。
在这种用例中,队列通常配置为非破坏性 和 作为 "last value" queue。这样每个客户端都可以使用自己的“最后一个值”,并且可以使它们的状态数据保持最新,而不会使队列中陈旧的状态数据复杂化。
我知道你的问题是询问如何使用 Spring 的内置代理执行此操作,但我的所有研究表明 Spring 的简单内存代理既不支持 last值队列语义,非破坏性队列语义,甚至持久消息。据我了解,Spring 的代理仅适用于最基本的用例,这就是为什么要启用与 3rd 方代理的集成,它可以支持更高级的用例(例如像你的)。
我有一个应用程序在后端使用 Java,在前端使用 Angular,我正在尝试在两者之间使用 STOMP 消息传递来交换状态数据。
我想做的是让我的服务在启动时发布它们的状态,并将该数据保留在队列中,以供稍后连接到服务器的任何客户端使用。
(编辑)
澄清一下,我并不是说我希望消息在服务器重启后仍然存在。我想要的是某些消息队列保留所有消息,直到服务器重新启动。
如何告诉 Spring Boot 的 STOMP 实现不删除 /queue 的内容?
您可以配置ActiveMQ Artemis as an "external broker" and use a "non-destructive" queue。当 STOMP 客户端接收并确认来自非破坏性队列的消息时,代理将 不会 删除它。您可以定义一个特殊的“初始化”队列,所有客户端最初都连接到该队列以接收您关心的状态数据,然后它们可以连接到完成正常工作所需的任何其他队列。
在这种用例中,队列通常配置为非破坏性 和 作为 "last value" queue。这样每个客户端都可以使用自己的“最后一个值”,并且可以使它们的状态数据保持最新,而不会使队列中陈旧的状态数据复杂化。
我知道你的问题是询问如何使用 Spring 的内置代理执行此操作,但我的所有研究表明 Spring 的简单内存代理既不支持 last值队列语义,非破坏性队列语义,甚至持久消息。据我了解,Spring 的代理仅适用于最基本的用例,这就是为什么要启用与 3rd 方代理的集成,它可以支持更高级的用例(例如像你的)。