Search in sources :

Example 1 with MQTraceBean

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);
        }
    }
}
Also used : PradarException(com.pamirs.pradar.exception.PradarException) HashMap(java.util.HashMap) InetSocketAddress(java.net.InetSocketAddress) ArrayList(java.util.ArrayList) MQTraceBean(com.pamirs.attach.plugin.apache.rocketmq.common.MQTraceBean) MessageExt(org.apache.rocketmq.common.message.MessageExt) MQTraceContext(com.pamirs.attach.plugin.apache.rocketmq.common.MQTraceContext) PressureMeasureError(com.pamirs.pradar.exception.PressureMeasureError)

Example 2 with MQTraceBean

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);
        }
    }
}
Also used : PradarException(com.pamirs.pradar.exception.PradarException) HashMap(java.util.HashMap) InetSocketAddress(java.net.InetSocketAddress) ArrayList(java.util.ArrayList) MQTraceBean(com.pamirs.attach.plugin.apache.rocketmq.common.MQTraceBean) MessageExt(org.apache.rocketmq.common.message.MessageExt) MQTraceContext(com.pamirs.attach.plugin.apache.rocketmq.common.MQTraceContext) PressureMeasureError(com.pamirs.pradar.exception.PressureMeasureError)

Example 3 with MQTraceBean

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);
        }
    }
}
Also used : MQTraceContext(com.pamirs.attach.plugin.apache.rocketmq.common.MQTraceContext) PradarException(com.pamirs.pradar.exception.PradarException) PressureMeasureError(com.pamirs.pradar.exception.PressureMeasureError) MQTraceBean(com.pamirs.attach.plugin.apache.rocketmq.common.MQTraceBean)

Example 4 with MQTraceBean

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);
        }
    }
}
Also used : Message(org.apache.rocketmq.common.message.Message) PradarException(com.pamirs.pradar.exception.PradarException) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) MQTraceBean(com.pamirs.attach.plugin.apache.rocketmq.common.MQTraceBean) MQTraceContext(com.pamirs.attach.plugin.apache.rocketmq.common.MQTraceContext) PressureMeasureError(com.pamirs.pradar.exception.PressureMeasureError) HashMap(java.util.HashMap) Map(java.util.Map)

Example 5 with MQTraceBean

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();
    }
}
Also used : MQTraceBean(com.pamirs.attach.plugin.apache.rocketmq.common.MQTraceBean)

Aggregations

MQTraceBean (com.pamirs.attach.plugin.apache.rocketmq.common.MQTraceBean)7 MQTraceContext (com.pamirs.attach.plugin.apache.rocketmq.common.MQTraceContext)4 PradarException (com.pamirs.pradar.exception.PradarException)4 PressureMeasureError (com.pamirs.pradar.exception.PressureMeasureError)4 ArrayList (java.util.ArrayList)3 HashMap (java.util.HashMap)3 InetSocketAddress (java.net.InetSocketAddress)2 MessageExt (org.apache.rocketmq.common.message.MessageExt)2 Map (java.util.Map)1 Message (org.apache.rocketmq.common.message.Message)1