我一直在寻找使用RabbitMQ进行跨服务消息传递。我已经能够使用Spring注释来配置Exchange/Queues/DLX等。示例(简单)队列监听:通过RabbitMQ维护correlationId
@RabbitListener(queues = RabbitMessageType.QueueNames.SMS_NOTIFICATIONS)
public void receive1(Message message) throws Exception {
RabbitMessageDto messageDto = OBJECT_MAPPER.readValue(message.getBody(), RabbitMessageDto.class);
SmsNotificationDto payload = OBJECT_MAPPER.readValue(messageDto.getPayload(), SmsNotificationDto.class);
log.info(payload.getMessage());
}
我使用的是弹簧云侦探产生correlationIds/traceIds,这是使用HTTP请求时跟其他服务保存下来,使我们能够在整个跟踪给定ID我们各种微服务的日志。
虽然我可以得到当前traceId并插入到我的DTO:
@Autowired
private Tracer tracer;
private RabbitMessageDto createRabbitMessageWithPayload(String messageType,
String messageVersion,
Object payload) {
return new RabbitMessageDto.Builder()
.withTraceId(tracer.getCurrentSpan().getTraceId())
.withDtoName(messageType)
.withDtoVersion(messageVersion)
.withPayload(payload)
.build();
}
我不能找到一种方法来设置接收方法的traceId。
谷歌搜索不断给我带来春季云流和春季云流首发 - 兔;文档似乎表明它可能会自动插入/设置traceIds,但我对Spring-Cloud-Stream完全不熟悉,并且没有找到特别有用的文档。
所以,我很想回答以下几个:
- 使用SpanAdjuster或示踪等;我可以根据我的DTO中的值设置traceId吗?
- 使用spring-cloud-stream,我可以自动插入/检索traceId,我将从哪里启动?