0
我试图找到一种方式,但是在将消息发送到队列后从JMS响应中获取JMSMessageID失败。有人请帮助我吗?谢谢。 (这个问题类似于Extract JMSMessageID on response from JMS Queue,但我既不能发表评论,也没有重新请求对同样的问题,因此,创建一个新的问题,建议以下)如何从JMS响应中获取JMSMessageID
我试图找到一种方式,但是在将消息发送到队列后从JMS响应中获取JMSMessageID失败。有人请帮助我吗?谢谢。 (这个问题类似于Extract JMSMessageID on response from JMS Queue,但我既不能发表评论,也没有重新请求对同样的问题,因此,创建一个新的问题,建议以下)如何从JMS响应中获取JMSMessageID
您可以使用响应变压器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类。在你的骡子-config.xml中添加以下
<custom-transformer class="mypack.ExtractJmsMessageIdTransformer" name="extractJmsMessageIdTransformer"/>
<jms:object-to-jmsmessage-transformer name="objectToJms" />
则这样定义
<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]"/>
您的JMS队列,我得到空ID,它是从输入登录? '
我的XML如下: '
输出结果如下: mypack.ExtractJmsMessageIdTransformer:找到JmsMessage作为有效载荷。 jmsMessageId = null。 – Kepler186f
感谢您的回复。对不起,我格式不好的回复,我仍然在调整。请检查我的上述代码,并提出需要更正的地方。 – Kepler186f
基本上,我使用单向或请求 - 响应交换模式与TIBCO EMS,我只会得到NullPayload,因此没有JMSMessageID。我们是否从Mule流程的配置末端丢失了某些东西,或者仅仅使用TIBCO EMS?由于基本的TIBCO JMS流程会立即得到响应模式中的messageid,因此我无法使用TIBCO EMS进行声明。还尝试了一个示例java代码,我成功地获取了实际发送的消息的JMSMessageID,只是Mule流无法获取它。请提供配置/代码结束的其他建议吗?提前致谢。 – Kepler186f