我想按编程方式创建以下XML配置:
<int-mqtt:message-driven-channel-adapter id="inboundAdapter"
client-id="${mqtt.client.id}"
url="${mqtt.broker.url}"
topics="${mqtt.subscribed.topics}"
client-factory="clientFactory"
channel="input-channel-1" converter="customConverter" />
<int:channel id="input-channel-1">
<int:queue/>
<int:interceptors>
<int:wire-tap channel="logger"/>
<int:ref bean="messageListener"/>
</int:interceptors>
</int:channel>
<int:channel id="logger" />
<int:logging-channel-adapter channel="logger"
auto-startup="true" level="INFO" id="loggerAdapter" log-full-message="true" />
我能做的是以下
CustomMqttPahoMessageDrivenChannelAdapter adapter = new CustomMqttPahoMessageDrivenChannelAdapter(url, clientId, topic);
adapter.setOutputChannel(outputChannel);
adapter.setConverter(ctx.getBean("customConverter", MyPahoMessageConverter.class));
现在我需要添加拦截器bean,当消息分别根据他们订阅的主题分别到达时,每个客户端都会收到通知。
1)当客户端连接到服务器时创建mqtt适配器。(每个客户端将根据配置订阅不同的主题)
2)在客户端断开连接时配置mqtt适配器。
有人可以帮我吗?
答案 0 :(得分:1)
目前尚不清楚你要做什么;您在XML配置中的input-channel-1
下游有什么。
messageListener
做了什么?
将业务逻辑放入渠道是一种反模式;除非它的内容非常轻量级,否则请考虑使用<service-activator/>
来调用它 - 可能通过使input-channel-1
成为pub-sub通道。
要回答您的简单问题,要添加拦截器,您可以使用outputChannel.addInterceptor(ctx.getBean("messageListener", ChannelInterceptor.class));
。