pinpoint-plugin
pinpoint-plugin copied to clipboard
question about Scope
请问一下 @Scope(value = RabbitMQConstants.RABBITMQ_SCOPE) 这个注解的具体作用是什么?
其实我也不太清楚,要等官方的文档来解答,他们说正在编写插件开发文档
我个人理解是用于两个方面:
一是重复跟踪问题
比如某个类有方法A和方法B(这两个方法都写了拦截器进行跟踪),方法A调用了方法B 如果外部调用方法B,会产生一次跟踪,如果外部调用方法A,会产生两次跟踪 addScopedInterceptor方法可以将这两个方法作为一个作用域描述,这样就不会产生两次跟踪了
二是用来传递某些自定义信息
标记到同一个作用域之后,就可以传递共享数据了,例如 methodA:
MyAttachment attachment = (MyAttachment)scope.getCurrentInvocation().getOrCreateAttachment(ATTACHMENT_FACTORY);
attachment.setTrace(shouldTrace);
methodB:
scope.getCurrentInvocation().getAttachment()
理解比我深刻.
另外,能否帮忙看下一个问题,仿照你的插件写的
https://github.com/naver/pinpoint/issues/1412#issuecomment-171650121
暂时可以先不考虑消息队列的插件了,只做发布端的就可以了,pinpoint团队回复说,目前的模式不支持一个发布者多个消费者的模型,因为SpanID是在发布端生成的,多个消费者的情况每次消费都会覆盖上一次的记录。如果让消费端生成SpanID,可能会引起id碰撞,等他们出新的模型就可以了。