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

Stomp WebSocket订阅两个不同的主题

谢昂雄
2023-03-14

我有一个websocket服务器和一个websocket客户端,都是Java的。websocket服务器具有以下功能:

@MessageMapping("/hello")
@SendTo("/topic/greetings")
public Greeting greeting(final HelloMessage message) throws Exception {
    Thread.sleep(1000); // simulated delay
    return new Greeting("Hello, " + message.getName() + "!");
}

在 Java 网页滑板客户端中,我在我的踩踏会话处理程序中提供了以下内容:

session.subscribe("/topic/greetings", stompFrameHandler)

然后,我能够通过客户端向服务器路径“hello”发送消息来在两者之间进行通信,然后由于客户端订阅了“topic/greetings”,所以我也要用我的stompFrameHandler来处理响应。

但是我想知道客户是否有可能订阅两个不同的“频道”,所以在踩踏会话处理程序中像这样:

session.subscribe("/topic/greetings", greetingsFrameHandler)
session.subscribe("/topic/farewell", farewellFrameHandler)

因为我试过了,我只能接收来自主题/问候的事件,而不能接收主题/告别的事件。我不知道这是否重要,但是为了触发告别事件,我向websocket服务器发出一个rest调用:

@PostMapping(value = "/sendFarewellEvent", produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
@SendTo("/topic/farewell")
public Farewell farewell(@RequestBody final Farewell farewell) throws Exception {
    Thread.sleep(1000); // simulated delay
    return farewell;
}

共有1个答案

洪光霁
2023-03-14

我想知道客户是否有可能订阅两个不同的“频道”

是的,这有效。

为了触发告别事件,我对websocket服务器进行了一次rest调用

仅仅将@PostMapping@SendTo结合使用并不能如您所愿地工作。@PostMappingorg.springframework.servlet.*)的处理程序不同于处理 /code>的处理程序( ),并且不以任何特殊方式处理 @SendToannotation。 gemapping>

您可能希望使用 SimpMessaging模板显式发送消息:如何从正常请求调用@SendTo即@RequestMapping

 类似资料:
  • 是否有任何示例代码可以让一个主机发布事件,而另一个主机通过Esper框架接收事件(侦听器或订阅者)。我注意到Esper提供了不同的适配器(套接字、JMS和HTTP),但找不到相应的示例代码。谢谢

  • https://github.com/azure/azure-service-bus/tree/master/samples/dotnet/gettingstart/microsoft.azure.servicebus/topicsubscriptionwithruleoperationssample 现在我想添加一个筛选器/规则,这样只有通过筛选器中定义的特定条件的消息才应该给订阅。 例如,下面

  • 我试图在Android 5.1设备上获得MCC和MNC号码(基本上我想要IMSI号码,但这些也足够了),该设备具有双Sim卡(两个都是活动的)。由于5.1支持双Sim卡,因此我使用的Subscription manager如下: 得到了这个输出的结果: MCC(将与同一国家相同)注意到跨国公司是相同的,尽管运营商不同。 当我关掉电话时,我在日志中看到了这样一行: 正如您所看到的,keyguard应

  • 我正在试验消息驱动Beans,以便从外部ActiveMQ实例接收主题订阅消息。 我的测试首先从队列订阅开始,它工作得很好。 然后我想尝试主题订阅,但我无法让它工作。 这就是我所拥有的: 会议记录。xml 这是MDB: 我不知道为什么,但从日志中我可以看到,TomEE创建了一个队列,而不是一个主题: 另一个证明是,当我添加持续时间配置时,服务器不会启动: 然后服务器抱怨这不适合配置类型javax.j

  • 我有以下代码 我的问题:当我添加多个主题订阅时(即上面的A,B,C),Kstream代码停止接收记录。 参考文献:https://kafka.apache.org/10/javadoc/org/apache/kafka/streams/StreamsBuilder.html 相关文件 我想实现的是:让一个Kstream(即上面的“源”)消耗/处理多个主题。

  • 客户对主题的订阅(即订阅者)的寿命是多少? 我之所以这么担心,是因为我认为服务总线的一个特点--持久的信息。因此,我认为在连接不稳定的情况下,可以保证提供持久的消息。 那么,当一个应用程序(多个应用程序中的一个)失去与服务总线的连接一天,然后第二天重新启动应用程序并实例化一个新的订阅客户端实例时,会发生什么呢?当其他应用程序由于自己的订阅已经处理了这些相同的消息时,应用程序是否会继续接收等待传递的