仅通过ESB执行基于JMS的消息传递。 ESB有一个专用的REQUEST队列,客户端使用SOAP包装器发送服务请求。 Wrapper被解释为服务名称和版本,注册表查找,到服务队列的路由。服务在专用ESB REPLY队列上响应ESB。然后需要关联到正确的存储请求以将回复发送回客户端的TMP队列。我不知道如何使用服务Sent Msg ID作为密钥将原始JMS请求的TMP队列保存到某种缓存,以便我可以检索原始请求消息ID和TMP QUEUE?
所以有两个问题。如何在代理配置中访问jms msg标头。如何设置某种缓存或存储数据以用于响应,以将它们关联回请求并设置回复。文档中根本没有纯JMS样本。
答案 0 :(得分:0)
这或多或少是流量吗?
CLIENT --> request-queue --> ESB --> service-queue --> SERVICE
then
SERVICE --> response-queue --> ESB --> tmp-queue --> CLIENT
我建议:
所以流程实际上是:
CLIENT --> request-queue --> ESB --> service-queue --> SERVICE
then
SERVICE --> tmp-queue --> CLIENT
有两个我可以想到的陷阱(并且按下了,我相信我能想出更多......)
在这种情况下,让ESB维护由message-id键入的客户端临时队列的缓存。当ESB将其请求发送到服务时,将JMSCorrelationId标头设置为从CLIENT接收的消息的消息ID。 SERVICE应从其收到的消息中读取JMSCorrelationId,并将其添加到它发送回ESB的响应消息中。 (困惑了吗?)现在ESB收到来自SERVICE的响应,解压缩JMSCorrelationId,查找相应的临时队列并在其上发送响应。
如果您的CLIENT始终可以提供唯一的客户端ID,而不是通过messageId缓存临时队列,您可以通过它缓存临时队列(不太精细)。您与SERVICE的合同从JMSCorrelationId切换到client-id。但是,根据我的经验,对于请求 - 响应JMS服务来说,它总是返回到proivided correlationId被认为是礼貌的事情,其中作为任意标题....而不是那么多。