SkyWalking自定义插件(Spring RabbitMQ)

SkyWalking自定义插件(Spring RabbitMQ)

官方RabbitMQ插件问题

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

具体分析过程
  1. 官方插件源码的拦截点是原生Consumer的handleDelivery方法,源码如下:
    SkyWalking自定义插件(Spring RabbitMQ)_第1张图片
  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

你可能感兴趣的:(应用监控,rabbitmq,skywalking,skywalking插件,skywalking源码)