我有一个使用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
的日志记录提交到DEBUG,即使这样,它也是来自TracingChannelInterceptor
的日志行(尽管该实例看起来属于errorChannel的拦截器列表,所以我觉得我很接近)。我宁愿不要离开DEBUG,因为它显然会非常嘈杂。
毕竟,问题是我是否可以在错误通道或绑定本身上设置任何日志记录,这些日志记录会输出一些日志行,其跨度id与X-B3-ParentSpanId
标题中的内容相匹配?目的是获取该span id并保存它,以便以后可以在检查日志时使用它直接进入源应用程序。
我们也正在保存跟踪ID,我看到它很好(并匹配源应用程序的跟踪ID),但将跟踪和跨度ID放在一起会很有帮助。
答案 0 :(得分:0)
MessagingException
具有failedMessage
属性;你应该在它的标题中找到你需要的东西。