我在以下场景中苦苦挣扎:
WS | ============ | JMS ~~~ async将来处理~~~
这个想法如下。传入的WS请求存储到JMS,一旦存储(正确发送),WS客户端就会响应OK。
我可以通过spring jmsTemplate实现这一点,就像这样
<chain>
<service-activator>
... calling jmsTemplate send ...
</service-activator>
<OK response>
</chain>
我不想使用jmsTemplate,但是如果我使用jms:outbound-channel-adapter,则不会生成任何回复消息并且它会被卡住。其他构造导致同步处理,意味着WS响应被延迟,直到JMS请求被完全处理。
我相信有一个简单的解决方案,但我几个小时都找不到它。谢谢!
编辑:建议的解决方案工作,非常感谢!我的朋友推荐我另一个 - 使用电线,它看起来不错恕我直言。
<int:gateway service-interface="MyService" default-request-channel="in"/>
<channel id="in">
<interceptors>
<wire-tap channel="inJms"/>
</interceptors>
</channel>
<channel id="inJms"/>
<transformer expression="'OK'" input-channel="in" order="1"/>
<jms:outbound-channel-adapter channel="inJms" destination="requestQueue"/>
<publish-subscribe-channel/>
可以帮助您:
<publish-subscribe-channel id="storeMessageChannel"/>
<int-ws:inbound-gateway request-channel="storeMessageChannel"/>
<int-jms:outbound-channel-adapter channel="storeMessageChannel"/>
<int:transformer input-channel="storeMessageChannel" expression="'OK'"/>
那么,在这种情况下,来自WS的消息将被发送到具有两个顺序订户的storeMessageChannel
:1。JMS - 将消息发送到队列; 2.简单的变换器 - 返回WS响应'OK'。
只有在jms出站适配器完成其工作后,Transformer才会应用该消息。