我一直在尋找使用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,我將從哪裏啓動?