Files
docs/plantuml/messaging-sequence-left.puml

75 lines
1.6 KiB
Plaintext

@startuml Messaging Sequenzdiagramm Links
group "Backend: Request produzieren und warten"
Endpoint -> RequestReply: request(cmdW)
RequestReply -> AtomicReference : <<create>>
RequestReply <-- AtomicReference : responseRef
RequestReply -> RequestReply : responses.put(\nrequestId,\nresponseRef)
RequestReply -> Kafka: produce(cmdW)
RequestReply <-- Kafka : Ack
RequestReply -> AtomicReference : wait()
end
note over Kafka : asynchron
group "Persistence: Request konsumieren und enqueuen"
Quarkus -> Kafka: poll()
Quarkus <-- Kafka: cmdW
Quarkus -> CommandObserver: process(cmdW)
CommandObserver -> Transaction: get(txId)
CommandObserver <-- Transaction: tx
CommandObserver -> Transaction: queue(tx, cmdW)
CommandObserver <-- Transaction
Quarkus <-- CommandObserver
Kafka <-- Quarkus : Ack
end
note over Transaction : asynchron
... Persistence: Request verarbeiten und Response produzieren\n(siehe weiteres Sequenzdiagramm) ...
note over Kafka : asynchron
group "Backend: Response konsumieren und benachrichtigen"
RequestReply -> Kafka : poll()
RequestReply <-- Kafka : respW
RequestReply -> RequestReply : responses.get(requestId)
RequestReply -> AtomicReference : set(respW)
RequestReply <-- AtomicReference
RequestReply -> AtomicReference : notifyAll()
RequestReply <-- AtomicReference
end
note over RequestReply : asynchron
group "Backend: Response zu Request zurückgeben" [synchron nach 1. Block, siehe oben]
RequestReply <-- AtomicReference : wegen wait (siehe oben)
RequestReply -> AtomicReference : get()
RequestReply <-- AtomicReference : respW
Endpoint <-- RequestReply : respW
end
@enduml