gpt4 book ai didi

java - 将 TaskExecutor 与 PublishSubscribeChannel 结合使用

转载 作者:行者123 更新时间:2023-12-01 09:45:42 28 4
gpt4 key购买 nike

我有这样的 java spring boot 配置:

@Bean
public SubscribableChannel channel(MessageHandler handler) {
PublishSubscribeChannel channel = new PublishSubscribeChannel(Executors.newFixedThreadPool(2));
channel.subscribe(handler);
return channel;
}

我的处理程序代码:

@Service
public class SomeDataHandler implements MessageHandler {

@Override
public void handleMessage(Message<?> message) throws MessagingException {
System.out.print(message.getPayload());
}
}

还有一些客户端代码:

@Autowired
private SubscribableChannel channel
...
channel.send(...)

而且它不起作用。只是什么也没发生。但这个配置对我来说效果很好:

@Bean
public SubscribableChannel channel(MessageHandler handler) {
PublishSubscribeChannel channel = new PublishSubscribeChannel();
channel.subscribe(handler);
return channel;
}

看来我需要做更多的事情来将任务执行器应用到我的 channel 。有任何想法吗?谢谢。

Spring 集成版本 - 4.2.5

最佳答案

“不起作用”没什么可说的 - 显示您的执行器和处理程序 bean 配置。

打开调试日志记录 - 它应该可以帮助您弄清楚发生了什么。

您不应该在 bean 声明中订阅 channel ;处理程序将由框架自动订阅(如果配置正确)。

编辑

您并没有真正使用该框架的设计;当使用执行器时,调度程序会在 bean 创建期间被替换 - 覆盖您的订阅。您在 Bean 生命周期中订阅得太早了。

虽然没有必要,但通常最好将 AbstractMessageHandler 子类化并实现 handleMessageInternal - 然后像这样配置它......

@ServiceActivator(inputChannel="channel")
@Bean
public MyAMHSubclass handler() {
return new MyAMHSubclass();
}

并从 channel bean 声明中删除 subscribe

@ServiceActivator 将处理程序包装在消费者中,该消费者在初始化上下文时订阅 channel 。

关于java - 将 TaskExecutor 与 PublishSubscribeChannel 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38057763/

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