gpt4 book ai didi

spring - Spring集成方法发送WebSocket消息时不广播

转载 作者:行者123 更新时间:2023-12-02 08:10:27 25 4
gpt4 key购买 nike

我在 Spring 组件中有一个方法,它从 Spring Integration channel 接收消息。收到消息后,会将其发送到 WebSocket 端点。这是行不通的。该消息未广播。

this.messagingTemplate.convertAndSend("/topic/update", dto);

但是,当我将相同的代码放入 Web Controller 中并在其上放置 RequestMapping 并调用该端点时,它就可以工作了。消息已广播。

当 Spring 集成执行器调用它时,什么可能导致它无法工作?

工作时:.14:01:19.939 [http-nio-8080-exec-4] 调试 o.s.m.s.b.SimpleBrokerMessageHandler - 处理消息目的地=/topic/update session=null 负载={XXX}.14:01:19.939 [http-nio-8080-exec-4] 调试 o.s.m.s.b.SimpleBrokerMessageHandler - 广播到 1 个 session 。

当它不起作用时,第二条消息不存在。 (线程是taskExecutor-1而不是http-nio..)

Controller 代码:

@RequestMapping("/testreq")
public void updateDelta() {
SummaryDTO dto = new SummaryDTO();
dto.setValue(-5000.0);
dto.setName("G");

this.messagingTemplate.convertAndSend("/topic/update", dto);

}

//this method is called by Spring Integration
//created by serviceActivator = new
//ServiceActivatingHandler(webcontroller,"update");
public void updateDelta(SummaryDTO dto) {
this.messagingTemplate.convertAndSend("/topic/update", dto);

}

消息发送:

synchronized(this){
...

this.updatedcontrollerchannel.send(MessageBuilder.withPayload(summarydto).build( )); }

channel 创建:

updatedchannel = new DirectChannel();
updatedchannel.setBeanName("updatedcontroller");

serviceActivator = new ServiceActivatingHandler(detailService,"update");
handlerlist.add(serviceActivator);
updatedchannel.subscribe(serviceActivator);
beanFactory.registerSingleton("updatedcontroller", channel);

更新 我将 spring 消息传递源代码添加到我的环境中并实现了以下内容: 运行时中有 2 个 SimpleBrokerMessageHandler 类的实例。对于工作副本,订阅注册表有 1 个条目,对于非工作副本,它有 0 个订阅。这是否为问题的根本原因提供了线索?仅定义了一个 MessageSendingOperations 变量,并且它位于 Controller 上。

最佳答案

我找到了问题的原因。具有 @EnableWebSocketMessageBroker 注释的类被加载两次,并导致创建两个 SimpleBrokerMessageHandler 实例。 @Artem Bilan:感谢您的宝贵时间。

关于spring - Spring集成方法发送WebSocket消息时不广播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47079043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com