From bd622823ba3b1e948efcbf30948cbf5af6a18908 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Sat, 5 Apr 2025 20:33:19 +0300 Subject: [PATCH] docs: add ambassador sequence diagram --- ambassador/README.md | 4 ++++ ambassador/etc/ambassador-sequence-diagram.png | Bin 0 -> 28599 bytes 2 files changed, 4 insertions(+) create mode 100644 ambassador/etc/ambassador-sequence-diagram.png diff --git a/ambassador/README.md b/ambassador/README.md index 6f87afae1..fa08223fe 100644 --- a/ambassador/README.md +++ b/ambassador/README.md @@ -33,6 +33,10 @@ Microsoft documentation states > An ambassador service can be thought of as an out-of-process proxy which is co-located with the client. This pattern can be useful for offloading common client connectivity tasks such as monitoring, logging, routing, security (such as TLS), and resiliency patterns in a language agnostic way. It is often used with legacy applications, or other applications that are difficult to modify, in order to extend their networking capabilities. It can also enable a specialized team to implement those features. +Sequence diagram + +![Ambassador sequence diagram](./etc/ambassador-sequence-diagram.png "Ambassador sequence diagram") + ## Programmatic Example of Ambassador Pattern in Java In this example of the Ambassador Pattern in Java, we demonstrate how to implement latency checks, logging, and retry mechanisms to improve system reliability. diff --git a/ambassador/etc/ambassador-sequence-diagram.png b/ambassador/etc/ambassador-sequence-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..71e6a947c5dd929dca53a8eb2ba230051f45bef0 GIT binary patch literal 28599 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

bZ=~`*l561*pvml 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 Ag#Z8m literal 0 HcmV?d00001