如何在spring中以编程方式创建通道拦截器

时间:2014-05-31 12:44:50

标签: spring spring-integration mqtt

我想按编程方式创建以下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适配器。

有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

目前尚不清楚你要做什么;您在XML配置中的input-channel-1下游有什么。

messageListener做了什么?

将业务逻辑放入渠道是一种反模式;除非它的内容非常轻量级,否则请考虑使用<service-activator/>来调用它 - 可能通过使input-channel-1成为pub-sub通道。

要回答您的简单问题,要添加拦截器,您可以使用outputChannel.addInterceptor(ctx.getBean("messageListener", ChannelInterceptor.class));