带有Java SQS JMS连接器的AWS Xray
作者:互联网
我们最近开始在我们的Spring项目中添加AWS Xray,并成功利用AWSXRayServletFilter创建Segments来覆盖我们的客户请求.
现在我们也开始添加AWS SDK Instrumentor来跟踪我们的AWS服务用法.其中一个是SQS,我们使用amazon-sqs-java-messaging-lib来利用JMS接收SQS消息.这是我们面临一些麻烦的地方.
每次我们的应用程序尝试获取消息时,TracingHandler都会尝试创建SubSegment并因为没有已创建的Segment而失败.我们如何在Segment中包装这些请求?消息本身是否不包含将信息从将消息推送到队列的资源链接在一起的信息?
如果缺少一个Segment,或者至少从父跟踪ID中获取,我原本期望可以使用Context Missing策略创建一个Segment,但我没有看到他们最新的docs中包含的信息.
解决方法:
这是一个已在官方论坛上讨论过的已知问题.这里有几个链接:
https://forums.aws.amazon.com/thread.jspa?threadID=252012&tstart=0
https://forums.aws.amazon.com/thread.jspa?threadID=257258&tstart=25
Every time our application attempts to get messages the TracingHandler attempts to create a SubSegment and fails because there is no Segment already created. How can we wrap these requests in a Segment? Wouldn’t that information be contained in the message itself to link segments together from the resource that pushed the message to the queue?
细分信息保存在ThreadLocal中.如果您在单独的线程中运行某些东西,则必须手动创建一个段,因此在创建子段时您将拥有所需的ThreadLocal数据. SQS消息中没有什么特别的,甚至SQS服务本身也与X射线服务有关.它只使用SQS客户端使X-Ray推断通过使用处理程序跟踪ThreadLocal数据来调用SQS.
I would have expected there to Context Missing strategy available to create a Segment if one is missing or at least pick up from a parent trace id but I don’t see that information contained within their latest docs.
这是我的功能要求之一.查看带有它的线程以及官方答案以及我在尝试自己实现这样的上下文缺失策略时发现的当前限制.
https://forums.aws.amazon.com/thread.jspa?threadID=252012&tstart=0
标签:java,amazon-sqs,aws-xray 来源: https://codeday.me/bug/20190627/1306380.html