【发布时间】:2021-06-09 01:02:04
【问题描述】:
我有一个应用程序,它在后端使用 Java,在前端使用 Angular,我正在尝试在两者之间使用 STOMP 消息传递来交换状态数据。
我想做的是让我的服务在启动时发布它们的状态,并将该数据保留在队列中以供以后连接到服务器的任何客户端使用。
(编辑)
为了澄清,我并不是说我希望消息在服务器重新启动后仍然存在。我想要的是某些消息队列保留所有消息,直到服务器重新启动。
如何告诉 Spring Boot 的 STOMP 实现不要删除 /queue 的内容?
【问题讨论】:
-
一般来说,消息传递中的“持久”一词具有预先存在的含义。 “持久”消息是“将在重新启动后仍然存在”的消息。您所说的更像是一个非破坏性队列,其中确认实际上不会删除消息。这是 Spring 的内部 STOMP 代理不太可能支持的高级用例。但是,它将由 ActiveMQ Artemis 等外部代理支持。
-
听起来您想要一个拥有持久订阅者的主题。这是发布/订阅主题将保存每条消息的地方,直到所有注册的订阅者都收到它。 This 问题可能会有所帮助。
-
你说得对,@JustinBertram,我弄错了我的问题。我现在正在解决这个问题。
-
如果你沉迷于 STOMP 客户端/服务器消息传递,那么总是存在请求-回复模型,客户端订阅回复队列并为它发送到的请求设置回复对象服务器。然后,服务器将使用一些缓存的状态信息(来自一些与消息无关的数据结构)响应请求队列上的消息,并将其发送到回复队列。
-
@HopeyOne,正如我在第一条评论中所述,ActiveMQ Artemis(可以与 Spring 集成以充当 STOMP 代理)是否通过以下方式支持这种用例"non-destructive" queue.
标签: java angular spring spring-boot stomp