如何解决ActiveMQ 到序列
我正在尝试编写一个自定义突触处理程序来记录传入请求和对 wso2carbon.log 的相应响应 - 我已经完成了,但是我无法记录相同的 UUID 一旦请求从消息队列 ActiveMQ 返回到目标序列中,我就会对其进行初始化。
我的意思是我收到一个请求 - 我创建了一个 UUID - 我记录它并保存它 - 在响应时我也记录它 - 我将它保存在传输标头的原始上下文中,我希望当我从 Active MQ 获取它时记录它,但消息进入一个序列并且似乎没有被 handleRequestInFlow 和 handleResponseInFlow?可以做什么?
在处理程序中,我使用“extends AbstractSynapseHandler”来启动日志记录过程。
这是处理程序的代码:
package org.wso2.handler.synapse;
import org.apache.commons.lang3.StringUtils;
import org.apache.synapse.AbstractSynapseHandler;
import org.apache.synapse.MessageContext;
import org.apache.synapse.core.axis2.Axis2MessageContext;
import org.slf4j.MDC;
import java.util.Map;
import java.util.UUID;
public class MessageIDHandler extends AbstractSynapseHandler {
private static final String TransactionUUID = "TransactionUUID";
private static final String LOG_KEY = "messageId";
@SuppressWarnings("unchecked")
public boolean handleRequestInFlow(MessageContext messageContext) {
org.apache.axis2.context.MessageContext axis2MC;
axis2MC = ((Axis2MessageContext) messageContext).
getAxis2MessageContext();
Map<String,String> headers = (Map<String,String>) axis2MC.getProperty(org.apache.axis2.context.MessageContext.TRANSPORT_HEADERS);
String messageId = headers.get("X-Transaction-ID");
if(StringUtils.isEmpty(messageId)){
messageId = UUID.randomUUID().toString();
headers.put("X-Transaction-ID",messageId);
}
messageContext.setProperty(TransactionUUID,messageId);
MDC.put(LOG_KEY,messageId + " - REQUEST");
return true;
}
public boolean handleRequestOutFlow(MessageContext messageContext) {
return true;
}
public boolean handleResponseInFlow(MessageContext messageContext) {
MDC.put(LOG_KEY,String.valueOf(messageContext.getProperty(TransactionUUID)) + " - RESPONSE");
return true;
}
public boolean handleResponSEOutFlow(MessageContext messageContext) {
return true;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。