You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Micrometer与Spring Boot 3推送日志至RabbitMQ?配置后无消息

场景一:将追踪数据通过RabbitMQ推送至Zipkin

1. 调整依赖

移除直接HTTP发送的Zipkin Exporter,添加OpenTelemetry的RabbitMQ Exporter依赖:

<!-- 移除原有HTTP Zipkin Exporter -->
<!--
<dependency>
    <groupId>io.opentelemetry</groupId>
    <artifactId>opentelemetry-exporter-zipkin</artifactId>
</dependency>
-->

<!-- 添加RabbitMQ Exporter依赖(版本适配Spring Boot 3.0.2即可) -->
<dependency>
    <groupId>io.opentelemetry</groupId>
    <artifactId>opentelemetry-exporter-rabbitmq</artifactId>
    <version>1.29.0</version>
</dependency>

2. 修改配置文件

注释掉HTTP直连Zipkin的配置,添加OpenTelemetry RabbitMQ传输配置:

management.tracing.sampling.probability=1.0
# 注释掉原HTTP Zipkin端点
# management.zipkin.tracing.endpoint=http://localhost:9411/api/v2/spans
management.metrics.distribution.percentiles-histogram.http.server.requests=true
logging.pattern.level=%5p [${spring.application.name:},%X{traceId:-},%X{spanId:-}]

# 保留原有RabbitMQ连接配置
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

# OpenTelemetry RabbitMQ Exporter配置
management.opentelemetry.exporter.rabbitmq.host=localhost
management.opentelemetry.exporter.rabbitmq.port=5672
management.opentelemetry.exporter.rabbitmq.username=guest
management.opentelemetry.exporter.rabbitmq.password=guest
management.opentelemetry.exporter.rabbitmq.queue=zipkin # 队列名需和Zipkin消费配置一致

3. 配置Zipkin消费RabbitMQ数据

启动Zipkin时指定RabbitMQ消费参数:

java -jar zipkin-server-2.24.0-exec.jar --zipkin.collector.rabbitmq.addresses=localhost:5672 --zipkin.collector.rabbitmq.username=guest --zipkin.collector.rabbitmq.password=guest

场景二:将带TraceId的应用日志推送至RabbitMQ

以Logback日志框架为例:

1. 添加Logback配置文件

在src/main/resources下创建logback-spring.xml,配置RabbitMQ Appender:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>

    <!-- RabbitMQ日志输出Appender -->
    <appender name="RABBITMQ" class="org.springframework.amqp.rabbit.logback.AmqpAppender">
        <layout>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %5p [${spring.application.name:},%X{traceId:-},%X{spanId:-}] %m%n</pattern>
        </layout>
        <host>${spring.rabbitmq.host}</host>
        <port>${spring.rabbitmq.port}</port>
        <username>${spring.rabbitmq.username}</username>
        <password>${spring.rabbitmq.password}</password>
        <exchangeName>logs-exchange</exchangeName>
        <exchangeType>topic</exchangeType>
        <routingKeyPattern>app.logs.${spring.application.name}</routingKeyPattern>
        <declareExchange>true</declareExchange>
        <queueName>logs-queue</queueName>
        <declareQueue>true</declareQueue>
        <bindingRoutingKey>app.logs.#</bindingRoutingKey>
        <durable>true</durable>
        <autoDelete>false</autoDelete>
    </appender>

    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="RABBITMQ"/>
    </root>
</configuration>

2. 验证

重启应用后调用接口,RabbitMQ中会生成配置的logs-queue队列,同时收到应用日志消息。


内容的提问来源于stack exchange,提问作者Mohamed Aymen Charrada

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 15:55:17