Ich habe mit RabbitMQ für cross-Service-Messaging gesucht. Ich war in der Lage, unsere Exchange/Queues/DLX usw. mithilfe von Spring-Anmerkungen zu konfigurieren. Beispiel (einfache) Warteschlange Hörer:Pflegen Sie correlationId durch RabbitMQ
@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());
}
Ich bin mit Feder-cloud-Schnüffler correlationIds/traceIds zu erzeugen, die beibehalten werden, wenn HTTP-Anfragen mit anderen Diensten zu sprechen, so dass wir die angegebenen ID überall verfolgen die Protokolle unserer verschiedenen Microservices.
Während ich die aktuelle traceid bekommen kann und setzen Sie das in meine 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();
}
ich nicht einen Weg finden, können die traceid im Empfangsverfahren einzustellen.
Googling bringt mich zu Spring-Cloud-Stream und Spring-Cloud-Stream-Starter-Kaninchen; Die Dokumentation scheint darauf hinzuweisen, dass es möglich ist, traceIds automatisch einzufügen/zu setzen, aber ich kenne Spring-Cloud-Stream überhaupt nicht und finde die Dokumentation nicht besonders hilfreich.
So würde ich Antworten Liebe auf die folgenden:
- Mit SpanAdjuster oder Tracer etc; Kann ich die TraceId basierend auf dem Wert in meinem DTO festlegen?
- Mit Spring-Cloud-Stream, kann ich die traceId automatisch einfügen/abrufen, und wo würde ich anfangen?