【发布时间】:2017-01-10 01:31:41
【问题描述】:
我试图找到一种方法,但未能成功获取在将消息发送到队列后作为来自 JMS 的响应的 JMSMessageID。有人可以帮我吗?谢谢。 (这个问题类似于Extract JMSMessageID on response from JMS Queue,但我既不能评论也不能重新请求同一个问题,所以根据建议创建一个新问题)
【问题讨论】:
标签: mule
我试图找到一种方法,但未能成功获取在将消息发送到队列后作为来自 JMS 的响应的 JMSMessageID。有人可以帮我吗?谢谢。 (这个问题类似于Extract JMSMessageID on response from JMS Queue,但我既不能评论也不能重新请求同一个问题,所以根据建议创建一个新问题)
【问题讨论】:
标签: mule
您可以使用响应转换器 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]"/>
【讨论】: