SkyWalking自定义插件(Spring RabbitMQ)

本文详细介绍了由于SkyWalking官方RabbitMQ插件仅支持原生Client,不适用于使用Spring RabbitMQ Client的情况,导致的跟踪ID断链问题。通过分析官方插件源码,发现在SimpleMessageListenerContainer的executeListener方法是最佳拦截点。作者提供了自定义插件的实现,并将源码托管在码云仓库,实现了完整调用链路的跟踪。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SkyWalking自定义插件(Spring RabbitMQ)

官方RabbitMQ插件问题

skywalking官方提供的RabbitMQ插件存在缺陷,其只针对RabbitMQ官方原生Client实现扩展,但我们在项目中一般不直接使用原生Client,而是使用Spring RabitMQ Client,因Spring RabitMQ Consumer中存在跨线程操作,导致跟踪ID断链。

具体分析过程
  1. 官方插件源码的拦截点是原生Consumer的handleDelivery方法,源码如下:
    在这里插入图片描述
  2. 而Spring RabbitMQ消费者的默认实现是BlockingQueueConsumer, handleDelivery核心逻辑是把消息放到内部的BlockingQueue队列,不做真正的消费处理,因此拦截此处无法关联到消费者逻辑,源码如下
	@Override
		public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties,
				byte[] body) {
   
		...
			try {
   
				if (BlockingQueueConsumer.this.abortStarted > 0) {
   
					if (!BlockingQueueConsumer.this.queue.offer(
			
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值