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