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