Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用SpringBoot和STOMP时,有没有办法使队列不删除消息?_Java_Angular_Spring_Spring Boot_Stomp - Fatal编程技术网

Java 使用SpringBoot和STOMP时,有没有办法使队列不删除消息?

Java 使用SpringBoot和STOMP时,有没有办法使队列不删除消息?,java,angular,spring,spring-boot,stomp,Java,Angular,Spring,Spring Boot,Stomp,我有一个应用程序,在后端使用Java,在前端使用Angular,我试图在两者之间使用STOMP消息来交换状态数据 我想做的是让我的服务在启动时发布它们的状态,并让这些数据保留在队列中,供以后连接到服务器的任何客户端使用 (编辑) 为了澄清,我并不是说我想让邮件在服务器重新启动后存活下来。我希望某些消息队列保留所有消息,直到服务器重新启动 如何告诉Spring Boot的STOMP实现不要删除/队列的内容?您可以将配置为并使用。当STOMP客户机接收并确认来自非破坏性队列的消息时,代理不会将其删除

我有一个应用程序,在后端使用Java,在前端使用Angular,我试图在两者之间使用STOMP消息来交换状态数据

我想做的是让我的服务在启动时发布它们的状态,并让这些数据保留在队列中,供以后连接到服务器的任何客户端使用

(编辑)

为了澄清,我并不是说我想让邮件在服务器重新启动后存活下来。我希望某些消息队列保留所有消息,直到服务器重新启动

如何告诉Spring Boot的STOMP实现不要删除/队列的内容?

您可以将配置为并使用。当STOMP客户机接收并确认来自非破坏性队列的消息时,代理不会将其删除。您可以定义一个特殊的“初始化”队列,所有客户端最初连接到该队列以接收您关心的状态数据,然后它们可以连接到完成正常工作所需的任何其他队列

在这种用例中,队列通常被配置为非破坏性的,并作为一个整体。这样,每个客户机都可以使用自己的“最后一个值”,并可以保持其状态数据为最新状态,而不会出现队列中过时状态数据的复杂情况


我知道您的问题是问如何使用Spring的内置代理实现这一点,但我的所有研究表明,Spring的简单内存代理既不支持最后值队列语义,也不支持非破坏性队列语义,甚至不支持持久消息。据我所知,Spring的代理仅适用于最基本的用例,这就是为什么要与第三方代理集成,以支持更高级的用例(如您的)。一般来说,消息传递中的术语“持久”具有预先存在的含义。“持久”消息是一个“将在重启后生存”的消息。您所说的更像是一个非破坏性队列,其中确认实际上不会删除消息。这是一个高级用例,Spring的内部STOMP代理可能不支持它。但是,它将由一个外部代理(如ActiveMQ Artemis)支持,听起来您需要一个具有持久订阅者的主题。在这里,发布/订阅主题将保存每条消息,直到所有注册订阅者都收到它。“这个问题可能会有帮助。你说得对,”贾斯汀·伯特伦,我错估了我的问题。我现在正在解决这个问题。如果您热衷于STOMP客户机/服务器消息传递,则始终存在请求-应答模型,即客户机订阅应答队列,并为其发送到服务器的请求设置应答。然后,服务器将使用一些缓存的状态信息(来自一些与消息传递无关的数据结构)响应请求队列上的消息,并将其发送到回复队列。@HopeyOne,正如我在第一条评论中所指出的,ActiveMQ Artemis(可以与Spring集成作为STOMP代理)通过.Ah支持这种用例,但这似乎需要向应用程序添加一个外部实体。我希望找到一种方法来配置Spring提供的内部代理,使其具有非破坏性队列。我认为它的答案只是因为它意味着Spring的内置代理不使用最后一个值或持久队列。如果你能更新它说清楚,那么我会把它标记为已回答。相应地更新。谢谢