【发布时间】:2018-06-29 10:22:17
【问题描述】:
两个系统通过集成(使用 apache-camel)相互通信。假设系统 A 需要向系统 B 提交请求,系统 B 已经公开了一个 Web 服务来接收数据,并且集成正在按照系统 B 的 Web 服务转换数据。
在上述场景中,A 和 B 必须同时可用,并且 A 必须等待 B 的响应。我需要通过将队列放在集成层并使用异步通信来消除这种依赖关系。 例如:
<camel:route id="AtoIntegration">
<camel:from
uri="spring-ws:someEndPoint" />
<camel:bean ref="testAsyncPreprocessor" />
<camel:inOnly uri="activemq:requestqueue" />
</camel:route>
<camel:route id="integrationToB">
<camel:from uri="activemq:requestqueue" />
<camel:transacted />
<camel:bean ref="afterQueueProcessor" />
<camel:setHeader headerName="CamelHttpMethod">
<camel:constant>POST</camel:constant>
</camel:setHeader>
<camel:setHeader headerName="Content-Type">
<camel:constant>application/x-www-form-urlencoded</camel:constant>
</camel:setHeader>
<camel:to uri="http://localhost:8080/systemB/newOrder?test=testData"
/>
</camel:route>
如上所述,即使系统 B 不可用,路由系统 A 也可以提交请求,但 route integrationToB 仍然需要系统 B 可用,否则它将失败并在重试后将请求放入死信队列。 所以我想弄清楚如何配置路由集成ToB,只有在系统 B 可用时才运行。
【问题讨论】:
标签: apache-camel jms activemq spring-jms