当前位置: 首页 > 知识库问答 >
问题:

使用STOMP订阅主题Spring WebSocket时未创建动态队列?

越琦
2023-03-14

我正在开发消息推送给订阅特定事件的所有用户子集。用户订阅RabbitMQ中的主题,格式为:user-id.event-type.id.我使用Spring WebSockJS、Stomp、RabbitMQ以及前端SockJS和Angular JS。用户应该被通知关于事件的所有行动(评论等,日期更改)。

到目前为止,我们拥有的:

首先,我通过REST webservice终结点进行身份验证,并将令牌放入Cookie。然后我们连接到webSocket。用户订阅话题(/话题/user-45.meeting.1235)并且他们得到通知。但是我的问题是一些用户没有收到通知。对于第二个用户,由于某些原因没有在RabbitMQ中创建队列。有人知道为什么吗?

这是我在Spring applicationContext中的代理设置。xml:

<websocket:message-broker application-destination-prefix="/app">
        <websocket:stomp-endpoint path="/stomp">
            <websocket:sockjs/>
        </websocket:stomp-endpoint>
        <websocket:stomp-broker-relay relay-host="localhost" relay-port="61613" system-login="guest" system-passcode="guest" prefix="/queue, /topic"/>
    </websocket:message-broker>

这就是通过Sockjs订阅的方式:

var ws = new SockJS('http://' + location.host + path);
var stompClient = Stomp.over(ws);
stompClient.connect({
    username: '',
    password: '',
    host: '/'
}, function () {
    stompClient.subscribe('/topic/user-45.meeting.' + obj.id,
        function (message) {
            console.log(message);
        }, {
            persistent: true
        });
});

若我们在SUBSCRIBE框架中指定unique Id字段,它将为每个用户创建唯一的队列。这条路走吗?

共有1个答案

邵胜涝
2023-03-14

据我所知,您需要订阅\队列而不是\主题。通过这样做,您不需要为不同的用户自定义主题名称,这将由Sockjs根据登录用户进行处理。在服务器端,您还可以通过使用\队列\user\{用户名}\{队列名称}向特定用户发送消息

 类似资料:
  • 我有一个websocket服务器和一个websocket客户端,都是Java的。websocket服务器具有以下功能: 在 Java 网页滑板客户端中,我在我的踩踏会话处理程序中提供了以下内容: 然后,我能够通过客户端向服务器路径“hello”发送消息来在两者之间进行通信,然后由于客户端订阅了“topic/greetings”,所以我也要用我的stompFrameHandler来处理响应。 但是我

  • 一、STOMP协议介绍 STOMP即Simple (or Streaming) Text Orientated Messaging Protocol,简单(流)文本定向消息协议,它提供了一个可互操作的连接格式,允许STOMP客户端与任意STOMP消息代理(Broker)进行交互。STOMP协议由于设计简单,易于开发客户端,因此在多种语言和多种平台上得到广泛地应用。 STOMP协议的前身是TTMP协

  • 我在这里做错了什么?我试图使用Stomp在Artemis 2.13.0中测试一些东西,但是当我使用Python脚本的命令行实用程序时,我不能订阅队列,即使在我使用该实用程序将消息发布到一个地址之后也是如此。 另外,如果我给它一个新的队列名,它会创建它,但不会将我发布的消息拉到它。这让人困惑。我的实际Java应用程序的行为与此不同--它使用的是JMS 这使得我认为Stomp试图在订阅时创建队列,但我

  • 我正在使用ActiveMQ Artemis消息传递系统,我正在用STOMP(STOMP.py)测试我的设置。 我在Artemis上创建了一个名为的“地址”,并为其附加了两个队列: (组播) (组播) 那么如何访问队列呢?例如,如果我使用stomp.py命令行工具,如下所示: 我得到了错误: 这是我遗漏的命名约定吗?还是一种指定主题vs队列的方法?我在这里遗漏了什么,太明显了,无法清楚地记录下来?

  • 是否有一种方法可以使用AWS CLI列出特定SQS队列订阅的所有AWS SNS主题? 我已经知道如何看到一个SNS主题上的订阅者列表,但这只有在我知道SNS主题的名称时才起作用。在这种情况下,我只知道SQS队列的名称。 我在网上搜索什么也找不到。

  • 如何在AWS CloudFormation中创建Amazon SQS队列并订阅Amazon SNS主题? SNS主题名=T1 SQS队列名称=Q1 我需要一个JSON或YAML格式的模板 请帮帮我。