我有一个带有RabbitMQ事件总线的系统设置和使用spring cloud stream的应用程序。为了帮助跟踪系统中的消息,我还使用了spring-cloud-sleuth。
我的问题涉及到errorChannel流/绑定。我没有在我的配置中使用error绑定(指的是this)。相反,我有一个流设置来侦听errorChannel,它向消息添加一个额外的报头,然后将其发送到错误目的地。它看起来类似于下面(用Groovy编写的):
IntegrationFlows
.from('errorChannel')
.log()
.handle(MessagingException, {e, h ->
def message = MessageBuilder.withPayload(e).copyHeaders(h).setHeader('name', 'myApp').build()
errorSource.channel().send(message)
.channel('nullChannel')
.get()其中errorSource的通道被声明为@Output。
日志行输出类似以下内容:
INFO [myApp,1234,4321,false] LoggingHandler: ErrorMessage [...]
但是,当我从错误目的地收到消息时,X-B3-ParentSpanId头中的值与上述日志消息中的span id (4321值)或源应用程序中记录的任何其他span id不匹配。
我可以看到匹配的唯一方法是,如果我将org.springframework.cloud的日志记录提升到调试,即使这样,它也是来自TracingChannelInterceptor的日志行(尽管该实例看起来像是属于errorChannel的拦截器列表,所以我觉得我已经接近了)。我不想让DEBUG开着,因为它显然会变得很嘈杂。
在这之后,问题是,我是否可以在错误通道或绑定本身上设置任何日志记录,以输出一些具有与X-B3-ParentSpanId标头中所放内容匹配的跨度id的日志行?这样做的目的是获取span id并保存它,以便稍后在检查日志时可以使用它直接转到源应用程序。
我们还保存了跟踪id,并且我看到结果很好(并且与源应用程序的跟踪id相匹配),但是将跟踪id和span id放在一起会很有帮助。
发布于 2018-06-09 05:45:36
MessagingException有一个failedMessage属性;您应该可以在它的标头中找到所需的内容。
https://stackoverflow.com/questions/50768453
复制相似问题