如何从JMS响应中获取JMSMessageID

时间:2017-01-03 14:17:22

标签: mule

我试图找到一种方法,但是在将消息发送到队列后获取来自JMS的响应的JMSMessageID是不成功的。有人请帮帮我吗?谢谢。 (这个问题类似于Extract JMSMessageID on response from JMS Queue,但我无法对同一个问题发表评论或重新请求,因此根据建议提出新问题)

1 个答案:

答案 0 :(得分:0)

您可以使用响应转换器java类来执行此操作。请务必在此之前放置一个objectToJms转换器。

import javax.jms.JMSException;
import javax.jms.Message;

import org.apache.commons.lang.StringUtils;
import org.mule.api.MuleMessage;
import org.mule.api.transformer.TransformerException;
import org.mule.api.transport.PropertyScope;
import org.mule.transformer.AbstractMessageTransformer;

public class ExtractJmsMessageIdTransformer extends AbstractMessageTransformer {

    @Override
    public Object transformMessage(MuleMessage message, String outputEncoding) throws TransformerException {

         if (message.getPayload() instanceof Message) {
             Message jmsMessage = (Message) message.getPayload();
             String jmsMessageId = null;
             try {

                 jmsMessageId = jmsMessage.getJMSMessageID();
                 logger.info("Found JmsMessage as payload. jmsMessageId = " + jmsMessageId)
             } catch (final JMSException e) {
                 throw new TransformerException(this, e);
             }
         }

        return message;
    }

}

每条评论EDIT1

您未在响应转换器上定义ExtractJmsMessageIdTransformer类。在你的mule-config.xml中添加以下内容

<custom-transformer class="mypack.ExtractJmsMessageIdTransformer" name="extractJmsMessageIdTransformer"/>

<jms:object-to-jmsmessage-transformer name="objectToJms" />

然后像这样定义你的JMS队列

<jms:outbound-endpoint exchange-pattern="request-response" disableTemporaryReplyToDestinations="true" queue="sample" connector-ref="JMS"
                           doc:name="JMS" transformer-refs="objectToJms" responseTransformer-refs="objectToJms extractJmsMessageIdTransformer"/>
    <logger level="INFO" doc:name="Logger" message="#[message.outboundProperties]"/>