首页 > 解决方案 > 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"

标签: spring-bootlog4j2spring-cloud-sleuth

解决方案


推荐阅读