使用websocket和activemq spring-boot消息代理推送通知

时间:2018-01-29 08:56:27

标签: spring-boot websocket activemq

我们正在考虑为我们的UI实现推送通知系统(在Angular上实现),我们正在考虑使用websocket与使用activeMQ配置的spring-boot消息代理进行通信。

我们能够实现这一点,但我们有两个棘手的部分,我们不知道如何实现:

  • 我们不希望消息被消耗后从队列中删除,在我们的例子中,用户将看到通知列表,如果用户点击其中一个消息,我们认为他/她已经阅读过通知,我们可以将其从队列中删除,但只要他没有点击通知,他每次登录系统时都会看到它。
  • 我不想最终得到数千个队列我需要某种机制来删除所有队列已经空了1天。

我感谢对这些要点的任何意见。

谢谢, 奥马尔

1 个答案:

答案 0 :(得分:0)

  1.   

    我们不希望消息一旦从队列中删除       在我们的情况下,用户将看到通知列表以及是否       用户点击其中一个我们认为他/她       已阅读通知,我们可以将其从队列中删除,但是       只要他没有点击通知,他仍会看到它       每次他/她登录系统。

  2. 一种解决方案是使用不同的队列来存储每个用户的通知。

    使用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.   

      我不想结束我需要的数千个队列       删除所有队列的机制已空了1天。

    2. 只需使用: 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;已设定   在其相应的目的地政策条目上。