我们正在考虑为我们的UI实现推送通知系统(在Angular上实现),我们正在考虑使用websocket与使用activeMQ配置的spring-boot消息代理进行通信。
我们能够实现这一点,但我们有两个棘手的部分,我们不知道如何实现:
我感谢对这些要点的任何意见。
谢谢, 奥马尔
答案 0 :(得分:0)
我们不希望消息一旦从队列中删除 在我们的情况下,用户将看到通知列表以及是否 用户点击其中一个我们认为他/她 已阅读通知,我们可以将其从队列中删除,但是 只要他没有点击通知,他仍会看到它 每次他/她登录系统。
一种解决方案是使用不同的队列来存储每个用户的通知。
使用ActiveMQSession.INDIVIDUAL_ACKNOWLEDGE
作为acknowledgeMode在该队列上创建单个使用者,以便在用户连接时将其显示给用户。
如果您使用STOMP http://activemq.apache.org/stomp.html#Stomp-ActiveMQExtensionstoSTOMP
stomp命令SUBSCRIBE http://stomp.github.io/stomp-specification-1.1.html#SUBSCRIBE
ack标题控制消息确认模式。
SUBSCRIBE ack Header The valid values for the ack header are auto, client, or **client-individual**. If the header is not set, it defaults to auto.
当用户点击通知时,您拨打ActiveMQMessage.acknowledge();
或者stomp命令ACK
http://stomp.github.io/stomp-specification-1.1.html#ACK
我不想结束我需要的数千个队列 删除所有队列的机制已空了1天。
只需使用: http://activemq.apache.org/delete-inactive-destinations.html
无效目的地'无效'目的地是没有的 消息挂起,没有消费者连接一段时间 时间默认情况下,代理不会检查非活动状态 目的地。这由以下默认值控制 options:schedulePeriodForDestinationPurge =" 0"和 gcInactiveDestinations ="假&#34 ;.但是,可以配置代理 清除非活动目的地。要做到这一点需要特别使用 已配置的目标策略条目与代理一起使用 attribute:schedulePeriodForDestinationPurge> 0.
示例:
<broker xmlns="http://activemq.apache.org/schema/core" schedulePeriodForDestinationPurge="10000">
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry queue=">" gcInactiveDestinations="true" inactiveTimoutBeforeGC="30000"/>
</policyEntries>
</policyMap>
</destinationPolicy>
</broker>
在此示例中,代理将每10秒检查一次非活动目的地,具体取决于 schedulePeriodForDestinationPurge =&#34; 10000&#34 ;.目的地清除时 触发代理将删除任何已空的队列 比不活动更长时间.TimoutBeforeGC =&#34; 30000&#34;毫秒(默认值: 60000毫秒)并且gcInactiveDestinations =&#34; true&#34;已设定 在其相应的目的地政策条目上。