spring-boot - Sleuth Tracing 不适用于 Spring JMS
问题描述
我有 2 项服务,我正在尝试添加与侦探的日志相关性。
第一个服务: spring-boot 版本:1.5.9.RELEASE
第二个服务: spring-boot 版本:1.5.3.RELEASE
第一个服务向第二个服务发送 2 条消息,一条通过 HTTP,一条通过 JMS
public void sendHeartbeatCommand() {
Long sendTime = System.currentTimeMillis();
Heartbeat newHeartbeat = new Heartbeat();
newHeartbeat.setHostname(hostname);
newHeartbeat.setStartedAt(serverStartup);
newHeartbeat.setLastSeen(sendTime);
newHeartbeat.setServerLoading(serverLoading);
newHeartbeat.setBuildVersion(serverBuildVersion);
newHeartbeat.setTemplateVersion(templateVersion);
newHeartbeat.setSpVersion(serverServicePackVersion);
newHeartbeat.setHostType(HostType.NAAS);
serverLoading = false;
wlmJmsTemplate.convertAndSend("heartbeat.queue", newHeartbeat);
logger.info("Sending heartbeat command to WLM " + sendTime);
}
我记录了这个:
2020-09-15 14:12:03.625 [74171361b0a802ca/74171361b0a802ca/NAAS] INFO [task-scheduler-9] communication.HeartBeatSender - Sending heartbeat command to WLM 1600168323386
在第二个服务中,我阅读了消息:
@JmsListener(destination = "heartbeat.queue")
public void receiveHeartbeat(TextMessage message) throws JMSException {
receive(message);
}
@JmsListener(destination = "wlm.commands")
public void receive(TextMessage message) throws JMSException {
logger.info("Received message: {}", message.getText());
try {
CommandMessage cmdMsg = buildCommandFromTextMessage(message);
findAndInvokeCommandHandler(cmdMsg);
} catch (UnresolvableMessageType umt) {
logger.error("Unable to properly parse message {}. Can't resolve message class: {}", message.getText(),
umt.getMessageType(), umt);
} catch (IOException ioe) {
logger.error("Unable to properly parse message {}", message, ioe);
}
}
但我没有看到我希望看到的日志:
2020-09-15 14:12:03.512 [//WLM] INFO [DefaultMessageListenerContainer-1] events.CommandListener - Received message: {"hostname":"israelb-lap","startedAt":1600151393441,"lastSeen":1600168323386,"serverLoading":false,"buildVersion":"$NAAS_BUILD$","templateVersion":null,"spVersion":null,"hostType":"NAAS"}
我的 log4j 文件是:
第一次服务:
<Console name="Console-Appender" target="SYSTEM_OUT">
<PatternLayout
pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{X-B3-TraceId}/%X{X-B3-SpanId}/${appName}] %-5p [%t] %C{2} - %m%n"/>
</Console>
第二项服务:
<Console name="Console-Appender" target="SYSTEM_OUT">
<PatternLayout
pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{X-B3-TraceId}/%X{X-B3-SpanId}/${appName}] %-5p [%t] %C{2} - %m%n"/>
</Console>
特性:
第一次服务:
spring.sleuth.sampler.probability=1.0
spring.sleuth.messaging.enabled = true
spring.sleuth.messaging.jms.enabled=true
第二项服务:
spring.sleuth.sampler.probability=1.0
spring.sleuth.messaging.enabled = true
spring.sleuth.messaging.jms.enabled=true
Poms:第一次服务:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>20.0</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Edgware.SR6</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
第二项服务:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>20.0</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Edgware.SR6</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
如何通过 Spring JMS 关联日志消息?我错过了什么?
更新:
我试过我们第三个服务 - 版本:2.0.1.RELEASE
服务从队列中写入和读取。无法升级版本。
写作:
public ResponseEntity<String> getWorkOrdersTest() {
logger.info("getWorkOrdersTest ");
wlmJmsTemplate.convertAndSend("israel.queue", "Sent from PGW");
return ResponseEntity.ok("PGW Test");
}
阅读:
@JmsListener(destination = "israel.queue")
public void receiveT(TextMessage message) throws JMSException {
logger.info("Received message: {}", message.getText());
}
配置:
@Bean(name ="wlmJmsTemplate")
public JmsTemplate wlmJmsTemplate() {
JmsTemplate template = new JmsTemplate();
template.setConnectionFactory(connectionFactory());
template.setMessageConverter(jacksonJmsMessageConverter());
template.setExplicitQosEnabled(true);
template.setDefaultDestinationName("israel.queue");
return template;
}
特性:
spring.sleuth.sampler.probability=1.0
spring.sleuth.messaging.enabled = true
spring.sleuth.messaging.jms.enabled=true
日志:
2020-09-16 15:04:31.312 [9ab59563855a15d9/9ab59563855a15d9/PGW] INFO [http-nio-9093-exec-7] api.WorkOrdersApiController - getWorkOrdersTest
2020-09-16 15:04:31.404 [//PGW] INFO [DefaultMessageListenerContainer-1] events.ProvisionEventsListener - Received message: "Sent from PGW"
解决方案
推荐阅读
- python - 如何使用 python 和 pandas 重命名子文件夹中的多个 .Json 文件
- swift - Swift 中的 FSCalendar 日期选择错误
- gradle - 关于“编译项目()”Gradle 任务的问题?
- jira - 如何使用 Jitterbit 作为中间件将 salesforce 连接到 jira
- javascript - 阻止 textArea 中的某个字符
- sqlite - 空列使用的 SQLite 磁盘空间?
- python - 如何将df转换为由python pandas中的索引值组成的列表字典
- python - PyTorch 梯度不会流经张量的克隆
- flutter - Flutter & Dart:管理从 Isolate 中进行的计算获得的数据的正确方法是什么?
- apache-kafka - Kafka Connect Sink Partition by recordField 在 Ticks 中