in rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/support/RocketMQUtil.java [258:285]
public static DefaultMQProducer createDefaultMQProducer(String groupName, String ak, String sk,
boolean isEnableMsgTrace, String customizedTraceTopic) {
boolean isEnableAcl = StringUtils.hasLength(ak) && StringUtils.hasLength(sk);
DefaultMQProducer producer;
if (isEnableAcl) {
producer = new TransactionMQProducer(groupName, new AclClientRPCHook(new SessionCredentials(ak, sk)));
producer.setVipChannelEnabled(false);
} else {
producer = new TransactionMQProducer(groupName);
}
if (isEnableMsgTrace) {
try {
AsyncTraceDispatcher dispatcher = new AsyncTraceDispatcher(groupName, TraceDispatcher.Type.PRODUCE, customizedTraceTopic, isEnableAcl ? new AclClientRPCHook(new SessionCredentials(ak, sk)) : null);
dispatcher.setHostProducer(producer.getDefaultMQProducerImpl());
Field field = DefaultMQProducer.class.getDeclaredField("traceDispatcher");
field.setAccessible(true);
field.set(producer, dispatcher);
producer.getDefaultMQProducerImpl().registerSendMessageHook(
new SendMessageTraceHookImpl(dispatcher));
} catch (Throwable e) {
log.error("system trace hook init failed ,maybe can't send msg trace data");
}
}
return producer;
}