无论如何,是否有手动启动/初始化通道适配器?
我的context.xml中有两对入站/出站适配器,并且想在运行时确定我要开始使用哪一对。
编辑:
具体方案: 我有一个客户端,可以在运行时将其配置为mqtt发布者或订阅者。 我的context.xml看起来像这样:
<int-mqtt:message-driven-channel-adapter client-id="foo" auto-startup="true" url="tcp://192.168.97.164:1883" topics="testtopic/#" channel="writeToFile" /> <file:outbound-channel-adapter id="writeToFile" auto-startup="true" directory="./test/out" delete-source-files="false"/> <int:transformer id="Transformer" ref="MessageTransformer" input-channel="readFromFile" output-channel="mqttOut" method="bytesFromFile" /> <bean id="MessageTransformer" class="MessageTransformer"/> <int-mqtt:outbound-channel-adapter id="mqttOut" client-id="foo" url="tcp://192.168.97.164:1883" auto-startup="false" default-qos="1" default-retained="true" default-topic="testtopic/bla" /> <file:inbound-channel-adapter auto-startup="false" id="readFromFile" directory="./test/in" filename-pattern="myFile*"> <int:poller id="poller" fixed-rate="5000" /> </file:inbound-channel-adapter>
如你所见,我有两个设置: 1.订阅者案例:阅读mqtt消息->写入文件 2.发布者案例:从目录中轮询文件->通过mqtt发送
我在运行时决定要应用什么设置。
那么,你能告诉我这套控制总线到底如何适合吗?
设置autoStartup="false"和直接start()/ stop()它们,或使用<control-bus/>(发送@myAdapter.start())。
autoStartup="false"
start()/ stop()
<control-bus/>
@myAdapter.start()
获取直接参考(自动装配等)取决于端点类型。如果是轮询的端点,请插入SourcePollingChannelAdapter;。消息驱动的适配器有所不同,但通常为MessageProducerSupport或MessagingGatewaySupport。
SourcePollingChannelAdapter
MessageProducerSupport
MessagingGatewaySupport
在此处了解有关控制总线的信息。
给入站适配器一个id属性。
加 <control-bus input-channel="control"/>
<control-bus input-channel="control"/>
加 <int:gateway service-interface="foo.Controller" default-request-channel="control"/>
<int:gateway service-interface="foo.Controller" default-request-channel="control"/>
创建一个网关接口
public interface Controller { void control(String command); }
@Autowire网关(或使用context.getBean(Controller.class))。
@Autowire
context.getBean(Controller.class)
然后,当你准备启动适配器时,请调用gateway.control(“@mqttOut.start()”)。
你不需要auto-startup="false"出站适配器。
auto-startup="false"
但是,对于像这样的简单用例,你可能想研究使用Spring配置文件(将适配器放入配置文件中并在运行时启用配置文件。