【问题标题】:Spring Stomp sockjs Notification queue websocketSpring Stomp sockjs 通知队列 websocket
【发布时间】:2017-06-05 12:38:00
【问题描述】:

我有一个问题:我用 spring boot、stomp、sockjs 创建了一个通知系统。我有一个服务器 Java 和一个 javascript 客户端。我必须从服务器向客户端发送一些通知,但是:当客户端在线时,我向他发送通知-> 它有效! (我使用 stomp 和 sockjs) 当客户离线时,我必须保存通知,当他返回在线时,我会将保存的通知发送给他..有什么建议吗?我怎样才能做到这一点?我已经阅读了一些关于 ActiveMQ 的内容,但是我在哪里可以找到一些准确的教程?提前谢谢你

【问题讨论】:

  • 嗨,您能否分享代码或参考,您可以在 Spring MVC、stomp、sock JS 中实现向多个在线/连接用户发送通知的代码或参考?提前致谢。我面临着类似的问题:*.com/questions/33910639/…

标签: spring websocket activemq message-queue stomp


【解决方案1】:

发布您的代码、配置... 您可以通过将通知发布到目标来做到这一点(如果您有多个相同通知类型的客户端或队列,如果您有每个客户端的通知,则具有持久订阅的主题)并且当 js 客户端连接到该目标时,他会收到它们。

你可以像这样使用 websockets https://github.com/apache/activemq/tree/master/activemq-web-demo/src/main/webapp/websocket

https://github.com/jmesnil/stomp-websocket/blob/master/example/chat/index.html

http://activemq.apache.org/websockets.html

有很多库和例子https://github.com/krukow/stomple/blob/master/example/transactional-chat.html

STOMP 的 ActiveMQ 扩展 您可以将自定义标头添加到 STOMP 命令以配置 ActiveMQ 协议。以下是一些示例:

CONNECT client-id string 指定与 activemq.subcriptionName 结合使用的 JMS clientID,以表示持久订阅者。

http://activemq.apache.org/stomp.html

var connect = function () {
   var socket = new SockJS( webSocketUrl );
   stompClient = Stomp.over( socket );

   stompClient.connect( {"client-id": "my-client-id"},, function ( frame ) {

      console.log( 'Connected: ' + frame );

      stompClient.subscribe( topic, function ( message ) {
        .....
        .....
      }, {"activemq.subscriptionName": "my-client-id"});
   }, function(frame) {
        console.log("Web socket disconnected");
   });
 }

【讨论】:

  • 是的,但是如何定义持久订阅?
  • 查看更新,client-id string 指定 JMS clientID,它与 activemq.subcriptionName 结合使用来表示持久订阅者。
  • 在这个方案中,如果用户离线时发送通知,当他上线时通知会自动发送给他??
  • 是的,当他作为持久订阅者重新连接时,主题中的消息处于待处理状态。如果您需要它们生存到代理重新启动,请在代理中设置持久性
  • 我需要任何配置 XML 吗?