如何拦截jms入站网关的回复消息

时间:2015-02-26 11:20:34

标签: jms spring-integration gateway inbound

我有一个jms-inbound-gateway,它从WebsphereMQ代理读取请求,通过我的集成系统传递它们,然后回复一条响应消息。

我需要使用jms_messageId和jms_correlationId标头设置记录消息,因此我可以在日志文件中匹配请求/回复消息(并在他说我的响应没有正确的jms_correlationId时将其显示给我的客户端)< / p>

有没有办法在设置correlationId标头后拦截方法producer.sendReply(...)?

2 个答案:

答案 0 :(得分:2)

没有必要在那里拦截;在到达网关之前,标头在网关回复消息中的Spring Integration消息中可用。

只需将reply-channel设为publish-subscribe-channel并添加<logging-channel-adapter/>即可将其作为输入频道。

回复消息将被发送到网关和记录器。

如果您使用默认机制来路由回复(在上一个集成组件上没有output-channel),只需添加output-channel并路由到回复频道。

答案 1 :(得分:1)

在加里的意见之后,这是我解决方案的要点:

<jms:inbound-gateway 
    id="inboundDestination" 
    connection-factory="connectionFactory"  
    request-destination="nmRequestsQueue" 
    request-channel="request-begin" 
    reply-channel="request-end" 
    error-channel="normaErrorChannel" 
    concurrent-consumers="1" 
    acknowledge="transacted" />

<int:logging-channel-adapter id="request-response-logger"
        log-full-message="true"
        level="DEBUG" 
        logger-name="com.audaxys.si.messages" />

<int:channel id="request-begin">
    <int:interceptors>
        <int:wire-tap channel="request-response-logger" />
    </int:interceptors>
</int:channel>

<int:chain input-channel="request-begin" output-channel="request-end">
    ... Do Stuff ...
</int:chain>

<int:publish-subscribe-channel id="request-end">
    <int:interceptors>
        <int:wire-tap channel="request-response-logger" />
    </int:interceptors>
</int:publish-subscribe-channel>