use of com.pamirs.attach.plugin.apache.rocketmq.common.MQTraceBean in project LinkAgent by shulieTech.
the class PullConsumeMessageHookImpl method consumeMessageBefore.
@Override
public void consumeMessageBefore(ConsumeMessageContext context) {
try {
if (context == null || context.getMsgList() == null || context.getMsgList().isEmpty()) {
return;
}
MQTraceContext mqTraceContext = new MQTraceContext();
context.setMqTraceContext(mqTraceContext);
mqTraceContext.setMqType(MQType.ROCKETMQ);
mqTraceContext.setGroup(context.getConsumerGroup());
boolean silence = PradarService.isSilence();
List<MQTraceBean> beans = new ArrayList<MQTraceBean>();
for (MessageExt msg : context.getMsgList()) {
if (msg == null) {
continue;
}
MQTraceBean traceBean = new MQTraceBean();
Map<String, String> rpcContext = new HashMap<String, String>();
for (String key : Pradar.getInvokeContextTransformKeys()) {
String value = msg.getProperty(key);
if (value != null) {
rpcContext.put(key, value);
}
}
traceBean.setContext(rpcContext);
traceBean.setTopic(msg.getTopic());
traceBean.setMsgId(msg.getMsgId());
traceBean.setOriginMsgId(MessageAccessor.getOriginMessageId(msg));
traceBean.setTags(msg.getTags());
traceBean.setKeys(msg.getKeys());
traceBean.setBuyerId(msg.getBuyerId());
traceBean.setTransferFlag(MessageAccessor.getTransferFlag(msg));
traceBean.setCorrectionFlag(MessageAccessor.getCorrectionFlag(msg));
traceBean.setBodyLength(msg.getBody().length);
traceBean.setBornHost(StringUtils.substring(msg.getBornHost().toString(), 1));
String storeHost = "";
String port = "";
if (msg.getStoreHost() != null && msg.getStoreHost() instanceof InetSocketAddress) {
InetSocketAddress address = (InetSocketAddress) msg.getStoreHost();
storeHost = address.getAddress() == null ? null : address.getAddress().getHostAddress();
port = String.valueOf(address.getPort());
} else {
storeHost = StringUtils.substring(msg.getStoreHost().toString(), 1);
}
traceBean.setStoreHost(storeHost);
traceBean.setPort(port);
traceBean.setStoreTime(msg.getStoreTimestamp());
traceBean.setBrokerName(context.getMq().getBrokerName());
traceBean.setQueueId(msg.getQueueId());
traceBean.setOffset(msg.getQueueOffset());
traceBean.setRetryTimes(msg.getReconsumeTimes());
traceBean.setProps(context.getProps());
traceBean.setClusterTest(msg.getProperty(PradarService.PRADAR_CLUSTER_TEST_KEY));
boolean isClusterTest = msg.getTopic() != null && (Pradar.isClusterTestPrefix(msg.getTopic()) || Pradar.isClusterTestPrefix(msg.getTopic(), RETRYSTR) || Pradar.isClusterTestPrefix(msg.getTopic(), DLQSTR));
// 消息的properties是否包含Pradar.PRADAR_CLUSTER_TEST_KEY
isClusterTest = isClusterTest || ClusterTestUtils.isClusterTestRequest(msg.getProperty(PradarService.PRADAR_CLUSTER_TEST_KEY));
if (isClusterTest) {
traceBean.setClusterTest(Boolean.TRUE.toString());
}
if (silence && isClusterTest) {
throw new PressureMeasureError(this.getClass().getName() + ":silence module ! can not handle cluster test data");
}
beans.add(traceBean);
}
mqTraceContext.setTraceBeans(beans);
MQConsumeMessageTraceLog.consumeMessageBefore(mqTraceContext);
} catch (PradarException e) {
LOGGER.error("", e);
if (Pradar.isClusterTest()) {
throw e;
}
} catch (PressureMeasureError e) {
LOGGER.error("", e);
if (Pradar.isClusterTest()) {
throw e;
}
} catch (Throwable e) {
LOGGER.error("", e);
if (Pradar.isClusterTest()) {
throw new PressureMeasureError(e);
}
}
}
use of com.pamirs.attach.plugin.apache.rocketmq.common.MQTraceBean in project LinkAgent by shulieTech.
the class PushConsumeMessageHookImpl method consumeMessageBefore.
@Override
public void consumeMessageBefore(ConsumeMessageContext context) {
try {
if (context == null || context.getMsgList() == null || context.getMsgList().isEmpty()) {
return;
}
MQTraceContext mqTraceContext = new MQTraceContext();
context.setMqTraceContext(mqTraceContext);
mqTraceContext.setMqType(MQType.ROCKETMQ);
mqTraceContext.setGroup(context.getConsumerGroup());
boolean silence = PradarService.isSilence();
List<MQTraceBean> beans = new ArrayList<MQTraceBean>();
for (MessageExt msg : context.getMsgList()) {
if (msg == null) {
continue;
}
MQTraceBean traceBean = new MQTraceBean();
Map<String, String> rpcContext = new HashMap<String, String>();
for (String key : Pradar.getInvokeContextTransformKeys()) {
String value = msg.getProperty(key);
if (value != null) {
rpcContext.put(key, value);
}
}
traceBean.setContext(rpcContext);
traceBean.setTopic(msg.getTopic());
traceBean.setMsgId(msg.getMsgId());
traceBean.setOriginMsgId(MessageAccessor.getOriginMessageId(msg));
traceBean.setTags(msg.getTags());
traceBean.setKeys(msg.getKeys());
traceBean.setBuyerId(msg.getBuyerId());
traceBean.setTransferFlag(MessageAccessor.getTransferFlag(msg));
traceBean.setCorrectionFlag(MessageAccessor.getCorrectionFlag(msg));
traceBean.setBodyLength(msg.getBody().length);
traceBean.setBornHost(StringUtils.substring(msg.getBornHost().toString(), 1));
String storeHost = "";
String port = "";
if (msg.getStoreHost() != null && msg.getStoreHost() instanceof InetSocketAddress) {
InetSocketAddress address = (InetSocketAddress) msg.getStoreHost();
storeHost = address.getAddress() == null ? null : address.getAddress().getHostAddress();
port = String.valueOf(address.getPort());
} else {
storeHost = StringUtils.substring(msg.getStoreHost().toString(), 1);
}
traceBean.setStoreHost(storeHost);
traceBean.setStoreTime(msg.getStoreTimestamp());
traceBean.setBrokerName(context.getMq().getBrokerName());
traceBean.setQueueId(msg.getQueueId());
traceBean.setOffset(msg.getQueueOffset());
traceBean.setRetryTimes(msg.getReconsumeTimes());
traceBean.setProps(context.getProps());
/**
* 如果有压测标则设置压测标,没有则根据topic是否是PT_开头,如果是则设置为压测流量
*/
boolean isClusterTest = msg.getTopic() != null && (Pradar.isClusterTestPrefix(msg.getTopic()) || Pradar.isClusterTestPrefix(msg.getTopic(), RETRYSTR) || Pradar.isClusterTestPrefix(msg.getTopic(), DLQSTR));
// 消息的properties是否包含Pradar.PRADAR_CLUSTER_TEST_KEY
isClusterTest = isClusterTest || ClusterTestUtils.isClusterTestRequest(msg.getProperty(PradarService.PRADAR_CLUSTER_TEST_KEY));
if (isClusterTest) {
traceBean.setClusterTest(Boolean.TRUE.toString());
}
if (silence && isClusterTest) {
throw new PressureMeasureError(this.getClass().getName() + ":silence module ! can not handle cluster test data");
}
beans.add(traceBean);
}
mqTraceContext.setTraceBeans(beans);
MQConsumeMessageTraceLog.consumeMessageBefore(mqTraceContext);
} catch (PradarException e) {
LOGGER.error("", e);
if (Pradar.isClusterTest()) {
throw e;
}
} catch (PressureMeasureError e) {
LOGGER.error("", e);
if (Pradar.isClusterTest()) {
throw e;
}
} catch (Throwable e) {
LOGGER.error("", e);
if (Pradar.isClusterTest()) {
throw new PressureMeasureError(e);
}
}
}
use of com.pamirs.attach.plugin.apache.rocketmq.common.MQTraceBean in project LinkAgent by shulieTech.
the class SendMessageHookImpl method sendMessageAfter.
@Override
public void sendMessageAfter(SendMessageContext context) {
try {
if (context == null || context.getMessage() == null) {
return;
}
MQTraceContext mqTraceContext = (MQTraceContext) context.getMqTraceContext();
MQTraceBean traceBean = mqTraceContext.getTraceBeans().get(0);
if (traceBean != null && context.getSendResult() != null) {
traceBean.setQueueId(context.getMq().getQueueId());
traceBean.setMsgId(context.getSendResult().getMsgId());
traceBean.setOffset(context.getSendResult().getQueueOffset());
mqTraceContext.setSuccess(true);
mqTraceContext.setStatus(context.getSendResult().getSendStatus().toString());
} else {
if (context.getException() != null) {
String msg = context.getException().getMessage();
mqTraceContext.setErrorMsg(StringUtils.substring(msg, 0, msg.indexOf("\n")));
}
}
MQSendMessageTraceLog.sendMessageAfter(mqTraceContext);
} catch (PradarException e) {
LOGGER.error("", e);
if (Pradar.isClusterTest()) {
throw e;
}
} catch (PressureMeasureError e) {
LOGGER.error("", e);
if (Pradar.isClusterTest()) {
throw e;
}
} catch (Throwable e) {
LOGGER.error("", e);
if (Pradar.isClusterTest()) {
throw new PressureMeasureError(e);
}
}
}
use of com.pamirs.attach.plugin.apache.rocketmq.common.MQTraceBean in project LinkAgent by shulieTech.
the class SendMessageHookImpl method sendMessageBefore.
@Override
public void sendMessageBefore(SendMessageContext context) {
try {
if (context == null || context.getMessage() == null) {
return;
}
Message message = context.getMessage();
if (message == null) {
return;
}
ClusterTestUtils.validateClusterTest();
MQTraceBean traceBean = new MQTraceBean();
traceBean.setTopic(message.getTopic());
traceBean.setOriginMsgId(MessageAccessor.getOriginMessageId(message));
traceBean.setTags(message.getTags());
traceBean.setKeys(message.getKeys());
traceBean.setBuyerId(message.getBuyerId());
traceBean.setTransferFlag(MessageAccessor.getTransferFlag(message));
traceBean.setCorrectionFlag(MessageAccessor.getCorrectionFlag(message));
traceBean.setBodyLength(message.getBody().length);
traceBean.setBornHost(context.getBornHost());
String brokerAddr = context.getBrokerAddr();
int port = -1;
int indexOfColon = -1;
if (brokerAddr != null && (indexOfColon = brokerAddr.indexOf(':')) != -1) {
try {
port = Integer.parseInt(brokerAddr.substring(indexOfColon + 1));
} catch (NumberFormatException e) {
}
brokerAddr = brokerAddr.substring(0, indexOfColon);
}
final List<String> nameServerAddressList = context.getProducer().getmQClientFactory().getMQClientAPIImpl().getNameServerAddressList();
Collections.sort(nameServerAddressList);
traceBean.setStoreHost(StringUtils.join(nameServerAddressList, ","));
traceBean.setBrokerName(context.getMq().getBrokerName());
// 上游AppName,记录当前应用的AppName
traceBean.setProps(context.getProps());
ArrayList<MQTraceBean> traceBeans = new ArrayList<MQTraceBean>(1);
traceBeans.add(traceBean);
MQTraceContext mqTraceContext = new MQTraceContext();
context.setMqTraceContext(mqTraceContext);
mqTraceContext.setMqType(MQType.ROCKETMQ);
mqTraceContext.setGroup(context.getProducerGroup());
mqTraceContext.setAsync(CommunicationMode.ASYNC == context.getCommunicationMode());
mqTraceContext.setTraceBeans(traceBeans);
Map<String, String> rpcContext = new HashMap<String, String>();
for (String key : Pradar.getInvokeContextTransformKeys()) {
String value = message.getProperty(key);
if (value != null) {
rpcContext.put(key, value);
}
}
traceBean.setContext(rpcContext);
traceBean.setClusterTest(message.getUserProperty(PradarService.PRADAR_CLUSTER_TEST_KEY));
MQSendMessageTraceLog.sendMessageBefore(mqTraceContext);
for (Map.Entry<String, String> entry : traceBean.getContext().entrySet()) {
putUserProperty(message, entry.getKey(), entry.getValue());
}
putUserProperty(message, RocketmqConstants.NAME_SERVER_ADDRESS, traceBean.getStoreHost());
} catch (PradarException e) {
LOGGER.error("", e);
if (Pradar.isClusterTest()) {
throw e;
}
} catch (PressureMeasureError e) {
LOGGER.error("", e);
if (Pradar.isClusterTest()) {
throw e;
}
} catch (Throwable e) {
LOGGER.error("", e);
if (Pradar.isClusterTest()) {
throw new PressureMeasureError(e);
}
}
}
use of com.pamirs.attach.plugin.apache.rocketmq.common.MQTraceBean in project LinkAgent by shulieTech.
the class MQSendMessageTraceLog method sendMessageBefore.
public static void sendMessageBefore(MQTraceContext ctx) {
if (ctx == null || ctx.getTraceBeans() == null || ctx.getTraceBeans().size() == 0 || ctx.getTraceBeans().get(0) == null) {
return;
}
String serviceName = PradarLogUtils.getService(ctx);
String methodName = PradarLogUtils.getMethod(ctx);
Pradar.startClientInvoke(serviceName, methodName);
MQTraceBean traceBean = ctx.getTraceBeans().get(0);
traceBean.setContext(Pradar.getInvokeContextMap());
// 如果使用消息头模式传递压测标,则需要显示从消费发送端设置
// traceBean.setClusterTest(String.valueOf(Pradar.isClusterTest()));
Pradar.requestSize(traceBean.getBodyLength());
Pradar.remoteIp(traceBean.getStoreHost());
Pradar.remotePort(traceBean.getPort());
Pradar.middlewareName(RocketmqConstants.PLUGIN_NAME);
// ThreadLocal 中)
if (ctx.isAsync()) {
ctx.setRpcContextInner(Pradar.getInvokeContextMap());
Pradar.popInvokeContext();
}
}
Aggregations