Showing preview only (690K chars total). Download the full file or copy to clipboard to get everything.
Repository: amigoscode/microservices
Branch: main
Commit: 12dcd5d4758b
Files: 76
Total size: 655.9 KB
Directory structure:
gitextract_8gj87pry/
├── .gitignore
├── README.md
├── amqp/
│ ├── pom.xml
│ └── src/
│ └── main/
│ └── java/
│ └── com/
│ └── amigoscode/
│ └── amqp/
│ ├── RabbitMQConfig.java
│ └── RabbitMQMessageProducer.java
├── apigw/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── amigoscode/
│ │ └── apigw/
│ │ └── ApiGWApplication.java
│ └── resources/
│ ├── application-docker.yml
│ ├── application.yml
│ └── banner.txt
├── clients/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── amigoscode/
│ │ └── clients/
│ │ ├── fraud/
│ │ │ ├── FraudCheckResponse.java
│ │ │ └── FraudClient.java
│ │ └── notification/
│ │ ├── NotificationClient.java
│ │ └── NotificationRequest.java
│ └── resources/
│ ├── clients-default.properties
│ ├── clients-docker.properties
│ └── clients-kube.properties
├── customer/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── amigoscode/
│ │ └── customer/
│ │ ├── Customer.java
│ │ ├── CustomerApplication.java
│ │ ├── CustomerController.java
│ │ ├── CustomerRegistrationRequest.java
│ │ ├── CustomerRepository.java
│ │ └── CustomerService.java
│ └── resources/
│ ├── application-docker.yml
│ ├── application-kube.yml
│ ├── application.yml
│ └── banner.txt
├── diagrams.drawio
├── docker-compose.yml
├── eureka-server/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── amigoscode/
│ │ └── eurekaserver/
│ │ └── EurekaServerApplication.java
│ └── resources/
│ ├── application-docker.yml
│ ├── application.yml
│ └── banner.txt
├── fraud/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── amigoscode/
│ │ └── fraud/
│ │ ├── FraudApplication.java
│ │ ├── FraudCheckHistory.java
│ │ ├── FraudCheckHistoryRepository.java
│ │ ├── FraudCheckService.java
│ │ └── FraudController.java
│ └── resources/
│ ├── application-docker.yml
│ ├── application-kube.yml
│ ├── application.yml
│ └── banner.txt
├── k8s/
│ └── minikube/
│ ├── bootstrap/
│ │ ├── postgres/
│ │ │ ├── configmap.yml
│ │ │ ├── service.yml
│ │ │ ├── statefulset.yml
│ │ │ └── volume.yml
│ │ ├── rabbitmq/
│ │ │ ├── README.md
│ │ │ ├── configmap.yaml
│ │ │ ├── rbac.yaml
│ │ │ ├── services.yaml
│ │ │ └── statefulset.yaml
│ │ └── zipkin/
│ │ ├── service.yml
│ │ └── statefulset.yml
│ └── services/
│ ├── customer/
│ │ ├── deployment.yml
│ │ └── service.yml
│ ├── fraud/
│ │ ├── deployment.yml
│ │ └── service.yml
│ └── notification/
│ ├── deployment.yml
│ └── service.yml
├── notification/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── amigoscode/
│ │ └── notification/
│ │ ├── Notification.java
│ │ ├── NotificationApplication.java
│ │ ├── NotificationConfig.java
│ │ ├── NotificationController.java
│ │ ├── NotificationRepository.java
│ │ ├── NotificationService.java
│ │ └── rabbitmq/
│ │ └── NotificationConsumer.java
│ └── resources/
│ ├── application-docker.yml
│ ├── application-kube.yml
│ ├── application.yml
│ └── banner.txt
└── pom.xml
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
HELP.md
target/
**/target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
.idea/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
================================================
FILE: README.md
================================================
# Microservices

================================================
FILE: amqp/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>amigosservices</artifactId>
<groupId>com.amigoscode</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
<artifactId>amqp</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
</dependencies>
</project>
================================================
FILE: amqp/src/main/java/com/amigoscode/amqp/RabbitMQConfig.java
================================================
package com.amigoscode.amqp;
import lombok.AllArgsConstructor;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@AllArgsConstructor
public class RabbitMQConfig {
private final ConnectionFactory connectionFactory;
@Bean
public AmqpTemplate amqpTemplate() {
RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
rabbitTemplate.setMessageConverter(jacksonConverter());
return rabbitTemplate;
}
@Bean
public SimpleRabbitListenerContainerFactory simpleRabbitListenerContainerFactory() {
SimpleRabbitListenerContainerFactory factory =
new SimpleRabbitListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setMessageConverter(jacksonConverter());
return factory;
}
@Bean
public MessageConverter jacksonConverter() {
MessageConverter jackson2JsonMessageConverter =
new Jackson2JsonMessageConverter();
return jackson2JsonMessageConverter;
}
}
================================================
FILE: amqp/src/main/java/com/amigoscode/amqp/RabbitMQMessageProducer.java
================================================
package com.amigoscode.amqp;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.stereotype.Component;
@Component
@Slf4j
@AllArgsConstructor
public class RabbitMQMessageProducer {
private final AmqpTemplate amqpTemplate;
public void publish(Object payload, String exchange, String routingKey) {
log.info("Publishing to {} using routingKey {}. Payload: {}", exchange, routingKey, payload);
amqpTemplate.convertAndSend(exchange, routingKey, payload);
log.info("Published to {} using routingKey {}. Payload: {}", exchange, routingKey, payload);
}
}
================================================
FILE: apigw/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>amigosservices</artifactId>
<groupId>com.amigoscode</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
<artifactId>apigw</artifactId>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>build-docker-image</id>
<build>
<plugins>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</profile>
</profiles>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>
</dependencies>
</project>
================================================
FILE: apigw/src/main/java/com/amigoscode/apigw/ApiGWApplication.java
================================================
package com.amigoscode.apigw;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@EnableEurekaClient
@SpringBootApplication
public class ApiGWApplication {
public static void main(String[] args) {
SpringApplication.run(ApiGWApplication.class, args);
}
}
================================================
FILE: apigw/src/main/resources/application-docker.yml
================================================
server:
port: 8083
spring:
application:
name: api-gateway
zipkin:
base-url: http://zipkin:9411
cloud:
gateway:
routes:
- id: customer
uri: lb://CUSTOMER
predicates:
- Path=/api/v1/customers/**
eureka:
client:
service-url:
defaultZone: http://eureka-server:8761/eureka
fetch-registry: true
register-with-eureka: true
================================================
FILE: apigw/src/main/resources/application.yml
================================================
server:
port: 8083
spring:
application:
name: api-gateway
zipkin:
base-url: http://localhost:9411
cloud:
gateway:
routes:
- id: customer
uri: lb://CUSTOMER
predicates:
- Path=/api/v1/customers/**
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka
fetch-registry: true
register-with-eureka: true
================================================
FILE: apigw/src/main/resources/banner.txt
================================================
,---. ,------. ,--. ,----. ,--. ,--.
/ O \ | .--. ' | | ' .-./ | | | |
| .-. | | '--' | | | | | .---. | |.'.| |
| | | | | | --' | | ' '--' | | ,'. |
`--' `--' `--' `--' `------' '--' '--'
${application.title} ${application.version}
Powered by Spring Boot ${spring-boot.version}
================================================
FILE: clients/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>amigosservices</artifactId>
<groupId>com.amigoscode</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
<artifactId>clients</artifactId>
</project>
================================================
FILE: clients/src/main/java/com/amigoscode/clients/fraud/FraudCheckResponse.java
================================================
package com.amigoscode.clients.fraud;
public record FraudCheckResponse(Boolean isFraudster) {
}
================================================
FILE: clients/src/main/java/com/amigoscode/clients/fraud/FraudClient.java
================================================
package com.amigoscode.clients.fraud;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@FeignClient(
name = "fraud",
url = "${clients.fraud.url}"
)
public interface FraudClient {
@GetMapping(path = "api/v1/fraud-check/{customerId}")
FraudCheckResponse isFraudster(
@PathVariable("customerId") Integer customerId);
}
================================================
FILE: clients/src/main/java/com/amigoscode/clients/notification/NotificationClient.java
================================================
package com.amigoscode.clients.notification;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
@FeignClient(
name = "notification",
url = "${clients.notification.url}"
)
public interface NotificationClient {
@PostMapping("api/v1/notification")
void sendNotification(NotificationRequest notificationRequest);
}
================================================
FILE: clients/src/main/java/com/amigoscode/clients/notification/NotificationRequest.java
================================================
package com.amigoscode.clients.notification;
public record NotificationRequest(
Integer toCustomerId,
String toCustomerName,
String message
) {
}
================================================
FILE: clients/src/main/resources/clients-default.properties
================================================
clients.customer.url=http://localhost:8080
clients.fraud.url=http://localhost:8081
clients.notification.url=http://localhost:8082
================================================
FILE: clients/src/main/resources/clients-docker.properties
================================================
clients.customer.url=http://customer:8080
clients.fraud.url=http://fraud:8081
clients.notification.url=http://notification:8082
================================================
FILE: clients/src/main/resources/clients-kube.properties
================================================
clients.customer.url=http://customer:8080
clients.fraud.url=http://fraud:8081
clients.notification.url=http://notification:8082
================================================
FILE: customer/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>com.amigoscode</groupId>
<artifactId>amigosservices</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
<artifactId>customer</artifactId>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>build-docker-image</id>
<build>
<plugins>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</profile>
</profiles>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>com.amigoscode</groupId>
<artifactId>amqp</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.amigoscode</groupId>
<artifactId>clients</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
================================================
FILE: customer/src/main/java/com/amigoscode/customer/Customer.java
================================================
package com.amigoscode.customer;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.GenerationType;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Entity
public class Customer {
@Id
@SequenceGenerator(
name = "customer_id_sequence",
sequenceName = "customer_id_sequence"
)
@GeneratedValue(
strategy = GenerationType.SEQUENCE,
generator = "customer_id_sequence"
)
private Integer id;
private String firstName;
private String lastName;
private String email;
}
================================================
FILE: customer/src/main/java/com/amigoscode/customer/CustomerApplication.java
================================================
package com.amigoscode.customer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.annotation.PropertySources;
@SpringBootApplication(
scanBasePackages = {
"com.amigoscode.customer",
"com.amigoscode.amqp",
}
)
@EnableEurekaClient
@EnableFeignClients(
basePackages = "com.amigoscode.clients"
)
@PropertySources({
@PropertySource("classpath:clients-${spring.profiles.active}.properties")
})
public class CustomerApplication {
public static void main(String[] args) {
SpringApplication.run(CustomerApplication.class, args);
}
}
================================================
FILE: customer/src/main/java/com/amigoscode/customer/CustomerController.java
================================================
package com.amigoscode.customer;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
@RequestMapping("api/v1/customers")
@AllArgsConstructor
public class CustomerController {
private final CustomerService customerService;
@PostMapping
public void registerCustomer(@RequestBody CustomerRegistrationRequest customerRegistrationRequest) {
log.info("new customer registration {}", customerRegistrationRequest);
customerService.registerCustomer(customerRegistrationRequest);
}
}
================================================
FILE: customer/src/main/java/com/amigoscode/customer/CustomerRegistrationRequest.java
================================================
package com.amigoscode.customer;
public record CustomerRegistrationRequest(
String firstName,
String lastName,
String email) {
}
================================================
FILE: customer/src/main/java/com/amigoscode/customer/CustomerRepository.java
================================================
package com.amigoscode.customer;
import org.springframework.data.jpa.repository.JpaRepository;
public interface CustomerRepository extends JpaRepository<Customer, Integer> {
}
================================================
FILE: customer/src/main/java/com/amigoscode/customer/CustomerService.java
================================================
package com.amigoscode.customer;
import com.amigoscode.amqp.RabbitMQMessageProducer;
import com.amigoscode.clients.fraud.FraudCheckResponse;
import com.amigoscode.clients.fraud.FraudClient;
import com.amigoscode.clients.notification.NotificationClient;
import com.amigoscode.clients.notification.NotificationRequest;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
@Service
@AllArgsConstructor
public class CustomerService {
private final CustomerRepository customerRepository;
private final FraudClient fraudClient;
private final RabbitMQMessageProducer rabbitMQMessageProducer;
public void registerCustomer(CustomerRegistrationRequest request) {
Customer customer = Customer.builder()
.firstName(request.firstName())
.lastName(request.lastName())
.email(request.email())
.build();
// todo: check if email valid
// todo: check if email not taken
customerRepository.saveAndFlush(customer);
FraudCheckResponse fraudCheckResponse =
fraudClient.isFraudster(customer.getId());
if (fraudCheckResponse.isFraudster()) {
throw new IllegalStateException("fraudster");
}
NotificationRequest notificationRequest = new NotificationRequest(
customer.getId(),
customer.getEmail(),
String.format("Hi %s, welcome to Amigoscode...",
customer.getFirstName())
);
rabbitMQMessageProducer.publish(
notificationRequest,
"internal.exchange",
"internal.notification.routing-key"
);
}
}
================================================
FILE: customer/src/main/resources/application-docker.yml
================================================
server:
port: 8080
spring:
application:
name: customer
datasource:
password: password
url: jdbc:postgresql://postgres:5432/customer
username: amigoscode
jpa:
hibernate:
ddl-auto: create-drop
properties:
hibernate:
dialect: org.hibernate.dialect.PostgreSQLDialect
format_sql: true
show-sql: true
zipkin:
base-url: http://zipkin:9411
rabbitmq:
addresses: rabbitmq:5672
eureka:
client:
service-url:
defaultZone: http://eureka-server:8761/eureka
fetch-registry: true
register-with-eureka: true
enabled: false
================================================
FILE: customer/src/main/resources/application-kube.yml
================================================
server:
port: 8080
spring:
application:
name: customer
datasource:
password: password
url: jdbc:postgresql://postgres:5432/customer
username: amigoscode
jpa:
hibernate:
ddl-auto: create-drop
properties:
hibernate:
dialect: org.hibernate.dialect.PostgreSQLDialect
format_sql: true
show-sql: true
zipkin:
base-url: http://zipkin:9411
rabbitmq:
addresses: rabbitmq:5672
eureka:
client:
service-url:
defaultZone: http://eureka-server:8761/eureka
fetch-registry: true
register-with-eureka: true
enabled: false
================================================
FILE: customer/src/main/resources/application.yml
================================================
server:
port: 8080
spring:
application:
name: customer
datasource:
password: password
url: jdbc:postgresql://localhost:5432/customer
username: amigoscode
jpa:
hibernate:
ddl-auto: create-drop
properties:
hibernate:
dialect: org.hibernate.dialect.PostgreSQLDialect
format_sql: true
show-sql: true
zipkin:
base-url: http://localhost:9411
rabbitmq:
addresses: localhost:5672
profiles:
active: default
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka
fetch-registry: true
register-with-eureka: true
enabled: true
================================================
FILE: customer/src/main/resources/banner.txt
================================================
,-----. ,--.
' .--./ ,--.,--. ,---. ,-' '-. ,---. ,--,--,--. ,---. ,--.--.
| | | || | ( .-' '-. .-' | .-. | | | | .-. : | .--'
' '--'\ ' '' ' .-' `) | | ' '-' ' | | | | \ --. | |
`-----' `----' `----' `--' `---' `--`--`--' `----' `--'
================================================
FILE: diagrams.drawio
================================================
<mxfile host="65bd71144e">
<diagram id="J-hNA5ClU3yTLYx-0fgb" name="Main">
<mxGraphModel dx="2909" dy="1049" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="76" value="" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1;fillColor=none;strokeWidth=2;dashed=1;" parent="1" vertex="1">
<mxGeometry x="-270" y="4" width="999" height="750" as="geometry"/>
</mxCell>
<mxCell id="17" value="" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1;fillColor=none;strokeWidth=2;dashed=1;" parent="1" vertex="1">
<mxGeometry x="-150" y="40" width="817" height="480" as="geometry"/>
</mxCell>
<mxCell id="69" style="edgeStyle=none;shape=link;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;startArrow=none;startFill=0;endArrow=none;endFill=0;strokeWidth=1;" parent="1" source="106" target="8" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="478" y="379" as="sourcePoint"/>
</mxGeometry>
</mxCell>
<mxCell id="10" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;strokeWidth=3;fillColor=#1ba1e2;strokeColor=#006EAF;" parent="1" source="3" target="107" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="277" y="305" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="34" value="Async<br>Send Notifications" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="10" vertex="1" connectable="0">
<mxGeometry x="-0.1732" y="-2" relative="1" as="geometry">
<mxPoint x="17" y="-8" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="24" style="edgeStyle=none;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;startArrow=classic;startFill=1;fillColor=#1ba1e2;strokeColor=#006EAF;strokeWidth=3;" parent="1" source="3" target="5" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="33" value="Internal Communication" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="24" vertex="1" connectable="0">
<mxGeometry x="0.1091" relative="1" as="geometry">
<mxPoint y="16" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="68" style="edgeStyle=none;html=1;exitX=1;exitY=0.75;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;startArrow=none;startFill=0;endArrow=none;endFill=0;strokeWidth=1;shape=link;" parent="1" source="3" target="6" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="3" value="Customer" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="20" y="390" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="23" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fillColor=#1ba1e2;strokeColor=#006EAF;strokeWidth=3;" parent="1" source="5" target="107" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="277" y="275" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="56" value="Async <br>Send Notifications" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="23" vertex="1" connectable="0">
<mxGeometry x="0.052" y="-2" relative="1" as="geometry">
<mxPoint as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="70" style="edgeStyle=none;shape=link;html=1;exitX=1;exitY=0.25;exitDx=0;exitDy=0;startArrow=none;startFill=0;endArrow=none;endFill=0;strokeWidth=1;" parent="1" source="5" target="7" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="5" value="Fraud" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="20" y="110" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="6" value="" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" parent="1" vertex="1">
<mxGeometry x="260.62" y="394" width="60" height="80" as="geometry"/>
</mxCell>
<mxCell id="7" value="" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" parent="1" vertex="1">
<mxGeometry x="225" y="84" width="60" height="80" as="geometry"/>
</mxCell>
<mxCell id="8" value="" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" parent="1" vertex="1">
<mxGeometry x="526" y="389" width="60" height="80" as="geometry"/>
</mxCell>
<mxCell id="59" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=none;startFill=0;endArrow=classic;endFill=1;strokeWidth=3;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" source="73" target="5" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-200" y="280" as="sourcePoint"/>
</mxGeometry>
</mxCell>
<mxCell id="116" value="/fraud" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="59" vertex="1" connectable="0">
<mxGeometry x="-0.0223" y="4" relative="1" as="geometry">
<mxPoint x="1" y="1" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="60" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=none;startFill=0;endArrow=classic;endFill=1;strokeWidth=3;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" source="73" target="3" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-200" y="280" as="sourcePoint"/>
</mxGeometry>
</mxCell>
<mxCell id="117" value="/customer" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="60" vertex="1" connectable="0">
<mxGeometry x="-0.073" y="-1" relative="1" as="geometry">
<mxPoint x="8" y="-1" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="41" style="edgeStyle=none;html=1;startArrow=classic;startFill=1;strokeWidth=1;endArrow=none;endFill=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.576;entryY=0.998;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="27" target="17" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="290" y="600" as="sourcePoint"/>
<mxPoint x="353" y="520" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="43" value="Pull Environment <br>Configuration" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="41" vertex="1" connectable="0">
<mxGeometry x="0.0238" y="-1" relative="1" as="geometry">
<mxPoint as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="NRwvb_30eyufFlA1yozx-124" style="edgeStyle=none;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;fontSize=11;startArrow=none;startFill=0;endArrow=classic;endFill=1;strokeWidth=1;" parent="1" source="27" target="100" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="27" value="config server" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="262" y="616" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="40" style="edgeStyle=none;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.829;entryY=1.004;entryDx=0;entryDy=0;entryPerimeter=0;startArrow=classic;startFill=1;strokeWidth=1;endArrow=none;endFill=0;exitPerimeter=0;" parent="1" source="NRwvb_30eyufFlA1yozx-119" target="17" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="529" y="621" as="sourcePoint"/>
</mxGeometry>
</mxCell>
<mxCell id="42" value="Distributed Tracing" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="40" vertex="1" connectable="0">
<mxGeometry x="0.0184" relative="1" as="geometry">
<mxPoint y="11" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="NRwvb_30eyufFlA1yozx-117" value="Sleuth" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=11;" parent="40" vertex="1" connectable="0">
<mxGeometry x="-0.3677" y="2" relative="1" as="geometry">
<mxPoint y="-24" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="49" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/png,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;" parent="1" vertex="1">
<mxGeometry x="281" y="684.98" width="45" height="45" as="geometry"/>
</mxCell>
<mxCell id="50" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://upload.wikimedia.org/wikipedia/commons/thumb/9/91/Octicons-mark-github.svg/2048px-Octicons-mark-github.svg.png;" parent="1" vertex="1">
<mxGeometry x="333" y="685" width="35" height="35" as="geometry"/>
</mxCell>
<mxCell id="53" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://upload.wikimedia.org/wikipedia/commons/thumb/2/29/Postgresql_elephant.svg/1200px-Postgresql_elephant.svg.png;" parent="1" vertex="1">
<mxGeometry x="542" y="430" width="29.07" height="30" as="geometry"/>
</mxCell>
<mxCell id="55" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://upload.wikimedia.org/wikipedia/commons/thumb/2/29/Postgresql_elephant.svg/1200px-Postgresql_elephant.svg.png;" parent="1" vertex="1">
<mxGeometry x="276.08000000000004" y="435" width="29.07" height="30" as="geometry"/>
</mxCell>
<mxCell id="57" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://miro.medium.com/max/300/1*R4c8lHBHuH5qyqOtZb3h-w.png;" parent="1" vertex="1">
<mxGeometry x="557" y="217.5" width="35" height="35" as="geometry"/>
</mxCell>
<mxCell id="58" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://twilio-cms-prod.s3.amazonaws.com/images/library-logo-resource2x.width-1000.png;" parent="1" vertex="1">
<mxGeometry x="496" y="222.5" width="53.79" height="30" as="geometry"/>
</mxCell>
<mxCell id="64" style="edgeStyle=none;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=none;startFill=0;endArrow=classic;endFill=1;strokeWidth=3;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" source="62" target="73" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-320" y="280" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="62" value="" style="outlineConnect=0;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;shape=mxgraph.aws3.internet_3;fillColor=#D2D3D3;gradientColor=none;strokeColor=#B266FF;strokeWidth=2;" parent="1" vertex="1">
<mxGeometry x="-502" y="262.5" width="79.5" height="54" as="geometry"/>
</mxCell>
<mxCell id="73" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;strokeWidth=0;strokeColor=none;" parent="1" vertex="1">
<mxGeometry x="-320" y="232.5" width="110" height="110" as="geometry"/>
</mxCell>
<mxCell id="72" value="" style="outlineConnect=0;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;pointerEvents=1;shape=mxgraph.aws4.network_load_balancer;fillColor=#6a00ff;strokeColor=#3700CC;fontColor=#ffffff;" parent="1" vertex="1">
<mxGeometry x="-305" y="256.5" width="74" height="74" as="geometry"/>
</mxCell>
<mxCell id="74" value="Public <br>Network" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;" parent="1" vertex="1">
<mxGeometry x="-374" y="155" width="54" height="32" as="geometry"/>
</mxCell>
<mxCell id="75" value="Private<br>Network" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;" parent="1" vertex="1">
<mxGeometry x="-242" y="74" width="54" height="32" as="geometry"/>
</mxCell>
<mxCell id="77" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://g.foolcdn.com/art/companylogos/square/mdb.png;" parent="1" vertex="1">
<mxGeometry x="233.41" y="116" width="42.67" height="42.67" as="geometry"/>
</mxCell>
<mxCell id="92" value="" style="aspect=fixed;html=1;points=[];align=center;image;fontSize=12;image=img/lib/mscae/Docker.svg;strokeColor=#000000;strokeWidth=0;fillColor=none;" parent="1" vertex="1">
<mxGeometry x="107.1" y="119.00000000000001" width="23.12" height="18.96" as="geometry"/>
</mxCell>
<mxCell id="93" value="" style="aspect=fixed;html=1;points=[];align=center;image;fontSize=12;image=img/lib/mscae/Docker.svg;strokeColor=#000000;strokeWidth=0;fillColor=none;" parent="1" vertex="1">
<mxGeometry x="114.39" y="394" width="20.73" height="17" as="geometry"/>
</mxCell>
<mxCell id="97" style="edgeStyle=none;html=1;entryX=0.111;entryY=0.998;entryDx=0;entryDy=0;entryPerimeter=0;startArrow=classic;startFill=1;endArrow=none;endFill=0;strokeWidth=1;" parent="1" source="95" target="17" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="98" value="Pull Images" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="97" vertex="1" connectable="0">
<mxGeometry x="0.2059" relative="1" as="geometry">
<mxPoint x="-1" y="9" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="95" value="Private Docker Registry" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="-119" y="616" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="99" value="" style="aspect=fixed;html=1;points=[];align=center;image;fontSize=12;image=img/lib/mscae/Docker.svg;strokeColor=#000000;strokeWidth=0;fillColor=none;" parent="1" vertex="1">
<mxGeometry x="-86.43" y="685" width="54.85" height="44.98" as="geometry"/>
</mxCell>
<mxCell id="100" value="Eureka Server" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="58.66" y="616" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="101" style="edgeStyle=none;html=1;startArrow=classic;startFill=1;endArrow=none;endFill=0;strokeWidth=1;entryX=0.332;entryY=1.002;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" target="17" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="121" y="615" as="sourcePoint"/>
<mxPoint x="124" y="521" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="102" value="Microservices Register <br>As A Client" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="101" vertex="1" connectable="0">
<mxGeometry x="0.2059" relative="1" as="geometry">
<mxPoint x="-1" y="9" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="106" value="Notificatication" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="496" y="257.5" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="94" value="" style="aspect=fixed;html=1;points=[];align=center;image;fontSize=12;image=img/lib/mscae/Docker.svg;strokeColor=#000000;strokeWidth=0;fillColor=none;" parent="1" vertex="1">
<mxGeometry x="589" y="263" width="21.34" height="17.5" as="geometry"/>
</mxCell>
<mxCell id="109" value="" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=classic;startFill=1;endArrow=none;endFill=0;strokeWidth=1;" parent="1" source="107" target="106" edge="1">
<mxGeometry x="0.04" relative="1" as="geometry">
<mxPoint as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="NRwvb_30eyufFlA1yozx-119" value="" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" parent="1" vertex="1">
<mxGeometry x="486" y="610" width="82.93" height="81" as="geometry"/>
</mxCell>
<mxCell id="111" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://www.snaplogic.com/wp-content/uploads/2016/05/kafka-logo-600x390.jpg;" parent="1" vertex="1">
<mxGeometry x="290.22" y="197.5" width="100.78" height="65.5" as="geometry"/>
</mxCell>
<mxCell id="114" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://blog.iron.io/wp-content/uploads/2020/11/RabbitMQ.jpg;" parent="1" vertex="1">
<mxGeometry x="320.62" y="311" width="89.38" height="50.36" as="geometry"/>
</mxCell>
<mxCell id="107" value="Message Queue" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="301" y="257.5" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="110" value="Load Balancer" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;" parent="1" vertex="1">
<mxGeometry x="-309.5" y="236.5" width="87" height="18" as="geometry"/>
</mxCell>
<mxCell id="113" value="" style="outlineConnect=0;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;shape=mxgraph.aws3.sqs;fillColor=#D9A741;gradientColor=none;strokeColor=#000000;strokeWidth=0;" parent="1" vertex="1">
<mxGeometry x="387.5" y="217.5" width="22.5" height="27.35" as="geometry"/>
</mxCell>
<mxCell id="NRwvb_30eyufFlA1yozx-122" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/png,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;" parent="1" vertex="1">
<mxGeometry x="492" y="641.98" width="41" height="41" as="geometry"/>
</mxCell>
<mxCell id="NRwvb_30eyufFlA1yozx-123" value="" style="aspect=fixed;html=1;points=[];align=center;image;fontSize=12;image=img/lib/mscae/Docker.svg;strokeColor=#000000;strokeWidth=0;fillColor=none;" parent="1" vertex="1">
<mxGeometry x="530.93" y="650" width="28.07" height="23.02" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram name="Service Discovery" id="NjUWEUbKktNb05nLPYvM">
<mxGraphModel dx="2658" dy="1967" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="wIK1BDM-tyvRzp2XeRGC-0"/>
<mxCell id="wIK1BDM-tyvRzp2XeRGC-1" parent="wIK1BDM-tyvRzp2XeRGC-0"/>
<mxCell id="Y1gfFd0ynq9f1__zWaiz-0" value="" style="group" parent="wIK1BDM-tyvRzp2XeRGC-1" vertex="1" connectable="0">
<mxGeometry x="69" y="344" width="584" height="270" as="geometry"/>
</mxCell>
<mxCell id="PH91zAjFHpjKP6Gzf9oe-17" value="Microservices (Eureka Clients)" style="fillColor=#EFF0F3;dashed=1;verticalAlign=top;fontStyle=0;fontColor=#232F3D;fontSize=12;" parent="Y1gfFd0ynq9f1__zWaiz-0" vertex="1">
<mxGeometry width="234" height="270" as="geometry"/>
</mxCell>
<mxCell id="PH91zAjFHpjKP6Gzf9oe-13" value="" style="verticalLabelPosition=bottom;html=1;verticalAlign=top;strokeWidth=1;align=center;outlineConnect=0;dashed=0;outlineConnect=0;shape=mxgraph.aws3d.application;fillColor=#4286c5;strokeColor=#57A2D8;aspect=fixed;fontSize=12;" parent="Y1gfFd0ynq9f1__zWaiz-0" vertex="1">
<mxGeometry x="409" y="64" width="143.11" height="158.8" as="geometry"/>
</mxCell>
<mxCell id="PH91zAjFHpjKP6Gzf9oe-14" value="" style="verticalLabelPosition=bottom;html=1;verticalAlign=top;strokeWidth=1;align=center;outlineConnect=0;dashed=0;outlineConnect=0;shape=mxgraph.aws3d.application;fillColor=#f0a30a;strokeColor=#BD7000;aspect=fixed;fontSize=12;fontColor=#000000;" parent="Y1gfFd0ynq9f1__zWaiz-0" vertex="1">
<mxGeometry x="64" y="131" width="62" height="68.8" as="geometry"/>
</mxCell>
<mxCell id="PH91zAjFHpjKP6Gzf9oe-15" value="" style="verticalLabelPosition=bottom;html=1;verticalAlign=top;strokeWidth=1;align=center;outlineConnect=0;dashed=0;outlineConnect=0;shape=mxgraph.aws3d.application;fillColor=#f0a30a;strokeColor=#BD7000;aspect=fixed;fontSize=12;fontColor=#000000;" parent="Y1gfFd0ynq9f1__zWaiz-0" vertex="1">
<mxGeometry x="162" y="112" width="50.47" height="56" as="geometry"/>
</mxCell>
<mxCell id="PH91zAjFHpjKP6Gzf9oe-16" value="" style="verticalLabelPosition=bottom;html=1;verticalAlign=top;strokeWidth=1;align=center;outlineConnect=0;dashed=0;outlineConnect=0;shape=mxgraph.aws3d.application;fillColor=#f0a30a;strokeColor=#BD7000;aspect=fixed;fontSize=12;fontColor=#000000;" parent="Y1gfFd0ynq9f1__zWaiz-0" vertex="1">
<mxGeometry x="47" y="50" width="62" height="68.8" as="geometry"/>
</mxCell>
<mxCell id="PH91zAjFHpjKP6Gzf9oe-18" value="" style="endArrow=classic;html=1;fontSize=12;strokeWidth=1;" parent="Y1gfFd0ynq9f1__zWaiz-0" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="267" y="90" as="sourcePoint"/>
<mxPoint x="368" y="90" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="PH91zAjFHpjKP6Gzf9oe-21" value="1 - Register" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=12;" parent="PH91zAjFHpjKP6Gzf9oe-18" vertex="1" connectable="0">
<mxGeometry x="-0.5266" y="1" relative="1" as="geometry">
<mxPoint x="22" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="PH91zAjFHpjKP6Gzf9oe-19" value="" style="endArrow=classic;html=1;fontSize=12;strokeWidth=1;" parent="Y1gfFd0ynq9f1__zWaiz-0" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="269" y="136.36" as="sourcePoint"/>
<mxPoint x="368" y="136" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="PH91zAjFHpjKP6Gzf9oe-23" value="2 - Lookup" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=12;" parent="PH91zAjFHpjKP6Gzf9oe-19" vertex="1" connectable="0">
<mxGeometry x="-0.6071" y="1" relative="1" as="geometry">
<mxPoint x="26" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="PH91zAjFHpjKP6Gzf9oe-20" value="" style="endArrow=classic;html=1;fontSize=12;strokeWidth=1;" parent="Y1gfFd0ynq9f1__zWaiz-0" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="266" y="179" as="sourcePoint"/>
<mxPoint x="266" y="223" as="targetPoint"/>
<Array as="points">
<mxPoint x="372" y="179"/>
<mxPoint x="372" y="223"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="PH91zAjFHpjKP6Gzf9oe-24" value="3 - Connect" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=12;" parent="PH91zAjFHpjKP6Gzf9oe-20" vertex="1" connectable="0">
<mxGeometry x="-0.7909" y="1" relative="1" as="geometry">
<mxPoint x="25" y="-1" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="PH91zAjFHpjKP6Gzf9oe-25" value="Eureka Server" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fontSize=12;" parent="Y1gfFd0ynq9f1__zWaiz-0" vertex="1">
<mxGeometry x="437.04999999999995" y="24" width="87" height="18" as="geometry"/>
</mxCell>
<mxCell id="PH91zAjFHpjKP6Gzf9oe-26" value="" style="verticalLabelPosition=bottom;html=1;verticalAlign=top;strokeWidth=1;align=center;outlineConnect=0;dashed=0;outlineConnect=0;shape=mxgraph.aws3d.application;fillColor=#f0a30a;strokeColor=#BD7000;aspect=fixed;fontSize=12;fontColor=#000000;" parent="Y1gfFd0ynq9f1__zWaiz-0" vertex="1">
<mxGeometry x="147" y="61" width="24" height="26.63" as="geometry"/>
</mxCell>
<mxCell id="PH91zAjFHpjKP6Gzf9oe-27" value="" style="verticalLabelPosition=bottom;html=1;verticalAlign=top;strokeWidth=1;align=center;outlineConnect=0;dashed=0;outlineConnect=0;shape=mxgraph.aws3d.application;fillColor=#f0a30a;strokeColor=#BD7000;aspect=fixed;fontSize=12;fontColor=#000000;" parent="Y1gfFd0ynq9f1__zWaiz-0" vertex="1">
<mxGeometry x="147.5" y="191" width="43" height="47.71" as="geometry"/>
</mxCell>
<mxCell id="PH91zAjFHpjKP6Gzf9oe-28" value="" style="verticalLabelPosition=bottom;html=1;verticalAlign=top;strokeWidth=1;align=center;outlineConnect=0;dashed=0;outlineConnect=0;shape=mxgraph.aws3d.application;fillColor=#f0a30a;strokeColor=#BD7000;aspect=fixed;fontSize=12;fontColor=#000000;" parent="Y1gfFd0ynq9f1__zWaiz-0" vertex="1">
<mxGeometry x="33" y="209" width="18.74" height="20.8" as="geometry"/>
</mxCell>
<mxCell id="PH91zAjFHpjKP6Gzf9oe-29" value="<span style="color: rgb(32 , 33 , 36) ; font-family: &#34;arial&#34; , sans-serif ; font-size: 11px ; text-align: left">Knows all the client applications <br>running on each port and IP address.</span>" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fontSize=11;" parent="Y1gfFd0ynq9f1__zWaiz-0" vertex="1">
<mxGeometry x="393" y="238.70999999999998" width="191" height="30" as="geometry"/>
</mxCell>
<mxCell id="Dtdai3XazI9elFZAhyv0-1" value="Fraud<br>Running on port 8081" style="verticalLabelPosition=bottom;html=1;verticalAlign=top;strokeWidth=1;align=center;outlineConnect=0;dashed=0;outlineConnect=0;shape=mxgraph.aws3d.application;fillColor=#f0a30a;strokeColor=#BD7000;aspect=fixed;fontSize=12;fontColor=#000000;" parent="wIK1BDM-tyvRzp2XeRGC-1" vertex="1">
<mxGeometry x="567.4102633807588" y="-673" width="108.0957308604336" height="119.93055259146341" as="geometry"/>
</mxCell>
<mxCell id="Dtdai3XazI9elFZAhyv0-2" style="edgeStyle=none;html=1;fontSize=11;startArrow=none;startFill=0;endArrow=classic;endFill=1;strokeWidth=1;" parent="wIK1BDM-tyvRzp2XeRGC-1" source="Dtdai3XazI9elFZAhyv0-6" target="Dtdai3XazI9elFZAhyv0-1" edge="1">
<mxGeometry x="67" y="-673" as="geometry"/>
</mxCell>
<mxCell id="Dtdai3XazI9elFZAhyv0-3" value="HTTP 8081" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=11;" parent="Dtdai3XazI9elFZAhyv0-2" vertex="1" connectable="0">
<mxGeometry x="-0.0547" relative="1" as="geometry">
<mxPoint as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="Dtdai3XazI9elFZAhyv0-6" value="Customer<br>Running on port 8080" style="verticalLabelPosition=bottom;html=1;verticalAlign=top;strokeWidth=1;align=center;outlineConnect=0;dashed=0;outlineConnect=0;shape=mxgraph.aws3d.application;fillColor=#f0a30a;strokeColor=#BD7000;aspect=fixed;fontSize=12;fontColor=#000000;" parent="wIK1BDM-tyvRzp2XeRGC-1" vertex="1">
<mxGeometry x="67" y="-673" width="108.0957308604336" height="119.93055259146341" as="geometry"/>
</mxCell>
<mxCell id="PH91zAjFHpjKP6Gzf9oe-32" value="Customer<br>Running on port 8080" style="verticalLabelPosition=bottom;html=1;verticalAlign=top;strokeWidth=1;align=center;outlineConnect=0;dashed=0;outlineConnect=0;shape=mxgraph.aws3d.application;fillColor=#f0a30a;strokeColor=#BD7000;aspect=fixed;fontSize=12;fontColor=#000000;" parent="wIK1BDM-tyvRzp2XeRGC-1" vertex="1">
<mxGeometry x="67" y="-174" width="108.0957308604336" height="119.93055259146341" as="geometry"/>
</mxCell>
<mxCell id="Dtdai3XazI9elFZAhyv0-10" value="" style="group" parent="wIK1BDM-tyvRzp2XeRGC-1" vertex="1" connectable="0">
<mxGeometry x="572.0025482723577" y="15.000999531336513" width="118.55745172764227" height="119.93055259146342" as="geometry"/>
</mxCell>
<mxCell id="Dtdai3XazI9elFZAhyv0-12" value="" style="group" parent="Dtdai3XazI9elFZAhyv0-10" vertex="1" connectable="0">
<mxGeometry width="118.55745172764227" height="119.93055259146341" as="geometry"/>
</mxCell>
<mxCell id="Dtdai3XazI9elFZAhyv0-13" value="" style="group" parent="Dtdai3XazI9elFZAhyv0-12" vertex="1" connectable="0">
<mxGeometry width="118.55745172764227" height="119.93055259146341" as="geometry"/>
</mxCell>
<mxCell id="PH91zAjFHpjKP6Gzf9oe-38" style="edgeStyle=none;html=1;fontSize=11;startArrow=none;startFill=0;endArrow=classic;endFill=1;strokeWidth=1;" parent="Dtdai3XazI9elFZAhyv0-13" source="PH91zAjFHpjKP6Gzf9oe-32" edge="1">
<mxGeometry x="-499.1025482723577" y="-191.7409995313365" as="geometry">
<mxPoint y="61.67892292616418" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="PH91zAjFHpjKP6Gzf9oe-39" value="HTTP 8085" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=11;" parent="PH91zAjFHpjKP6Gzf9oe-38" vertex="1" connectable="0">
<mxGeometry x="-0.1045" y="1" relative="1" as="geometry">
<mxPoint x="7" y="5" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="PH91zAjFHpjKP6Gzf9oe-36" value="Fraud<br>Running on port 8085" style="verticalLabelPosition=bottom;html=1;verticalAlign=top;strokeWidth=1;align=center;outlineConnect=0;dashed=0;outlineConnect=0;shape=mxgraph.aws3d.application;fillColor=#f0a30a;strokeColor=#BD7000;aspect=fixed;fontSize=12;fontColor=#000000;" parent="Dtdai3XazI9elFZAhyv0-13" vertex="1">
<mxGeometry x="10.461720867208669" width="108.0957308604336" height="119.93055259146341" as="geometry"/>
</mxCell>
<mxCell id="Dtdai3XazI9elFZAhyv0-11" value="" style="group" parent="wIK1BDM-tyvRzp2XeRGC-1" vertex="1" connectable="0">
<mxGeometry x="567.4102633807588" y="-174" width="108.0957308604336" height="119.93055259146341" as="geometry"/>
</mxCell>
<mxCell id="PH91zAjFHpjKP6Gzf9oe-30" value="Fraud<br>Running on port 8081" style="verticalLabelPosition=bottom;html=1;verticalAlign=top;strokeWidth=1;align=center;outlineConnect=0;dashed=0;outlineConnect=0;shape=mxgraph.aws3d.application;fillColor=#f0a30a;strokeColor=#BD7000;aspect=fixed;fontSize=12;fontColor=#000000;" parent="Dtdai3XazI9elFZAhyv0-11" vertex="1">
<mxGeometry width="108.0957308604336" height="119.93055259146341" as="geometry"/>
</mxCell>
<mxCell id="PH91zAjFHpjKP6Gzf9oe-34" style="edgeStyle=none;html=1;fontSize=11;startArrow=none;startFill=0;endArrow=classic;endFill=1;strokeWidth=1;" parent="Dtdai3XazI9elFZAhyv0-11" source="PH91zAjFHpjKP6Gzf9oe-32" target="PH91zAjFHpjKP6Gzf9oe-30" edge="1">
<mxGeometry x="-500.4102633807588" as="geometry"/>
</mxCell>
<mxCell id="PH91zAjFHpjKP6Gzf9oe-35" value="HTTP 8081" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=11;" parent="PH91zAjFHpjKP6Gzf9oe-34" vertex="1" connectable="0">
<mxGeometry x="-0.0547" relative="1" as="geometry">
<mxPoint as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="PH91zAjFHpjKP6Gzf9oe-33" value="Eureka Server" style="verticalLabelPosition=bottom;html=1;verticalAlign=top;strokeWidth=1;align=center;outlineConnect=0;dashed=0;outlineConnect=0;shape=mxgraph.aws3d.application;fillColor=#4286c5;strokeColor=#57A2D8;aspect=fixed;fontSize=12;" parent="wIK1BDM-tyvRzp2XeRGC-1" vertex="1">
<mxGeometry x="299.99999999999994" y="987" width="143.11" height="158.8" as="geometry"/>
</mxCell>
<mxCell id="PH91zAjFHpjKP6Gzf9oe-41" style="edgeStyle=none;html=1;fontSize=11;startArrow=none;startFill=0;endArrow=classic;endFill=1;strokeWidth=1;" parent="wIK1BDM-tyvRzp2XeRGC-1" source="Dtdai3XazI9elFZAhyv0-28" edge="1">
<mxGeometry x="4" y="830" as="geometry">
<mxPoint x="344" y="992" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="Dtdai3XazI9elFZAhyv0-22" style="edgeStyle=none;html=1;startArrow=none;" parent="wIK1BDM-tyvRzp2XeRGC-1" source="Dtdai3XazI9elFZAhyv0-25" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="279" y="1069" as="targetPoint"/>
<mxPoint x="68" y="997" as="sourcePoint"/>
</mxGeometry>
</mxCell>
<mxCell id="PH91zAjFHpjKP6Gzf9oe-45" value="" style="verticalLabelPosition=bottom;html=1;verticalAlign=top;strokeWidth=1;align=center;outlineConnect=0;dashed=0;outlineConnect=0;shape=mxgraph.aws3d.application;fillColor=#f0a30a;strokeColor=#BD7000;aspect=fixed;fontSize=12;fontColor=#000000;" parent="wIK1BDM-tyvRzp2XeRGC-1" vertex="1">
<mxGeometry x="4" y="902" width="82.66" height="91.71" as="geometry"/>
</mxCell>
<mxCell id="Dtdai3XazI9elFZAhyv0-17" style="edgeStyle=none;html=1;startArrow=none;" parent="wIK1BDM-tyvRzp2XeRGC-1" source="Dtdai3XazI9elFZAhyv0-27" target="PH91zAjFHpjKP6Gzf9oe-33" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="Dtdai3XazI9elFZAhyv0-19" value="Register as a client" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="Dtdai3XazI9elFZAhyv0-17" vertex="1" connectable="0">
<mxGeometry x="0.1325" relative="1" as="geometry">
<mxPoint x="58" y="-28" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="PH91zAjFHpjKP6Gzf9oe-46" value="Fraud<br>Running on port 8082" style="verticalLabelPosition=bottom;html=1;verticalAlign=top;strokeWidth=1;align=center;outlineConnect=0;dashed=0;outlineConnect=0;shape=mxgraph.aws3d.application;fillColor=#f0a30a;strokeColor=#BD7000;aspect=fixed;fontSize=12;fontColor=#000000;" parent="wIK1BDM-tyvRzp2XeRGC-1" vertex="1">
<mxGeometry x="626" y="1005" width="82.66" height="91.71" as="geometry"/>
</mxCell>
<mxCell id="Dtdai3XazI9elFZAhyv0-16" style="edgeStyle=none;html=1;startArrow=none;" parent="wIK1BDM-tyvRzp2XeRGC-1" source="Dtdai3XazI9elFZAhyv0-26" target="PH91zAjFHpjKP6Gzf9oe-33" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="PH91zAjFHpjKP6Gzf9oe-47" value="Fraud<br>Fraud on port 8081" style="verticalLabelPosition=bottom;html=1;verticalAlign=top;strokeWidth=1;align=center;outlineConnect=0;dashed=0;outlineConnect=0;shape=mxgraph.aws3d.application;fillColor=#f0a30a;strokeColor=#BD7000;aspect=fixed;fontSize=12;fontColor=#000000;" parent="wIK1BDM-tyvRzp2XeRGC-1" vertex="1">
<mxGeometry x="618" y="830" width="82.66" height="91.71" as="geometry"/>
</mxCell>
<mxCell id="PH91zAjFHpjKP6Gzf9oe-48" style="edgeStyle=none;html=1;fontSize=11;startArrow=none;startFill=0;endArrow=classic;endFill=1;strokeWidth=1;" parent="wIK1BDM-tyvRzp2XeRGC-1" source="Dtdai3XazI9elFZAhyv0-32" target="PH91zAjFHpjKP6Gzf9oe-47" edge="1">
<mxGeometry x="4" y="830" as="geometry">
<Array as="points">
<mxPoint x="338" y="912"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="Dtdai3XazI9elFZAhyv0-14" style="edgeStyle=none;html=1;fontSize=11;startArrow=none;startFill=0;endArrow=classic;endFill=1;strokeWidth=1;" parent="wIK1BDM-tyvRzp2XeRGC-1" source="Dtdai3XazI9elFZAhyv0-29" edge="1">
<mxGeometry x="11.5" y="833" as="geometry">
<mxPoint x="99" y="979" as="targetPoint"/>
<mxPoint x="297" y="1026" as="sourcePoint"/>
<Array as="points"/>
</mxGeometry>
</mxCell>
<mxCell id="Dtdai3XazI9elFZAhyv0-21" value="Customer<br>Running on port 8080" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;" parent="wIK1BDM-tyvRzp2XeRGC-1" vertex="1">
<mxGeometry x="-21" y="859.85" width="125" height="32" as="geometry"/>
</mxCell>
<mxCell id="Dtdai3XazI9elFZAhyv0-29" value="3" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#d5e8d4;strokeColor=#82b366;" parent="wIK1BDM-tyvRzp2XeRGC-1" vertex="1">
<mxGeometry x="184.85" y="992" width="20.15" height="20.15" as="geometry"/>
</mxCell>
<mxCell id="Dtdai3XazI9elFZAhyv0-30" value="" style="edgeStyle=none;html=1;fontSize=11;startArrow=none;startFill=0;endArrow=none;endFill=1;strokeWidth=1;" parent="wIK1BDM-tyvRzp2XeRGC-1" target="Dtdai3XazI9elFZAhyv0-29" edge="1">
<mxGeometry x="11.5" y="833" as="geometry">
<mxPoint x="99" y="979" as="targetPoint"/>
<mxPoint x="297" y="1026" as="sourcePoint"/>
<Array as="points"/>
</mxGeometry>
</mxCell>
<mxCell id="Dtdai3XazI9elFZAhyv0-31" value="Fraud Location&nbsp;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=11;" parent="Dtdai3XazI9elFZAhyv0-30" vertex="1" connectable="0">
<mxGeometry x="-0.0547" relative="1" as="geometry">
<mxPoint x="-3" y="1" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="Dtdai3XazI9elFZAhyv0-32" value="3" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="wIK1BDM-tyvRzp2XeRGC-1" vertex="1">
<mxGeometry x="332" y="901.56" width="20.15" height="20.15" as="geometry"/>
</mxCell>
<mxCell id="Dtdai3XazI9elFZAhyv0-33" value="" style="edgeStyle=none;html=1;fontSize=11;startArrow=none;startFill=0;endArrow=none;endFill=1;strokeWidth=1;" parent="wIK1BDM-tyvRzp2XeRGC-1" source="PH91zAjFHpjKP6Gzf9oe-45" target="Dtdai3XazI9elFZAhyv0-32" edge="1">
<mxGeometry x="4" y="830" as="geometry">
<mxPoint x="86.66000000000008" y="942.7916619400689" as="sourcePoint"/>
<mxPoint x="618" y="880.5040301247936" as="targetPoint"/>
<Array as="points"/>
</mxGeometry>
</mxCell>
<mxCell id="Dtdai3XazI9elFZAhyv0-34" value="Request" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="Dtdai3XazI9elFZAhyv0-33" vertex="1" connectable="0">
<mxGeometry relative="1" as="geometry">
<mxPoint x="133" y="-39" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="Dtdai3XazI9elFZAhyv0-28" value="2" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#f8cecc;strokeColor=#b85450;" parent="wIK1BDM-tyvRzp2XeRGC-1" vertex="1">
<mxGeometry x="205" y="963" width="20.15" height="20.15" as="geometry"/>
</mxCell>
<mxCell id="Dtdai3XazI9elFZAhyv0-35" value="" style="edgeStyle=none;html=1;fontSize=11;startArrow=none;startFill=0;endArrow=none;endFill=1;strokeWidth=1;" parent="wIK1BDM-tyvRzp2XeRGC-1" source="PH91zAjFHpjKP6Gzf9oe-45" target="Dtdai3XazI9elFZAhyv0-28" edge="1">
<mxGeometry x="4" y="830" as="geometry">
<mxPoint x="344" y="992" as="targetPoint"/>
<mxPoint x="86.66000000000008" y="953.963791810359" as="sourcePoint"/>
</mxGeometry>
</mxCell>
<mxCell id="Dtdai3XazI9elFZAhyv0-36" value="Service Discorvery Request" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=11;rotation=8;" parent="Dtdai3XazI9elFZAhyv0-35" vertex="1" connectable="0">
<mxGeometry x="-0.0547" relative="1" as="geometry">
<mxPoint x="82" y="-9" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="Dtdai3XazI9elFZAhyv0-25" value="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="wIK1BDM-tyvRzp2XeRGC-1" vertex="1">
<mxGeometry x="164.7" y="1022" width="20.15" height="20.15" as="geometry"/>
</mxCell>
<mxCell id="Dtdai3XazI9elFZAhyv0-38" value="" style="edgeStyle=none;html=1;endArrow=none;" parent="wIK1BDM-tyvRzp2XeRGC-1" target="Dtdai3XazI9elFZAhyv0-25" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="279" y="1069" as="targetPoint"/>
<mxPoint x="68" y="997" as="sourcePoint"/>
</mxGeometry>
</mxCell>
<mxCell id="Dtdai3XazI9elFZAhyv0-39" value="Register as a client" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="Dtdai3XazI9elFZAhyv0-38" vertex="1" connectable="0">
<mxGeometry x="-0.203" y="2" relative="1" as="geometry">
<mxPoint x="68" y="43" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="Dtdai3XazI9elFZAhyv0-26" value="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="wIK1BDM-tyvRzp2XeRGC-1" vertex="1">
<mxGeometry x="522" y="942.85" width="20.15" height="20.15" as="geometry"/>
</mxCell>
<mxCell id="Dtdai3XazI9elFZAhyv0-40" value="" style="edgeStyle=none;html=1;endArrow=none;" parent="wIK1BDM-tyvRzp2XeRGC-1" source="PH91zAjFHpjKP6Gzf9oe-47" target="Dtdai3XazI9elFZAhyv0-26" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="618" y="903.2209103466248" as="sourcePoint"/>
<mxPoint x="443.1099999999999" y="1019.0211537659629" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="Dtdai3XazI9elFZAhyv0-42" value="Register as a client" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="Dtdai3XazI9elFZAhyv0-40" vertex="1" connectable="0">
<mxGeometry x="0.3916" relative="1" as="geometry">
<mxPoint x="-7" y="-5" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="Dtdai3XazI9elFZAhyv0-27" value="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="wIK1BDM-tyvRzp2XeRGC-1" vertex="1">
<mxGeometry x="527" y="1047" width="20.15" height="20.15" as="geometry"/>
</mxCell>
<mxCell id="Dtdai3XazI9elFZAhyv0-43" value="" style="edgeStyle=none;html=1;endArrow=none;" parent="wIK1BDM-tyvRzp2XeRGC-1" source="PH91zAjFHpjKP6Gzf9oe-46" target="Dtdai3XazI9elFZAhyv0-27" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="626" y="1053.0271742878876" as="sourcePoint"/>
<mxPoint x="443.1099999999999" y="1062.6392951567914" as="targetPoint"/>
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="4BMdVCB4eWE25W27CFtz" name="Api Gateway">
<mxGraphModel dx="2536" dy="864" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="VvIa1sczMv5pocf-aeUb-0"/>
<mxCell id="VvIa1sczMv5pocf-aeUb-1" parent="VvIa1sczMv5pocf-aeUb-0"/>
<mxCell id="sqeSvVJFWsEA9AuavhHC-20" value="Fraud" style="rounded=0;whiteSpace=wrap;html=1;" parent="VvIa1sczMv5pocf-aeUb-1" vertex="1">
<mxGeometry x="50" y="66" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="sqeSvVJFWsEA9AuavhHC-1" style="edgeStyle=none;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;startArrow=classic;startFill=1;fillColor=#1ba1e2;strokeColor=#006EAF;strokeWidth=3;" parent="VvIa1sczMv5pocf-aeUb-1" source="sqeSvVJFWsEA9AuavhHC-4" target="sqeSvVJFWsEA9AuavhHC-6" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="sqeSvVJFWsEA9AuavhHC-2" value="Internal communication" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="sqeSvVJFWsEA9AuavhHC-1" vertex="1" connectable="0">
<mxGeometry x="0.1091" relative="1" as="geometry">
<mxPoint y="16" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="sqeSvVJFWsEA9AuavhHC-3" style="edgeStyle=none;html=1;exitX=1;exitY=0.75;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;startArrow=none;startFill=0;endArrow=none;endFill=0;strokeWidth=1;shape=link;" parent="VvIa1sczMv5pocf-aeUb-1" source="sqeSvVJFWsEA9AuavhHC-4" target="sqeSvVJFWsEA9AuavhHC-7" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="sqeSvVJFWsEA9AuavhHC-4" value="Customer" style="rounded=0;whiteSpace=wrap;html=1;" parent="VvIa1sczMv5pocf-aeUb-1" vertex="1">
<mxGeometry x="20" y="390" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="sqeSvVJFWsEA9AuavhHC-5" style="edgeStyle=none;shape=link;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;startArrow=none;startFill=0;endArrow=none;endFill=0;strokeWidth=1;" parent="VvIa1sczMv5pocf-aeUb-1" source="sqeSvVJFWsEA9AuavhHC-20" target="sqeSvVJFWsEA9AuavhHC-8" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="sqeSvVJFWsEA9AuavhHC-7" value="" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" parent="VvIa1sczMv5pocf-aeUb-1" vertex="1">
<mxGeometry x="232" y="395" width="60" height="80" as="geometry"/>
</mxCell>
<mxCell id="sqeSvVJFWsEA9AuavhHC-8" value="" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" parent="VvIa1sczMv5pocf-aeUb-1" vertex="1">
<mxGeometry x="245" y="56" width="60" height="80" as="geometry"/>
</mxCell>
<mxCell id="sqeSvVJFWsEA9AuavhHC-9" style="edgeStyle=none;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=none;startFill=0;endArrow=classic;endFill=1;strokeWidth=3;fillColor=#fff2cc;strokeColor=#d6b656;" parent="VvIa1sczMv5pocf-aeUb-1" target="sqeSvVJFWsEA9AuavhHC-6" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-178" y="286" as="sourcePoint"/>
</mxGeometry>
</mxCell>
<mxCell id="sqeSvVJFWsEA9AuavhHC-10" value="/fraud" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="sqeSvVJFWsEA9AuavhHC-9" vertex="1" connectable="0">
<mxGeometry x="-0.0223" y="4" relative="1" as="geometry">
<mxPoint x="-30" y="27" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="sqeSvVJFWsEA9AuavhHC-11" style="edgeStyle=none;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=none;startFill=0;endArrow=classic;endFill=1;strokeWidth=3;fillColor=#fff2cc;strokeColor=#d6b656;" parent="VvIa1sczMv5pocf-aeUb-1" target="sqeSvVJFWsEA9AuavhHC-4" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-178" y="289" as="sourcePoint"/>
</mxGeometry>
</mxCell>
<mxCell id="sqeSvVJFWsEA9AuavhHC-12" value="/customer" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="sqeSvVJFWsEA9AuavhHC-11" vertex="1" connectable="0">
<mxGeometry x="-0.073" y="-1" relative="1" as="geometry">
<mxPoint x="-29" y="-22" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="sqeSvVJFWsEA9AuavhHC-13" value="" style="outlineConnect=0;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;shape=mxgraph.aws3.internet_3;fillColor=#D2D3D3;gradientColor=none;strokeColor=#B266FF;strokeWidth=2;" parent="VvIa1sczMv5pocf-aeUb-1" vertex="1">
<mxGeometry x="-412" y="250" width="79.5" height="54" as="geometry"/>
</mxCell>
<mxCell id="sqeSvVJFWsEA9AuavhHC-14" value="" style="outlineConnect=0;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;pointerEvents=1;shape=mxgraph.aws4.network_load_balancer;fillColor=#6a00ff;strokeColor=#3700CC;fontColor=#ffffff;" parent="VvIa1sczMv5pocf-aeUb-1" vertex="1">
<mxGeometry x="-252" y="250" width="74" height="74" as="geometry"/>
</mxCell>
<mxCell id="sqeSvVJFWsEA9AuavhHC-18" value="Fraud" style="rounded=0;whiteSpace=wrap;html=1;" parent="VvIa1sczMv5pocf-aeUb-1" vertex="1">
<mxGeometry x="36" y="88" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="sqeSvVJFWsEA9AuavhHC-19" value="" style="group" parent="VvIa1sczMv5pocf-aeUb-1" vertex="1" connectable="0">
<mxGeometry x="20" y="110" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="sqeSvVJFWsEA9AuavhHC-6" value="Fraud" style="rounded=0;whiteSpace=wrap;html=1;" parent="sqeSvVJFWsEA9AuavhHC-19" vertex="1">
<mxGeometry width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="sqeSvVJFWsEA9AuavhHC-15" value="" style="aspect=fixed;html=1;points=[];align=center;image;fontSize=12;image=img/lib/mscae/Docker.svg;strokeColor=#000000;strokeWidth=0;fillColor=none;" parent="sqeSvVJFWsEA9AuavhHC-19" vertex="1">
<mxGeometry x="87.1" y="9.000000000000014" width="23.12" height="18.96" as="geometry"/>
</mxCell>
<mxCell id="sqeSvVJFWsEA9AuavhHC-21" value="Customer" style="rounded=0;whiteSpace=wrap;html=1;" parent="VvIa1sczMv5pocf-aeUb-1" vertex="1">
<mxGeometry x="36" y="409" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="sqeSvVJFWsEA9AuavhHC-22" value="Customer" style="rounded=0;whiteSpace=wrap;html=1;" parent="VvIa1sczMv5pocf-aeUb-1" vertex="1">
<mxGeometry x="46" y="427" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="sqeSvVJFWsEA9AuavhHC-16" value="" style="aspect=fixed;html=1;points=[];align=center;image;fontSize=12;image=img/lib/mscae/Docker.svg;strokeColor=#000000;strokeWidth=0;fillColor=none;" parent="VvIa1sczMv5pocf-aeUb-1" vertex="1">
<mxGeometry x="136.99999999999997" y="433" width="20.73" height="17" as="geometry"/>
</mxCell>
<mxCell id="gZ6arKePF3R_qXDye3f3-0" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://upload.wikimedia.org/wikipedia/commons/thumb/2/29/Postgresql_elephant.svg/1200px-Postgresql_elephant.svg.png;" parent="VvIa1sczMv5pocf-aeUb-1" vertex="1">
<mxGeometry x="247.46000000000004" y="435" width="29.07" height="30" as="geometry"/>
</mxCell>
<mxCell id="gZ6arKePF3R_qXDye3f3-1" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://upload.wikimedia.org/wikipedia/commons/thumb/2/29/Postgresql_elephant.svg/1200px-Postgresql_elephant.svg.png;" parent="VvIa1sczMv5pocf-aeUb-1" vertex="1">
<mxGeometry x="260.46000000000004" y="96" width="29.07" height="30" as="geometry"/>
</mxCell>
<mxCell id="gZ6arKePF3R_qXDye3f3-2" style="edgeStyle=none;html=1;startArrow=none;startFill=0;endArrow=classic;endFill=1;strokeWidth=3;fillColor=#fff2cc;strokeColor=#d6b656;" parent="VvIa1sczMv5pocf-aeUb-1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-320" y="286.65999999999997" as="sourcePoint"/>
<mxPoint x="-258" y="286.65999999999997" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="8TkGhMzJDVNN6pFFRsk9-0" value="" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1;fillColor=none;strokeWidth=2;dashed=1;" parent="VvIa1sczMv5pocf-aeUb-1" vertex="1">
<mxGeometry x="-60" y="35" width="595" height="480" as="geometry"/>
</mxCell>
<mxCell id="8TkGhMzJDVNN6pFFRsk9-1" style="edgeStyle=none;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;startArrow=none;startFill=0;endArrow=none;endFill=0;strokeWidth=1;shape=link;" parent="VvIa1sczMv5pocf-aeUb-1" source="8TkGhMzJDVNN6pFFRsk9-5" target="8TkGhMzJDVNN6pFFRsk9-3" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="8TkGhMzJDVNN6pFFRsk9-2" value="Customer" style="rounded=0;whiteSpace=wrap;html=1;" parent="VvIa1sczMv5pocf-aeUb-1" vertex="1">
<mxGeometry x="312" y="212" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="8TkGhMzJDVNN6pFFRsk9-3" value="" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" parent="VvIa1sczMv5pocf-aeUb-1" vertex="1">
<mxGeometry x="368" y="370" width="60" height="80" as="geometry"/>
</mxCell>
<mxCell id="8TkGhMzJDVNN6pFFRsk9-4" value="Customer" style="rounded=0;whiteSpace=wrap;html=1;" parent="VvIa1sczMv5pocf-aeUb-1" vertex="1">
<mxGeometry x="328" y="231" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="8TkGhMzJDVNN6pFFRsk9-5" value="Notification" style="rounded=0;whiteSpace=wrap;html=1;" parent="VvIa1sczMv5pocf-aeUb-1" vertex="1">
<mxGeometry x="338" y="249" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="8TkGhMzJDVNN6pFFRsk9-6" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://upload.wikimedia.org/wikipedia/commons/thumb/2/29/Postgresql_elephant.svg/1200px-Postgresql_elephant.svg.png;" parent="VvIa1sczMv5pocf-aeUb-1" vertex="1">
<mxGeometry x="383.46000000000004" y="413" width="29.07" height="30" as="geometry"/>
</mxCell>
<mxCell id="8TkGhMzJDVNN6pFFRsk9-7" value="" style="aspect=fixed;html=1;points=[];align=center;image;fontSize=12;image=img/lib/mscae/Docker.svg;strokeColor=#000000;strokeWidth=0;fillColor=none;" parent="VvIa1sczMv5pocf-aeUb-1" vertex="1">
<mxGeometry x="427.27" y="255" width="20.73" height="17" as="geometry"/>
</mxCell>
<mxCell id="8TkGhMzJDVNN6pFFRsk9-8" style="edgeStyle=none;html=1;startArrow=classic;startFill=1;fillColor=#1ba1e2;strokeColor=#006EAF;strokeWidth=3;" parent="VvIa1sczMv5pocf-aeUb-1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="162" y="407" as="sourcePoint"/>
<mxPoint x="315" y="280" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="8TkGhMzJDVNN6pFFRsk9-9" value="Internal communication" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="8TkGhMzJDVNN6pFFRsk9-8" vertex="1" connectable="0">
<mxGeometry x="0.1091" relative="1" as="geometry">
<mxPoint x="-8" y="3" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="8TkGhMzJDVNN6pFFRsk9-10" value="Private Network" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=#6c8ebf;fillColor=#dae8fc;" parent="VvIa1sczMv5pocf-aeUb-1" vertex="1">
<mxGeometry x="417" y="56" width="95" height="18" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram name="Seurity API Keys Api Gateway" id="8CAiTVxUR2WP2CWu36px">
<mxGraphModel dx="2645" dy="1318" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-0"/>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-1" parent="-OIG_J42Wq-NnZSy9-aX-0"/>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-2" value="" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1;fillColor=none;strokeWidth=2;dashed=1;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="-699" y="-77" width="1435" height="715" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-3" value="" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1;fillColor=none;strokeWidth=2;dashed=1;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="-401" y="-35" width="1090" height="642" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-4" value="" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1;fillColor=none;strokeWidth=2;dashed=1;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="-72" y="44" width="716" height="504" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-5" style="edgeStyle=none;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=none;startFill=0;endArrow=classic;endFill=1;strokeWidth=3;fillColor=#fff2cc;strokeColor=#d6b656;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="-OIG_J42Wq-NnZSy9-aX-1" source="x7x1PCGR2hVTMRYCO9wj-2" target="-OIG_J42Wq-NnZSy9-aX-23">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-109" y="267" as="sourcePoint"/>
</mxGeometry>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-6" value="/fraud" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="-OIG_J42Wq-NnZSy9-aX-5">
<mxGeometry x="-0.0223" y="4" relative="1" as="geometry">
<mxPoint x="-29" y="-9" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-7" style="edgeStyle=none;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=none;startFill=0;endArrow=classic;endFill=1;strokeWidth=3;fillColor=#fff2cc;strokeColor=#d6b656;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="-OIG_J42Wq-NnZSy9-aX-1" source="x7x1PCGR2hVTMRYCO9wj-2" target="-OIG_J42Wq-NnZSy9-aX-16">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-158" y="286" as="sourcePoint"/>
</mxGeometry>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-9" value="" style="outlineConnect=0;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;shape=mxgraph.aws3.internet_3;fillColor=#D2D3D3;gradientColor=none;strokeColor=#B266FF;strokeWidth=2;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="-600.25" y="231.5" width="79.5" height="54" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-10" style="edgeStyle=none;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="-OIG_J42Wq-NnZSy9-aX-1" source="-OIG_J42Wq-NnZSy9-aX-11" target="-OIG_J42Wq-NnZSy9-aX-41">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-11" value="" style="outlineConnect=0;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;pointerEvents=1;shape=mxgraph.aws4.network_load_balancer;fillColor=#6a00ff;strokeColor=#3700CC;fontColor=#ffffff;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="-334" y="231.5" width="74" height="74" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-12" style="edgeStyle=none;html=1;startArrow=none;startFill=0;endArrow=classic;endFill=1;strokeWidth=3;fillColor=#fff2cc;strokeColor=#d6b656;" edge="1" parent="-OIG_J42Wq-NnZSy9-aX-1" target="-OIG_J42Wq-NnZSy9-aX-11">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-503" y="268" as="sourcePoint"/>
<mxPoint x="-441" y="267.90999999999997" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="x7x1PCGR2hVTMRYCO9wj-21" value="HTTP Request" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="-OIG_J42Wq-NnZSy9-aX-12">
<mxGeometry x="-0.2261" y="2" relative="1" as="geometry">
<mxPoint x="-23" y="14" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-13" value="Private Network" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=#6c8ebf;fillColor=#dae8fc;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="526" y="63" width="95" height="18" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-14" value="APIGW" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="-319" y="320" width="50" height="18" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-15" value="Fraud" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="199" y="71" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-16" value="Customer" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="169" y="415" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-17" style="edgeStyle=none;shape=link;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;startArrow=none;startFill=0;endArrow=none;endFill=0;strokeWidth=1;" edge="1" parent="-OIG_J42Wq-NnZSy9-aX-1" source="-OIG_J42Wq-NnZSy9-aX-15" target="-OIG_J42Wq-NnZSy9-aX-20">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-18" value="" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="432" y="420" width="60" height="80" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-19" style="edgeStyle=none;html=1;exitX=1;exitY=0.75;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;startArrow=none;startFill=0;endArrow=none;endFill=0;strokeWidth=1;shape=link;" edge="1" parent="-OIG_J42Wq-NnZSy9-aX-1" source="-OIG_J42Wq-NnZSy9-aX-16" target="-OIG_J42Wq-NnZSy9-aX-18">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-20" value="" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="394" y="61" width="60" height="80" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-21" value="Fraud" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="185" y="93" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-22" value="" style="group" vertex="1" connectable="0" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="169" y="115" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-23" value="Fraud" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-22">
<mxGeometry width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-24" value="" style="aspect=fixed;html=1;points=[];align=center;image;fontSize=12;image=img/lib/mscae/Docker.svg;strokeColor=#000000;strokeWidth=0;fillColor=none;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-22">
<mxGeometry x="87.1" y="9.000000000000014" width="23.12" height="18.96" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-25" style="edgeStyle=none;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;startArrow=classic;startFill=1;fillColor=#1ba1e2;strokeColor=#006EAF;strokeWidth=3;" edge="1" parent="-OIG_J42Wq-NnZSy9-aX-1" source="-OIG_J42Wq-NnZSy9-aX-16" target="-OIG_J42Wq-NnZSy9-aX-23">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-26" value="Internal communication" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="-OIG_J42Wq-NnZSy9-aX-25">
<mxGeometry x="0.1091" relative="1" as="geometry">
<mxPoint y="16" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-27" value="Customer" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="185" y="434" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-28" value="Customer" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="195" y="452" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-29" value="" style="aspect=fixed;html=1;points=[];align=center;image;fontSize=12;image=img/lib/mscae/Docker.svg;strokeColor=#000000;strokeWidth=0;fillColor=none;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="284.27" y="460" width="20.73" height="17" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-30" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://upload.wikimedia.org/wikipedia/commons/thumb/2/29/Postgresql_elephant.svg/1200px-Postgresql_elephant.svg.png;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="447.93000000000006" y="460" width="29.07" height="30" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-31" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://upload.wikimedia.org/wikipedia/commons/thumb/2/29/Postgresql_elephant.svg/1200px-Postgresql_elephant.svg.png;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="409.46000000000004" y="101" width="29.07" height="30" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-32" value="Customer" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="461" y="217" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-33" value="" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="517" y="375" width="60" height="80" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-34" value="Customer" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="477" y="236" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-35" value="Notification" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="487" y="254" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-36" style="edgeStyle=none;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;startArrow=none;startFill=0;endArrow=none;endFill=0;strokeWidth=1;shape=link;" edge="1" parent="-OIG_J42Wq-NnZSy9-aX-1" source="-OIG_J42Wq-NnZSy9-aX-35" target="-OIG_J42Wq-NnZSy9-aX-33">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-37" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://upload.wikimedia.org/wikipedia/commons/thumb/2/29/Postgresql_elephant.svg/1200px-Postgresql_elephant.svg.png;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="532.46" y="418" width="29.07" height="30" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-38" value="" style="aspect=fixed;html=1;points=[];align=center;image;fontSize=12;image=img/lib/mscae/Docker.svg;strokeColor=#000000;strokeWidth=0;fillColor=none;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="576.27" y="260" width="20.73" height="17" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-39" style="edgeStyle=none;html=1;startArrow=classic;startFill=1;fillColor=#1ba1e2;strokeColor=#006EAF;strokeWidth=3;" edge="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="311" y="412" as="sourcePoint"/>
<mxPoint x="464" y="285" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-40" value="Internal communication" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="-OIG_J42Wq-NnZSy9-aX-39">
<mxGeometry x="0.1091" relative="1" as="geometry">
<mxPoint x="-8" y="3" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-53" style="edgeStyle=none;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="-OIG_J42Wq-NnZSy9-aX-1" source="-OIG_J42Wq-NnZSy9-aX-41" target="-OIG_J42Wq-NnZSy9-aX-52">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-171" y="475"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-54" value="VALIDATE API KEY" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="-OIG_J42Wq-NnZSy9-aX-53">
<mxGeometry x="-0.3804" relative="1" as="geometry">
<mxPoint y="10" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="x7x1PCGR2hVTMRYCO9wj-6" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="-OIG_J42Wq-NnZSy9-aX-1" source="-OIG_J42Wq-NnZSy9-aX-41" target="x7x1PCGR2hVTMRYCO9wj-2">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="x7x1PCGR2hVTMRYCO9wj-7" value="Forward" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="x7x1PCGR2hVTMRYCO9wj-6">
<mxGeometry x="-0.2473" relative="1" as="geometry">
<mxPoint x="12" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-41" value="Filter" style="whiteSpace=wrap;html=1;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="-217" y="252.5" width="92" height="27" as="geometry"/>
</mxCell>
<mxCell id="x7x1PCGR2hVTMRYCO9wj-11" style="edgeStyle=none;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="-OIG_J42Wq-NnZSy9-aX-1" source="-OIG_J42Wq-NnZSy9-aX-42" target="x7x1PCGR2hVTMRYCO9wj-8">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="x7x1PCGR2hVTMRYCO9wj-12" style="edgeStyle=none;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="-OIG_J42Wq-NnZSy9-aX-1" source="-OIG_J42Wq-NnZSy9-aX-42" target="x7x1PCGR2hVTMRYCO9wj-9">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="x7x1PCGR2hVTMRYCO9wj-13" style="edgeStyle=none;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="-OIG_J42Wq-NnZSy9-aX-1" source="-OIG_J42Wq-NnZSy9-aX-42" target="x7x1PCGR2hVTMRYCO9wj-10">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-42" value="" style="sketch=0;aspect=fixed;html=1;points=[];align=center;image;fontSize=12;image=img/lib/mscae/Key.svg;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="-665" y="110" width="31" height="50" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-43" value="API Key: xyz" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="-680" y="75" width="78" height="18" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-44" value="" style="sketch=0;aspect=fixed;html=1;points=[];align=center;image;fontSize=12;image=img/lib/mscae/Key.svg;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="-447" y="220" width="17.98" height="29" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-45" value="" style="sketch=0;aspect=fixed;html=1;points=[];align=center;image;fontSize=12;image=img/lib/mscae/Key.svg;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="-204" y="338" width="17.98" height="29" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-46" value="Main Entry Point" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="-346" y="199" width="98" height="18" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-47" value="DMZ" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=#6c8ebf;fillColor=#dae8fc;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="-372" y="-16" width="36" height="18" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-48" value="Internet" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=#6c8ebf;fillColor=#dae8fc;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="-675" y="-56" width="51" height="18" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-49" value="Clients" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="-671" y="256" width="47" height="18" as="geometry"/>
</mxCell>
<mxCell id="-OIG_J42Wq-NnZSy9-aX-52" value="APIManagement" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="-22" y="448" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="x7x1PCGR2hVTMRYCO9wj-1" value="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#e51400;fontColor=#ffffff;strokeColor=#B20000;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="-161" y="342" width="25" height="25" as="geometry"/>
</mxCell>
<mxCell id="x7x1PCGR2hVTMRYCO9wj-2" value="2" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#e51400;strokeColor=#B20000;fontColor=#ffffff;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="-34" y="252.5" width="25" height="25" as="geometry"/>
</mxCell>
<mxCell id="x7x1PCGR2hVTMRYCO9wj-8" value="Customer" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="-567" y="86" width="120" height="29" as="geometry"/>
</mxCell>
<mxCell id="x7x1PCGR2hVTMRYCO9wj-9" value="Customer" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="-567" y="115" width="120" height="29" as="geometry"/>
</mxCell>
<mxCell id="x7x1PCGR2hVTMRYCO9wj-10" value="Customer" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="-567" y="144" width="120" height="29" as="geometry"/>
</mxCell>
<mxCell id="x7x1PCGR2hVTMRYCO9wj-14" value="" style="sketch=0;html=1;aspect=fixed;strokeColor=none;shadow=0;align=center;verticalAlign=top;fillColor=#2D9C5E;shape=mxgraph.gcp2.check" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="-613" y="108" width="20" height="16" as="geometry"/>
</mxCell>
<mxCell id="x7x1PCGR2hVTMRYCO9wj-16" value="" style="sketch=0;html=1;aspect=fixed;strokeColor=none;shadow=0;align=center;verticalAlign=top;fillColor=#2D9C5E;shape=mxgraph.gcp2.check" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="-610" y="124" width="20" height="16" as="geometry"/>
</mxCell>
<mxCell id="x7x1PCGR2hVTMRYCO9wj-17" value="" style="fillColor=#e51400;verticalLabelPosition=bottom;sketch=0;html=1;strokeColor=#FFFFFF;verticalAlign=top;align=center;points=[[0.145,0.145,0],[0.5,0,0],[0.855,0.145,0],[1,0.5,0],[0.855,0.855,0],[0.5,1,0],[0.145,0.855,0],[0,0.5,0]];pointerEvents=1;shape=mxgraph.cisco_safe.compositeIcon;bgIcon=ellipse;resIcon=mxgraph.cisco_safe.capability.block;fontColor=#ffffff;" vertex="1" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="-610" y="144" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="x7x1PCGR2hVTMRYCO9wj-20" value="KEY CREATION" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="-OIG_J42Wq-NnZSy9-aX-1">
<mxGeometry x="-169" y="420.00285714285735" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="qHXJiI4ehLdGZqHuWrZj" name="Sleuth">
<mxGraphModel dx="1876" dy="1534" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="w4nhSq6OKoXRiqkYa2zD-0"/>
<mxCell id="w4nhSq6OKoXRiqkYa2zD-1" parent="w4nhSq6OKoXRiqkYa2zD-0"/>
<mxCell id="g2zL48WwKDLdGk8KF4jq-4" style="edgeStyle=none;html=1;" parent="w4nhSq6OKoXRiqkYa2zD-1" source="g2zL48WwKDLdGk8KF4jq-1" target="g2zL48WwKDLdGk8KF4jq-2" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="g2zL48WwKDLdGk8KF4jq-7" value="SpanId: 1 TraceID: 1" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="g2zL48WwKDLdGk8KF4jq-4" vertex="1" connectable="0">
<mxGeometry x="-0.1445" y="1" relative="1" as="geometry">
<mxPoint as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="g2zL48WwKDLdGk8KF4jq-1" value="Customer<br>Running on port 8080" style="verticalLabelPosition=bottom;html=1;verticalAlign=top;strokeWidth=1;align=center;outlineConnect=0;dashed=0;outlineConnect=0;shape=mxgraph.aws3d.application;fillColor=#f0a30a;strokeColor=#BD7000;aspect=fixed;fontSize=12;fontColor=#000000;" parent="w4nhSq6OKoXRiqkYa2zD-1" vertex="1">
<mxGeometry x="20" y="-650" width="108.0957308604336" height="119.93055259146341" as="geometry"/>
</mxCell>
<mxCell id="g2zL48WwKDLdGk8KF4jq-2" value="Fraud<br>Running on port 8081" style="verticalLabelPosition=bottom;html=1;verticalAlign=top;strokeWidth=1;align=center;outlineConnect=0;dashed=0;outlineConnect=0;shape=mxgraph.aws3d.application;fillColor=#f0a30a;strokeColor=#BD7000;aspect=fixed;fontSize=12;fontColor=#000000;" parent="w4nhSq6OKoXRiqkYa2zD-1" vertex="1">
<mxGeometry x="370" y="-650" width="108.0957308604336" height="119.93055259146341" as="geometry"/>
</mxCell>
<mxCell id="g2zL48WwKDLdGk8KF4jq-3" value="Fraud<br>Running on port 8082" style="verticalLabelPosition=bottom;html=1;verticalAlign=top;strokeWidth=1;align=center;outlineConnect=0;dashed=0;outlineConnect=0;shape=mxgraph.aws3d.application;fillColor=#f0a30a;strokeColor=#BD7000;aspect=fixed;fontSize=12;fontColor=#000000;" parent="w4nhSq6OKoXRiqkYa2zD-1" vertex="1">
<mxGeometry x="370" y="-310" width="108.0957308604336" height="119.93055259146341" as="geometry"/>
</mxCell>
<mxCell id="g2zL48WwKDLdGk8KF4jq-6" value="" style="endArrow=classic;html=1;" parent="w4nhSq6OKoXRiqkYa2zD-1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="70" y="-480" as="sourcePoint"/>
<mxPoint x="350" y="-250" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="g2zL48WwKDLdGk8KF4jq-8" value="SpanId: 1 TraceID: 2" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="g2zL48WwKDLdGk8KF4jq-6" vertex="1" connectable="0">
<mxGeometry x="-0.0957" relative="1" as="geometry">
<mxPoint x="23" y="6" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="ifdqP8Q9lx2iRH2G2a7A-1" style="edgeStyle=none;html=1;" parent="w4nhSq6OKoXRiqkYa2zD-1" source="ifdqP8Q9lx2iRH2G2a7A-0" target="g2zL48WwKDLdGk8KF4jq-1" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="ifdqP8Q9lx2iRH2G2a7A-0" value="Request" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;" parent="w4nhSq6OKoXRiqkYa2zD-1" vertex="1">
<mxGeometry x="-175" y="-599.03" width="55" height="18" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram name="MQ Services" id="BRNM0bkBFdDAq6tTig75">
<mxGraphModel dx="2909" dy="1049" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-0"/>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-1" parent="58R5_0ambQ2_RqlJ0Scc-0"/>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-100" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://blog.iron.io/wp-content/uploads/2020/11/RabbitMQ.jpg;" parent="58R5_0ambQ2_RqlJ0Scc-1" vertex="1">
<mxGeometry x="348.31" y="310.32" width="89.38" height="50.36" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-97" value="" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1;fillColor=none;strokeWidth=2;dashed=1;" parent="58R5_0ambQ2_RqlJ0Scc-1" vertex="1">
<mxGeometry x="-270" y="4" width="1364" height="750" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-3" value="" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1;fillColor=none;strokeWidth=2;dashed=1;" parent="58R5_0ambQ2_RqlJ0Scc-1" vertex="1">
<mxGeometry x="-150" y="40" width="1136" height="480" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-5" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;strokeWidth=3;fillColor=#1ba1e2;strokeColor=#006EAF;" parent="58R5_0ambQ2_RqlJ0Scc-1" source="58R5_0ambQ2_RqlJ0Scc-10" target="58R5_0ambQ2_RqlJ0Scc-57" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="277" y="305" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-6" value="Async<br>Send Notifications" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="58R5_0ambQ2_RqlJ0Scc-5" vertex="1" connectable="0">
<mxGeometry x="-0.1732" y="-2" relative="1" as="geometry">
<mxPoint x="-12" y="6" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-7" style="edgeStyle=none;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;startArrow=classic;startFill=1;fillColor=#1ba1e2;strokeColor=#006EAF;strokeWidth=3;" parent="58R5_0ambQ2_RqlJ0Scc-1" source="58R5_0ambQ2_RqlJ0Scc-10" target="58R5_0ambQ2_RqlJ0Scc-14" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-8" value="Internal Communication" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="58R5_0ambQ2_RqlJ0Scc-7" vertex="1" connectable="0">
<mxGeometry x="0.1091" relative="1" as="geometry">
<mxPoint y="16" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-9" style="edgeStyle=none;html=1;exitX=1;exitY=0.75;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;startArrow=none;startFill=0;endArrow=none;endFill=0;strokeWidth=1;shape=link;" parent="58R5_0ambQ2_RqlJ0Scc-1" source="58R5_0ambQ2_RqlJ0Scc-10" target="58R5_0ambQ2_RqlJ0Scc-15" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-10" value="Customer" style="rounded=0;whiteSpace=wrap;html=1;" parent="58R5_0ambQ2_RqlJ0Scc-1" vertex="1">
<mxGeometry x="20" y="390" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-11" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fillColor=#1ba1e2;strokeColor=#006EAF;strokeWidth=3;" parent="58R5_0ambQ2_RqlJ0Scc-1" source="58R5_0ambQ2_RqlJ0Scc-14" target="58R5_0ambQ2_RqlJ0Scc-57" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="277" y="275" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-12" value="Async <br>Send Notifications" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="58R5_0ambQ2_RqlJ0Scc-11" vertex="1" connectable="0">
<mxGeometry x="0.052" y="-2" relative="1" as="geometry">
<mxPoint x="-33" y="-35" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-13" style="edgeStyle=none;shape=link;html=1;exitX=1;exitY=0.25;exitDx=0;exitDy=0;startArrow=none;startFill=0;endArrow=none;endFill=0;strokeWidth=1;" parent="58R5_0ambQ2_RqlJ0Scc-1" source="58R5_0ambQ2_RqlJ0Scc-14" target="58R5_0ambQ2_RqlJ0Scc-16" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-14" value="Fraud" style="rounded=0;whiteSpace=wrap;html=1;" parent="58R5_0ambQ2_RqlJ0Scc-1" vertex="1">
<mxGeometry x="20" y="110" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-15" value="" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" parent="58R5_0ambQ2_RqlJ0Scc-1" vertex="1">
<mxGeometry x="260.62" y="394" width="60" height="80" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-16" value="" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" parent="58R5_0ambQ2_RqlJ0Scc-1" vertex="1">
<mxGeometry x="225" y="84" width="60" height="80" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-18" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=none;startFill=0;endArrow=classic;endFill=1;strokeWidth=3;fillColor=#fff2cc;strokeColor=#d6b656;" parent="58R5_0ambQ2_RqlJ0Scc-1" source="58R5_0ambQ2_RqlJ0Scc-37" target="58R5_0ambQ2_RqlJ0Scc-14" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-200" y="280" as="sourcePoint"/>
</mxGeometry>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-19" value="/fraud" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="58R5_0ambQ2_RqlJ0Scc-18" vertex="1" connectable="0">
<mxGeometry x="-0.0223" y="4" relative="1" as="geometry">
<mxPoint x="1" y="1" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-20" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=none;startFill=0;endArrow=classic;endFill=1;strokeWidth=3;fillColor=#fff2cc;strokeColor=#d6b656;" parent="58R5_0ambQ2_RqlJ0Scc-1" source="58R5_0ambQ2_RqlJ0Scc-37" target="58R5_0ambQ2_RqlJ0Scc-10" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-200" y="280" as="sourcePoint"/>
</mxGeometry>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-21" value="/customer" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="58R5_0ambQ2_RqlJ0Scc-20" vertex="1" connectable="0">
<mxGeometry x="-0.073" y="-1" relative="1" as="geometry">
<mxPoint x="8" y="-1" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-22" style="edgeStyle=none;html=1;startArrow=classic;startFill=1;strokeWidth=1;endArrow=none;endFill=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.594;entryY=1.001;entryDx=0;entryDy=0;entryPerimeter=0;" parent="58R5_0ambQ2_RqlJ0Scc-1" source="58R5_0ambQ2_RqlJ0Scc-25" target="58R5_0ambQ2_RqlJ0Scc-3" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="493" y="587" as="sourcePoint"/>
<mxPoint x="524" y="528" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-23" value="Pull Environment <br>Configuration" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="58R5_0ambQ2_RqlJ0Scc-22" vertex="1" connectable="0">
<mxGeometry x="0.0238" y="-1" relative="1" as="geometry">
<mxPoint as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-24" style="edgeStyle=none;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;fontSize=11;startArrow=none;startFill=0;endArrow=classic;endFill=1;strokeWidth=1;" parent="58R5_0ambQ2_RqlJ0Scc-1" source="58R5_0ambQ2_RqlJ0Scc-25" target="58R5_0ambQ2_RqlJ0Scc-48" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-25" value="config server" style="rounded=0;whiteSpace=wrap;html=1;" parent="58R5_0ambQ2_RqlJ0Scc-1" vertex="1">
<mxGeometry x="465" y="603" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-26" style="edgeStyle=none;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;startArrow=classic;startFill=1;strokeWidth=1;endArrow=none;endFill=0;exitPerimeter=0;entryX=0.775;entryY=1.004;entryDx=0;entryDy=0;entryPerimeter=0;" parent="58R5_0ambQ2_RqlJ0Scc-1" source="58R5_0ambQ2_RqlJ0Scc-54" target="58R5_0ambQ2_RqlJ0Scc-3" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="732" y="608" as="sourcePoint"/>
<mxPoint x="730" y="534" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-27" value="Distributed Tracing" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="58R5_0ambQ2_RqlJ0Scc-26" vertex="1" connectable="0">
<mxGeometry x="0.0184" relative="1" as="geometry">
<mxPoint y="11" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-28" value="Sleuth" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=11;" parent="58R5_0ambQ2_RqlJ0Scc-26" vertex="1" connectable="0">
<mxGeometry x="-0.3677" y="2" relative="1" as="geometry">
<mxPoint y="-24" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-29" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/png,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;" parent="58R5_0ambQ2_RqlJ0Scc-1" vertex="1">
<mxGeometry x="484" y="671.98" width="45" height="45" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-30" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://upload.wikimedia.org/wikipedia/commons/thumb/9/91/Octicons-mark-github.svg/2048px-Octicons-mark-github.svg.png;" parent="58R5_0ambQ2_RqlJ0Scc-1" vertex="1">
<mxGeometry x="536" y="672" width="35" height="35" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-32" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://upload.wikimedia.org/wikipedia/commons/thumb/2/29/Postgresql_elephant.svg/1200px-Postgresql_elephant.svg.png;" parent="58R5_0ambQ2_RqlJ0Scc-1" vertex="1">
<mxGeometry x="276.08000000000004" y="435" width="29.07" height="30" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-35" style="edgeStyle=none;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=none;startFill=0;endArrow=classic;endFill=1;strokeWidth=3;fillColor=#fff2cc;strokeColor=#d6b656;" parent="58R5_0ambQ2_RqlJ0Scc-1" source="58R5_0ambQ2_RqlJ0Scc-36" target="58R5_0ambQ2_RqlJ0Scc-37" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-320" y="280" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-36" value="" style="outlineConnect=0;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;shape=mxgraph.aws3.internet_3;fillColor=#D2D3D3;gradientColor=none;strokeColor=#B266FF;strokeWidth=2;" parent="58R5_0ambQ2_RqlJ0Scc-1" vertex="1">
<mxGeometry x="-502" y="262.5" width="79.5" height="54" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-37" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;strokeWidth=0;strokeColor=none;" parent="58R5_0ambQ2_RqlJ0Scc-1" vertex="1">
<mxGeometry x="-320" y="232.5" width="110" height="110" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-38" value="" style="outlineConnect=0;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;pointerEvents=1;shape=mxgraph.aws4.network_load_balancer;fillColor=#6a00ff;strokeColor=#3700CC;fontColor=#ffffff;" parent="58R5_0ambQ2_RqlJ0Scc-1" vertex="1">
<mxGeometry x="-305" y="256.5" width="74" height="74" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-39" value="Public <br>Network" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;" parent="58R5_0ambQ2_RqlJ0Scc-1" vertex="1">
<mxGeometry x="-374" y="155" width="54" height="32" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-40" value="Private<br>Network" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;" parent="58R5_0ambQ2_RqlJ0Scc-1" vertex="1">
<mxGeometry x="-242" y="74" width="54" height="32" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-41" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://g.foolcdn.com/art/companylogos/square/mdb.png;" parent="58R5_0ambQ2_RqlJ0Scc-1" vertex="1">
<mxGeometry x="233.41" y="116" width="42.67" height="42.67" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-42" value="" style="aspect=fixed;html=1;points=[];align=center;image;fontSize=12;image=img/lib/mscae/Docker.svg;strokeColor=#000000;strokeWidth=0;fillColor=none;" parent="58R5_0ambQ2_RqlJ0Scc-1" vertex="1">
<mxGeometry x="107.1" y="119.00000000000001" width="23.12" height="18.96" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-43" value="" style="aspect=fixed;html=1;points=[];align=center;image;fontSize=12;image=img/lib/mscae/Docker.svg;strokeColor=#000000;strokeWidth=0;fillColor=none;" parent="58R5_0ambQ2_RqlJ0Scc-1" vertex="1">
<mxGeometry x="114.39" y="394" width="20.73" height="17" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-44" style="edgeStyle=none;html=1;startArrow=classic;startFill=1;endArrow=none;endFill=0;strokeWidth=1;entryX=0.259;entryY=1.007;entryDx=0;entryDy=0;entryPerimeter=0;" parent="58R5_0ambQ2_RqlJ0Scc-1" source="58R5_0ambQ2_RqlJ0Scc-46" target="58R5_0ambQ2_RqlJ0Scc-3" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="144" y="524" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-45" value="Pull Images" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="58R5_0ambQ2_RqlJ0Scc-44" vertex="1" connectable="0">
<mxGeometry x="0.2059" relative="1" as="geometry">
<mxPoint x="-1" y="9" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-46" value="Private Docker Registry" style="rounded=0;whiteSpace=wrap;html=1;" parent="58R5_0ambQ2_RqlJ0Scc-1" vertex="1">
<mxGeometry x="84" y="603" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-47" value="" style="aspect=fixed;html=1;points=[];align=center;image;fontSize=12;image=img/lib/mscae/Docker.svg;strokeColor=#000000;strokeWidth=0;fillColor=none;" parent="58R5_0ambQ2_RqlJ0Scc-1" vertex="1">
<mxGeometry x="116.57" y="672" width="54.85" height="44.98" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-48" value="Eureka Server" style="rounded=0;whiteSpace=wrap;html=1;" parent="58R5_0ambQ2_RqlJ0Scc-1" vertex="1">
<mxGeometry x="261.65999999999997" y="603" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-49" style="edgeStyle=none;html=1;startArrow=classic;startFill=1;endArrow=none;endFill=0;strokeWidth=1;entryX=0.416;entryY=0.999;entryDx=0;entryDy=0;entryPerimeter=0;" parent="58R5_0ambQ2_RqlJ0Scc-1" target="58R5_0ambQ2_RqlJ0Scc-3" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="324" y="602" as="sourcePoint"/>
<mxPoint x="324" y="520" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-50" value="Microservices Register <br>As A Client" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="58R5_0ambQ2_RqlJ0Scc-49" vertex="1" connectable="0">
<mxGeometry x="0.2059" relative="1" as="geometry">
<mxPoint x="-1" y="9" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-53" value="" style="edgeStyle=none;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=none;startFill=1;endArrow=none;endFill=0;strokeWidth=1;shape=link;" parent="58R5_0ambQ2_RqlJ0Scc-1" source="58R5_0ambQ2_RqlJ0Scc-78" target="58R5_0ambQ2_RqlJ0Scc-51" edge="1">
<mxGeometry x="0.04" relative="1" as="geometry">
<mxPoint as="offset"/>
<mxPoint x="695" y="286" as="sourcePoint"/>
</mxGeometry>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-54" value="" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" parent="58R5_0ambQ2_RqlJ0Scc-1" vertex="1">
<mxGeometry x="689" y="597" width="82.93" height="81" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-68" style="edgeStyle=none;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;strokeWidth=1;shape=link;" parent="58R5_0ambQ2_RqlJ0Scc-1" source="58R5_0ambQ2_RqlJ0Scc-57" target="58R5_0ambQ2_RqlJ0Scc-64" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-57" value="Exchange" style="rounded=0;whiteSpace=wrap;html=1;sketch=0;strokeWidth=2;dashed=1;" parent="58R5_0ambQ2_RqlJ0Scc-1" vertex="1">
<mxGeometry x="333" y="257.5" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-58" value="Load Balancer" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;" parent="58R5_0ambQ2_RqlJ0Scc-1" vertex="1">
<mxGeometry x="-309.5" y="236.5" width="87" height="18" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-60" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAkv0lEQVR4nOydCXhTVdrHj03S5KZZ2mxNSko32kIr0FLAAiMtKIzbJ6hUHFxwgdECagEriyiLbMouZVFAKY6MCJ8fzowyoyNQR21dSkFpxYJATWnapEmTNMvNcsv3RFKnYu7N0pPcpD2/5+nz0JyT97yk+d9zzz3veV/m1atXAQKB8E4M3Q4gEJEMEggCQQESCAJBARIIAkEBEggCQQESCAJBARIIAkEBEggCQcXVq1fD+lNUVET3fzliKZTz+IfuyJxPtx+RzPLly8P6fUUzSIQgZDPAnskZb5RkS1ZOyxQPotsfxDWQQCKEGdmS23LF3AcAAPz37sr6ixRj3kC3TwgkkIhAijGZa8YNXNPjpZuWjB4wk0aXEB6QQCKAo3cPfi6ewxzR87WyEUkvK3mxbPq8QgAkEPqZkpEwZEwSf7mXJuWxe4dso8ElRA+QQGhm9diBLwMAON7acsXcJ0uHJY4Lv1eIbpBAaGT7hLQ7ciXce6j6rBk3cB1asNMHEghN5Igwwdw8eaWvv0E8h3lzxcT02eHzDNETJBCaqJiYtgQAIPGnb0mWeEORUpASeq8Q14MEQgPTMsVpxcnCsgDeIqiYkOZtIY8IMUggYUbIZrAqJqa9Q7YwJyNXwn0ILdjDDxJImFkzNnmmjMsaE8RbWTtuSX8nR4ShvZEwggQSRnJEmHBOnuLFXphIWT0uGQUzhhEkkDBy7N4hmwEAA3tjY+og8ZJCOU8KzysEFUggYeKZfHlxMp/9GARTgqNTBlcK2Qz0twsD6EMOA0peLFg6WrkeAABlw0/GZd3+bL7iXhi2ENQggYSBTUWpT8u4rJtg2izLV6xCC/bQgwQSYqZlilJKssQbYduN5zCH7JmUsQK2XcRvQQIJMUtHK1cDAGJDYXtMEn/hzBxpfihsI66BBBJCyvIVN+fJ4h4K4RCsV25OWRtC+/0eJJAQMVzKFW4uTq0M9TgyLuu27RPS7g/1OP0VJJAQsXTUgDIAQFo4xpqbJ99TpBSIwzFWfwMJJARMyxSnlmRLwrnjLVheqHwpjOP1G5BAICPFmGBTUYr71koYznGLk4WlZfmKIeEcsz+ABAKZ0uHyB5P57PE0DM1aPHrAwRQBG+2NQAQJBCJKXixrxZjkNXSNL+Oy8soLFOj0IUSQQCBy7N4hmwAAtJ78m5OnWIoW7PBAAoFE6bDEm3LF3Kfp9gMAoDhw26AddDvRV0ACgYB7YV4+Mmkd3X50k8xnT3+pUDmZbj/6AkggEKiYmP54qpAzgW4/ejJnuHy9kheSCJd+BRJILylSCpJLssSb6fbjemRcVv6motTn6fYj2kEC6SUVE9JeCveeh7+UZInXTMsUoVIKvQAJpBeUDksszJVwH6HbDwqYr6Jgxl6BBBIkUozJ3nFL+kGYoeyqTvsRAMA5WPbcpAo5JRvHp9wK02Z/AgkkSF6/NR12MKL6kX9eKF1RrVoM0eYvLChIemu4lJsA225/AAkkCArlPMnUQeKlMG3uPK1eV9Vsal9V0/yBqtP+d5i2AQDKpaMGPAfZZr8ACSRAhGzGDUenDK4EAAhg2dRYnWc21Kr3dP/+yD8v/Nn9Miz7bkqyJU+j2oeBgwQSIM/mK+6VcVl3QDTpWv/1lRlNJjve/UJVs6n18I/tr0IcA3hqH76NSikEBhJIAOSIMHZZvmIVTJsnVcZdW+vUDde//vznP+/SWJ31MMdy3x0uGT0gkp+6RRxIIAGwZ1LGingOMweiSdPKmmavgmsy2a3umQUAQEAcD9U+DBAkED+ZmSPNH5PEXwjT5o7TrbPdC3Oy9q116u9OqoxvwBwTAJB87N4hWyHb7LMggfiJJ3sIC5Y9jdX5z6dPXHrPV7+VNc3LAQBmWOOCa7UPnyodljgWps2+ChKIH2yfkDZdxmXdBtGkc9F/mvx6TFzVbNIebtQ9CXHsX0C1D/0DCcQHRUqBZG6efA9Mm9UtnZsqG7R1/vaf/mHjQY3V+TFMH+I5zPEVE9NnwbTZF0EC8cHyQqX7FocPy54BdzXM/uSngFOGemYcFyw/wLVgxo2o9iE1SCAUlOUrcouThU/BtLm1Tv1Sg95mD/R9lQ3a2uqWTthh9QJPNDKCBCQQElIEbM7i0QMOAgCYsGxqrM5j2+rU/xfs+2d/8tNyA+76AZY/4Frtw4fRgp0cJBASygsUT8q4rGEQTZqmfnDuEaOd6ArWQIPehm+tU/emhJs3UO1DCpBAvFCkFEjn5CmgRtUevaBbV9NqJt3z8Jdtder3NVbnR3C8+pVUVPvQO0ggXjhw26BdAAA5RJOXl32h2gLDkNFOXJ36wbmZ7n/CsNeNp/ahBKbNvgASyHW8VKi8I5nPvg+iSefcTy8+GMzCnAz3THT0gg72ScHu2odob6QHSCA9UPJib5gzXL4eps36duvbu75r+xKmTTdP/vviNgDARZg2ZVzWHaj24W9BAunBgdsGvSDjsoZCNGmad+ISZfRvkVJAuseSI8JiUwRsjrc2rc1ln/vpxRkAAAcMR7tBtQ9/CxKIh2mZosHFyUKoNf8ON+qeq2o2NZG1l+UrxhUrBaSPWHPEXG55gYI0PH3Xd21f1bdboRbpiecwc/ZMylgO02Y0gwTi4dWbU9YBABiw7F024p/NO35xL1m7e2bYXJz6BgDgKpWdGYOlz+eIMK+ziBvPDGXorb89GZPEf25mjjQPps1oBQkEALBxfMpdqULOVJg2N3zbskRrc5F++csLFA+7Jwlf5z3iOcyMPZMySB85VzWbmjfXtpT11t/rQLUPPfR7gQyXciULCpKgnrmo11l3US3M3ff47pnBX3tjkviLipSCDLL2V765UnnZiH8ajK9kyLis27dPSCuBaTMa6fcC2VKUuggAoIBoUnX7+z9QXtH3TMpYFM9hBpJAgVMxIY1UUFqbyz1jQU8XhGof9nOBTMsUDylOFpbCtLn1VMuyZrOD9MlSkVKQPiaJ/+uX+bTW4teR2lwJ92G3v2Ttu75r+7ZeZ4UdzChcXqiEHdoSVfRbgUgxZsx7d2W9AwCIg2VT1WmvXvf1lbep+lRMSCsHAGDdvxvsBOUivQfYpqKUN6QYeezk7e//4J4NfwrAZZ8UJwvnlOUrBsO0GU30W4EsGT1gFgAgH6JJ08KqpoepFubTMsWDcyXcmcEOkMxn/6F0uJz0YUKz2eFaUa16IVj7JPTr2of9UiCFch63bETSSpg2D//Yvv3IeR3p1dtT/fb1nrOHh4Cie+cMly+jat91pvWQqtMOe8GeX16g6JenD/udQIRsBtgzOQN2MKJq7TdXNlF1KB0uv5uk+q2/t1i/IOOyCg7dmfU4Wbt7wb6wqukxAIA+ELu+mJOnWJojwvrdgr3fCWRGtmRirhhuyYLNtS2PndFaO6j6+LryB0JJlnhLjgiLJ2s/cl6nOvxjO6VggyDp2L1DKiDbjHj6lUDcC/M14wZC3QA7rbEceu6zJspbmkN3Zs2UcVmjSJoDmkE8CComplHm6Hr+859fAwCcD8I2Kcl89gP9rfZhvxJIxcT0Z+M5zJsgmnSt/bqZclGcI8KEJVnibRRdgsqcWJwsfLZQziMtadBkspsXnLz8cKBrHF/0t9qH/UYgUzISMkuyxKth2jzcqFty5Lye8rHq6nHJC0JUoo2/Z3LGDveaioytdeqvTmss+2EO6ql9WA7TZiTTbwSyeuzAVQAALix7Gqvz1MKqyxup+hTKefFTB4lhx0n9Sq6Y+6cZ2ZIxVH3mV11+EQBggzluSZZ47bRMEWnoS1+iXwjkpULlrbkSLtS4op1nWhc3m6mPYuyZnLHdjzoivcp1VT4yiXLxX9VsajncqHumN2N4gbl0tLJfBDP2eYHkiLC4FWOS34YZyq7qtB9cVdP8CVWf0mGJN+WKuQ/BGpOMVCHnDl81CKd/2LhXY3V+BnPcPFnc/RvHp9wC02Yk0ucFUjExbRHkPY8rt7//w9O+OpWPTApbDNOCgqRdKQI25e3j2q+bF8NesPeH2od9WiDTMsXK4mQh1Np8O0+r1zbobZSbcBvHp0xMFXLu9NMkjC/toPICBenmoZvX6lqrq1s6d0AYqyfJS0cNgFoSItLoswIRshnMiolp73gJ7QgajdVZu6FWvY+qT4qAjS0oSNodgFkoV/U5eYrn3LeTVH1mf/LTEgPuugBjvG48tQ/77IK9zwpkzdjkGTIuy1toR7A413995cEmk50yfU95geIxAEAmxHH9JWXPpAzKBXuD3mY5eE4L9dw9AECwqSilz9Y+7JMCyRFhvBmDpVATD5xUGXdsrVP/6GNc7pw8RaB7BMHspHtlTBJ//pSMhGyqPi98qXpXY3UehzUmuLbDPmbJ6AEPw7QZKfRJgRy7d8ir8RxmOkSThnnHqdP3gGsnBV8AAKQGaBtmDUL26rEDF1F1MNoJYt7xSw8BACwQxwVlI5JWK3mxfW6Lvc8J5Jl8+bhkPhtmRaarO063zmrQ2yiDEadkJGTBrmEYDLkS7oxpmWLKpNtHzuvURy/oYJeZ7pO1D/ucQJaOVq6H+f/SWJ0fPX3i0v/66ue5ckfCoSL2e3dl7fW1Jlj2hWoDAKAZ5sC5Ym5p6bBEyp39aKNPCeTQnVl/lnFZf4Bo0rnoP00+T+hNyxTfmCvhPhjkGFCrRnkYVTpcPo2qQ4PeZltRrXoI9vjlI5PW96UFe58RSJFSMMBH1GzAVLd0vlLZoD1D1UeKMYH7ih0hs8evzBkuX+Yr6nZVTXNVfbv1IMxxU4Wc8RUT05+AaZNO+oxAthSlvgwAIM1AGCgG3HV26t/OveyrX+lw+X0AAJgh9FCQcVnDNhWl+szYMu/EpRUAgE6YY/el2od9QiBl+Yqb8mRxQSdD8MbWOvWLWpuLMhrRfYWGcFIQavhHT0qyxBt8HZOtajZdOtyoo3zyFQTCiglpfSJdUNQLJEXA5m0uTn0b8sL879vq1B/46repKPVJGZfV2xy2IRMIACCuYmKaz32Zeccv7jbgrs9hDuypfRj1C/aoF8irfxj4DOSda8PUD849avSRr8p9ZS7JEsM+9w2d4mThvEI5T0rVR2tzXX3hi59hZ2aM3XFL+jtSjBlRa7NAiWqBTMsUK0uyJVD3Ho5e0K2taTX7zAjiORMOI+kctJ10EuL2TM7YRXXyEFzLzPhFvc4aSAyZP6S9fmt6yA6MhYOoFYgnz9RbAAARRLMXPZWbKCmU88TFyUKfIe9+AnMn3Su5Yu59M7IlPuPSPDmFVTDHjvbah1ErkNLh8pJkPpvyoFCAOOZ+enGGr4W5m5+MuH5FtephjdUJ9b49FBhw1+mdp1tnfnTZ8JWvvs1mh33rqRZo6Yk8CI9OGbw/WmsfRqVAlLxYxooxyetg2qxvt1bu+q7N55cIeO7ZV9U0H5W//u3NK6tVdwEALsH0BRItW2pbHsneX1cw78SlA76ikLtZ9/WVt1Wd9i9gOiLjsu58Nl9xD0yb4SIqBXLgtkHrAQAwzyAY5p245HPPwxsra5o/TNz9TdaKatWjGqvz+yBMQN3JNuCuCztPtz6Ttu/U4IWfNb2ttbkCekrmFv/CqqZHYJeZLstXvByNC/aoE0jpsMQRsE8Juq+2OWJMFuybtTaXa1VNc+XId74bdrixfSYAoB2ue37RUd3SOT97f13uvBOXtjeZ7EFv/h05r7tY3279K0zn4jnMnKN3D34Jps1wEFUCcS/My0cmQS3T7CFnx8T0r1qfHPnxS4XKe6QYM6jPpdnsANM/PH/gxsrTA/fXa54BAFyG7+rvaDncqFs24XB91rhDZ7f6s4YiI0eEcTcXpT7R+uTIL3Ml3KfguvnLeZXyaKt9GFUCWTRqwIOpQs6kEJlnyLisSSvGJL/f9tSo88sLlSXBZhBs0Ntsj3/80/aBe2ozDje2L/Rx9iLYp1i26pbONTdWns6e/mHjmqpmU9CzVqGChx26M/OFszPz1GUjFHtlXFaoNvhYr9ycsiZEtkNC1AikSClIWlCQ9FqYhktfPib5vZ9nFzS8OTnj6RwR5iu3lVeazY6u6R+e33y4UUf1pQhqH+SkyvjGuENnlzXobeZg3i9kM8C0THH+8Wk5FV8+MFRdkiVZ7UcOr14j47Lu2D4hjTLSOJKIGoFUTEhbBnnPwx+GPJore+3szLwrh+7MXKrkxQa7yORB9gv0ZoOxbITiph8fzf/3e3dlnSpOFs4NUWpUUubmyffmiLBw/y2DIioEUjossSBXwqVMaxNieCVZkjU/zy5oOT4t59VpmeJAj/PyKdpCvZP+CykCNr9iQtrj+tJRX2wuSq2RcVl0Jn0TVkyMjmDGiBeIFGOydtySfjBCzluIipOF5e/dlXXh+0eGVxYqeAP8fB/VrUtId9JzRBj/i+k3Lr70xIiLc/Lk++I5zLGhHM9f3DNXNNQ+jHiBvHJzSikAIItuP67jhlwx95EvHxh66eLj+QdLhyeOp9opLlIKqGaQkDAzR5p3fFrO9rMz8y6NSeKvAwBEWrhHzBNDZVCPKISCiBfIxm9bDla3dG4DAOB0++IFVqqQ86cdE9Orfnw0//OyEYpx3jrJuKyQL367WV6ovKlp1oiP3/rjoLriZOE8AEDElU1TddqrVlarCoceOLOEbl98QV5TOEJo0Nvaxx06W1akFGyaM1z+55Is8ROQC/9DQcZljd1clPr5Szcp/3PwXPvuDbUt7zeZ7N2ipppBer2TniPCsFlDE6fPGCyZ5XlEG4kXPke9zvrBxm9btlc2aP9DtzP+EvEC6aaq2aSqaja9uLIaW79nUsYzY5L4zwMASOv00UU8h3nznDy5+6dpS23LivXfXPlLqB6fFip4nPkjFM+WZEkWR+Jn4eGqqtP+wcKqy4uPnNdTJt6LRKJGIN006G2WcYfOritSCt4oyRTPnDFYUhrPYQ6i2y8vpMwvSHrrsVzZC5Czy/9CcbLw7i8fGPpoBAvDUq+zvrvx25YdlQ3aOrqdCZZInIr9oqrZpJt34tLm7P11Q7bUtswCAFyh2ydveMRLtQ8S7FOs9AgVh0vVaX/r/n/8OHjogTOzolkcIJoF0o3W5nIt/KxpX9q+U9k7T7c+YcBdp+j2KUDCsg8SBjoON+q23vO3c7kpe089fuS8HmpSOrqIeoF002SyW+aduPRm9v66gi21LVMAAD/Q7VM/wVbd0rnpxsrTg6Z/2Dj/g586Gul2CCZ9RiDdaG0usPCzpr+l7Ts1fO7xi/ddNuJQM5mHgGidQdSHG3Uve6KIn/NVVCha6XMC6abJZHfuOtP2fvqbdbcsqLo8RmN1fkm3TySE/Ew6ZIzVLZ0v3Fh5OnP6h40vVTWb+sStFBlR9xQrGLaeUte8Va/5w4zBkuLygqR5qULOFJhFPfsJFw836nbvPNP6Vm9C66ONfiEQcK0uxtVdZ9pOuH/KRigyF48asFHGZd1Nt19RQOuW2pZV67+5sldrcznpdibc9BuB9GTrKfX5t+o1UyYNjM+fMzxxbnGy8EGYeX0DJBTZ3XuNAXd9f/Bc+84NtS3v9Ob4brTTZ9cgvjDaCXDkvK5u4pGGWWPf/T6lXmfdG+I0oNHCxS21LQ9k76/Lm3fi0u7+LA7QnwXSkxq1WTP0wJnZ9/+jcdBJlXGj+wJKt0/hxoC7anaebn0obd+p3IWfNR0KNBtKX6Vf3mKRceS87tKR87ryQgVv+Z5JGUtzxdznQn0ORWt10voUS2N1nnnnB+3z67+58rHWFpF3e7SCBOKFGrXZOvTAmWU5ImzbcyOT/vxorqwUAODv4aiAaNDbaNkHuWzEP9lQ27L94Ln2Y0Y7gZRBArrFoqBBb9M+/vFPawbuqU053Nhe1hduvTRW5+cLqi6PSn+zbvKuM21/R+KgBgnED5rNDmL6h+e33Vh5Wrm/XjMPYhhLuO7zuy4b8f+de/zihOz9deO3nlJ/G6Zxox4kkABo0Nssj3/8046Be2pzdp5unQEhE3rI1x8aq/MfC6ouD05/s27arjNtJ33VPUH8FiSQIGg2O8C8E5f+mrj7m/QV1aoHNVZnNd0+XYfjpMq4f+7xiyOz99f9z9ZT6vN0OxStIIH0Ak9O3oPy178du7JaNQkA8B3dPtXrrAfGvvt96sQjDY/tOtNWa7RHW6hXZIEEAomVNc3/Ttz9zfAV1ao7NVbnR37ePgWdR/c6zCdVxu33/6Mxe+iBMzNr1GY1JLv9HiQQiGhtLrCqpvkj+evf3jn3+MVRqk77pyEe0lWvs24b++73yolHGp45cl7Xp85iRAJIICFi15m2upS9p2597F8XxtbrfinWDzNtUftJlXHt/f9oTB164ExZjdoMtZYH4r+gjcIQU9mgrXb/TMsUpW8qSl2dzGff3yPUPtAFgu1wY/v6hVVNrzabHZGYJ6zPgWaQMHHkvP5iyt5TMx7714Vh9TrrDk8FJ3/3QVT76zVLbqw8rZz+4flVSBzhA80gYaayQdtQ2aCdlyPCVu6ZlPGsj+6uw43tzyysatrRbHag4EE6uHr1alh/ioqK6P4vI6KY5cuXh/X7im6xEAgKkEAQCAqQQBAICpBAEAgKkEAQCAqQQBAICpBAEAgKkEAQCAqQQBAICpBAEAgKkEAQCAqQQBAICpBAEAgKkEAQCAqQQBAICpBAEAgKkEAQCAqQQBAICpBAEAgKaEnawOFwuAkJCUtCOUZnZ+dHZrP5NzlzFQrFYgBAnLf+drv9M71e/0n377GxsUlisbg0kDEdDgfR1dXl8GQsaXU4HE1Op/MHh8Nh8ddGbGwsTywWLyJr7+zsfN9sNtf5ay8+Pv5WDMNIEwF0dXXVtrW1He35mkKhKAcACLz1t9vtn+v1+n91/y4SiWaw2ewhZOa1Wu2rLpfL7/+/x+fxGIZN8tbG4/GOAwBOBGKvN9AiEAaDEYdh2LJQjoHjeDsA4DcCwTBsAQBASvKW9QCAXwUSExOTFKiPGIZ5e9kJAPjSaDS+ZTAY3iEI6nocMTExPKpxcRy/AADwSyBxcXFykUh0yP09Julia2trG3b9ixiGPUtRMGgjAOBXgbDZ7BIMw6aS+SAUCtt0Ot1Of/ztJjY29g9knwGLxXKFUyDoFiv0sAAARUKhcH9KSsoVqVS6JCYmJqRl3cC1L5lQIpEcoxCHXa/X32exWC6E0g8ej1fOYrG8Xjmo3hYidwIGCSS8yPh8/trU1NRaDoejCOVAYrF4HYPByCNrt9lsrxgMhmOh9AFcu1tIlUqlpLeMJMSGyJ2A6csCieREa7mJiYnHOBwO2dW9V4jF4gcxDPszWTtBEJ9otdq1oRjbGxwOZxGHw0kL13gw6asCwW0221G6naCCwWAMl8lkf42JgfsnEAgEw923cz3y/17Pxebm5qkul8sOdWBqOAkJCeVhHA8atCzSCYKw2Wy2vcG+37MolJC1m83m2TiO97Y8GiU2m201juNne7zE8Kw3RBwOJzU2NnY0g8EYTXURYjKZkwUCwR0Gg+EjGD6xWKy4hISEtyj+rvb29vaZBEFYYYwXCBiGzYyLi9tosVguhnvs3kCLQHAcN6vV6tnBvFcgEBRiGDaLrJ0giL9rNJq/9MpBP8Bx/GRHRwdl/Q+hUJgTHx9/0D1bkPXh8XgzYQjEPRMpFIoDDAYjn6yP2WyeYzKZPu/tWEHCFYvFuy0Wy2Saxg+KqLrFiomJYSYkJGyh6GLVarXPh9ElSoxGY4Narb6FIIgGsj6xsbETY2JibujtWGKx+Gkmk3kvWbvdbt+n0Wje7O04vYHJZE4SCARe9zcilagSiFwuX8JgMArJ2s1m83NWq/VceL2ixuFw6Do6OuZSdJFgGJbZmzHi4uJy+Xz+qxRdGjUazTO9GQMWCQkJS+n2IRCiRiACgaCAw+G8SNbudDr/3d7evju8XvmH2WyuAgDoyNpjYmKyg7XN4XCSEhMT3bdoHJIu6paWltucTmfY1x3eYDAYxfHx8XfT7Ye/RI1AEhISNnsWwd7o0uv187u6uiKyBrjHL9KHBhiGiYO1nZiYWAEAGEjWrtfr5+E4filY+6FAJBLtCsdmKQyiQiAymWw+g8EYT9Zus9mWWiyWs+H1KmCgi1ehUCxiMBj3kLXbbLa1JpPpfdjjBsBXJK8nicXip8LsS1BEvEDi4uKG8Hi8DWTtBEFUazSaV8LrVVDIyBpwHO8I1JgnCHE9WTtBEB+p1eoXurro2y81GAwrAQBab218Pr+cwWBEfIWziBZITEyMezreQrHp5ero6JhPEJFdLJ/P52dRBP+5v8w/BmKPw+HIhELh6xRdrrS1tdF+hbbb7bbOzs5NJM0DxGLxyjC7FDARLRCJRDKbxWL9kawdx/FXTCYT2TQeMSQkJCynaO7AcdzvJ28xMTFMmUz2AYPBSKfodgNBEO2BeRkaDAZDBdkDCh6PtzguLi4l/F75T8QKhMvlZvN4vM1k7QRB1La2tkb8FUgqlT7JZDJnkLU7nc5PA5kBhULhIiaTSfqo20OSSCRaEIifocLpdFqMRiPZI+YYgUDg7VwQ5ZGAcBKxApFKpa9QhT13dHQs7OrqcobXK/+Ji4tLGzhw4EE+n0/56NlsNv81QNN+7ZnExcWVs9nskARDBopOpztIEMS33towDHuCzWanXveyIzye+SYiF0kymWwGg8GYQtbucDheM5lMVeH16rfweLx5HA7n+oNCLM/GXzYAYAjF2ukXCIKoNhqNfwuRi0K5XL5PpVLdQ+NC/dfvl9FoXCsSibw9UWPK5fI9KpVqUg8/I6YOfMQJhMPhKHk8HlUg449qtZr22wcWizWVxSLblvELXXt7+31dXV0hu51gMBhTeTze7SaTKeTnPkj49QMymUz/JxAIvmYymaOv78RgMG69zs+IuTOIuFsssVi8wT3zkrXr9fr5RKQ/tvKNUaPR3G+xWNSQ7NnIGhISElbFxMRQzmQh5Ndx3bODTqebRfblFwqFERkOH1ECEYlEd7PZ7AfI2l0u1/5wnIILMQ1tbW15ZrP5OAxjDofjoNlsJg3QZDAYIyUSCVUsWCj5zffLYrF873A4vK65WCzWBIFAMDFsnvlJxAjEfWsVHx+/j6ydIIgLarU6IgLugoEgiEaz2bzg559/vslisVyGZPacRqN5tr29fRdBEKfIOvF4vDUcDuf6hTAt6PX6V90fh7c2iUSyk8lkksWU0ULECEQikayiOgRlNBoXO53OzvB61WuuOByOfTqd7haVSjVYo9FscblcZki2DW1tbZMdDkd7V1cXYTQaV1H05UkkkpBmkSHhd2H8Vqu1HsfxCpL+2UKh8KHQu+U/EbFIF4vFf4yNjX2YrN3hcBymOabod9hstmU4jp++7uUugiBsDodDDwBoxnFcH6rxDQbDUxaL5dcASJPJ9HehUPgJg8Hwet7C/fny+fzdnZ2dXh+3hhOtVrs8OTl5OgBAfn0bj8crdzgcB+jx7PfQLhAWi5UgFAoPUvii1mq1j0VapC6O4zW+ThSGcOwNer3+UM/Xurq6utrb2x9PTEw8TxL6HiuVSt+2WCxDQ/nkzB+cTqfRbDa/xuPxfpc4gsFgZGEY9jg9nv0e2m+xJBLJaorcTe4r5SK73R5QZr6+jNPpPNba2rrYW5vFYmm22Ww7KN4+WCwWk2Y7CSd6vX43AKCVpJkqjCas0CoQgUAwBsMw0qA6l8v1scFgeDu8XkU2ZrP5UBfFzl9HR8d6t1bI2vl8/osMBiPQRG7QcblcHe6LH91++II2gcTGxookEslfKXxo1Wg0j9AZrh2N4Djebjabn6XoIlcoFNvC6BIpBoPhgNPp/IZuP6igTSBisfgFAABpJKfRaFyB43hbeL3qG2g0mn0EQXxN1h4bGztbIBD4CngMOe6Ln9FoJD3TEgnQIhA+nz8Kw7A5ZO0EQVR1dHTQmoEj2nFfYKjahULhathJ64LBbDYfJQiimm4/yAj7U6zY2FhMKpUepkgyABgMxpDU1NTG3oxjs9neVavVIS2xEMkYDIZjAoHgIyaTeYe3dhaLdUt8fPwDer3+3fB79188T9+eSExMPEv3mtgbYReIpy6Ir0MypMdTA4B007G/oNPpnkpMTPzePWF4a4+Pj3/NarUex3FcE37v/ovFYvnBZrMdxDAsojYJAR2KZTAYN4d7zP6KxWJRmc1mqtoc0kjJmWsymcKWTDsQIm5KQ8DFZDJtIUucAK4dWHoqLi6uV4nrYOCeRRwOxy66/bgeJJA+Do7jWoPBMJ+iC08sFu+PhAW7Wq12z2YhC88JBvo/FUTI8ZR++w9ZO5PJHCsQCP4UgqEDyuZIEISls7OTKvdy2Lnh6tXwhjjV1NQU6fV6GItwSgiCuIjjeG3P1+Li4u4GAHjN6EcQxDkcx7/v/j0mJiYBw7Bbyew7HI4qp9MJfXEbExPDwTDsfyjG/drpdDYFapfFYqXHxsYWUHRptVgsv4goLi7uLrJDawRB/Ijj+Hfdv3M4nLEMBsNrSiMcx08SBEF6e+eNmJgYPoZht5G1Z2Zm1mdmZpImA4dN2AWCQEQT6BYLgaAACQSBoAAJBIGgAAkEgaAACQSBoAAJBIGgAAkEgaDg/wMAAP//keBfbcwKCyYAAAAASUVORK5CYII=;" parent="58R5_0ambQ2_RqlJ0Scc-1" vertex="1">
<mxGeometry x="695" y="628.98" width="41" height="41" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-61" value="" style="aspect=fixed;html=1;points=[];align=center;image;fontSize=12;image=img/lib/mscae/Docker.svg;strokeColor=#000000;strokeWidth=0;fillColor=none;" parent="58R5_0ambQ2_RqlJ0Scc-1" vertex="1">
<mxGeometry x="733.93" y="637" width="28.07" height="23.02" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-63" value="" style="group" parent="58R5_0ambQ2_RqlJ0Scc-1" vertex="1" connectable="0">
<mxGeometry x="825" y="216" width="120" height="251.5" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-17" value="" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" parent="58R5_0ambQ2_RqlJ0Scc-63" vertex="1">
<mxGeometry x="30" y="171.5" width="60" height="80" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-31" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://upload.wikimedia.org/wikipedia/commons/thumb/2/29/Postgresql_elephant.svg/1200px-Postgresql_elephant.svg.png;" parent="58R5_0ambQ2_RqlJ0Scc-63" vertex="1">
<mxGeometry x="46" y="212.5" width="29.07" height="30" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-33" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://miro.medium.com/max/300/1*R4c8lHBHuH5qyqOtZb3h-w.png;" parent="58R5_0ambQ2_RqlJ0Scc-63" vertex="1">
<mxGeometry x="61" width="35" height="35" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-34" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://twilio-cms-prod.s3.amazonaws.com/images/library-logo-resource2x.width-1000.png;" parent="58R5_0ambQ2_RqlJ0Scc-63" vertex="1">
<mxGeometry y="5" width="53.79" height="30" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-51" value="Notificatication" style="rounded=0;whiteSpace=wrap;html=1;" parent="58R5_0ambQ2_RqlJ0Scc-63" vertex="1">
<mxGeometry y="40" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-4" style="edgeStyle=none;shape=link;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;startArrow=none;startFill=0;endArrow=none;endFill=0;strokeWidth=1;" parent="58R5_0ambQ2_RqlJ0Scc-63" source="58R5_0ambQ2_RqlJ0Scc-51" target="58R5_0ambQ2_RqlJ0Scc-17" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-18" y="161.5" as="sourcePoint"/>
</mxGeometry>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-52" value="" style="aspect=fixed;html=1;points=[];align=center;image;fontSize=12;image=img/lib/mscae/Docker.svg;strokeColor=#000000;strokeWidth=0;fillColor=none;" parent="58R5_0ambQ2_RqlJ0Scc-63" vertex="1">
<mxGeometry x="93" y="45.5" width="21.34" height="17.5" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-64" value="" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;rotation=90;" parent="58R5_0ambQ2_RqlJ0Scc-1" vertex="1">
<mxGeometry x="583" y="193.82" width="60" height="187.36" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-74" value="" style="html=1;verticalLabelPosition=bottom;align=center;labelBackgroundColor=#ffffff;verticalAlign=top;strokeWidth=2;strokeColor=#82b366;shadow=0;dashed=0;shape=mxgraph.ios7.icons.mail;fillColor=#d5e8d4;" parent="58R5_0ambQ2_RqlJ0Scc-1" vertex="1">
<mxGeometry x="547" y="279.25" width="30" height="16.5" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-75" value="" style="html=1;verticalLabelPosition=bottom;align=center;labelBackgroundColor=#ffffff;verticalAlign=top;strokeWidth=2;strokeColor=#82b366;shadow=0;dashed=0;shape=mxgraph.ios7.icons.mail;fillColor=#d5e8d4;" parent="58R5_0ambQ2_RqlJ0Scc-1" vertex="1">
<mxGeometry x="589" y="279.25" width="30" height="16.5" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-76" value="" style="html=1;verticalLabelPosition=bottom;align=center;labelBackgroundColor=#ffffff;verticalAlign=top;strokeWidth=2;strokeColor=#82b366;shadow=0;dashed=0;shape=mxgraph.ios7.icons.mail;fillColor=#d5e8d4;" parent="58R5_0ambQ2_RqlJ0Scc-1" vertex="1">
<mxGeometry x="631" y="279.25" width="30" height="16.5" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-78" value="" style="html=1;verticalLabelPosition=bottom;align=center;labelBackgroundColor=#ffffff;verticalAlign=top;strokeWidth=2;strokeColor=#82b366;shadow=0;dashed=0;shape=mxgraph.ios7.icons.envelope_(message);fillColor=#d5e8d4;" parent="58R5_0ambQ2_RqlJ0Scc-1" vertex="1">
<mxGeometry x="757" y="271" width="30" height="30" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-79" value="" style="edgeStyle=none;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=classic;startFill=1;endArrow=none;endFill=0;strokeWidth=1;shape=link;" parent="58R5_0ambQ2_RqlJ0Scc-1" source="58R5_0ambQ2_RqlJ0Scc-64" target="58R5_0ambQ2_RqlJ0Scc-78" edge="1">
<mxGeometry x="0.04" relative="1" as="geometry">
<mxPoint as="offset"/>
<mxPoint x="706.6800000000003" y="286.83716981132056" as="sourcePoint"/>
<mxPoint x="825" y="286" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-80" value="" style="html=1;verticalLabelPosition=bottom;align=center;labelBackgroundColor=#ffffff;verticalAlign=top;strokeWidth=2;strokeColor=#82b366;shadow=0;dashed=0;shape=mxgraph.ios7.icons.envelope_(message);fillColor=#d5e8d4;" parent="58R5_0ambQ2_RqlJ0Scc-1" vertex="1">
<mxGeometry x="251" y="317.5" width="30" height="30" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-84" value="" style="html=1;verticalLabelPosition=bottom;align=center;labelBackgroundColor=#ffffff;verticalAlign=top;strokeWidth=2;strokeColor=#82b366;shadow=0;dashed=0;shape=mxgraph.ios7.icons.envelope_(message);fillColor=#d5e8d4;" parent="58R5_0ambQ2_RqlJ0Scc-1" vertex="1">
<mxGeometry x="246.08000000000004" y="211.82" width="30" height="30" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-92" value="Notification Queue" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=#9673a6;fillColor=#e1d5e7;" parent="58R5_0ambQ2_RqlJ0Scc-1" vertex="1">
<mxGeometry x="552" y="232.5" width="109" height="18" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-94" value="Producer" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=#9673a6;fillColor=#e1d5e7;" parent="58R5_0ambQ2_RqlJ0Scc-1" vertex="1">
<mxGeometry x="19.99999999999997" y="456" width="59" height="18" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-95" value="Producer" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=#9673a6;fillColor=#e1d5e7;" parent="58R5_0ambQ2_RqlJ0Scc-1" vertex="1">
<mxGeometry x="19.99999999999997" y="88" width="59" height="18" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-96" value="Consumer" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=#9673a6;fillColor=#e1d5e7;" parent="58R5_0ambQ2_RqlJ0Scc-1" vertex="1">
<mxGeometry x="825" y="193.82" width="65" height="18" as="geometry"/>
</mxCell>
<mxCell id="58R5_0ambQ2_RqlJ0Scc-99" value="" style="endArrow=classic;html=1;strokeWidth=1;entryX=0.528;entryY=-0.032;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.004;exitY=0.556;exitDx=0;exitDy=0;exitPerimeter=0;" parent="58R5_0ambQ2_RqlJ0Scc-1" source="58R5_0ambQ2_RqlJ0Scc-96" target="58R5_0ambQ2_RqlJ0Scc-78" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="389" y="438" as="sourcePoint"/>
<mxPoint x="439" y="388" as="targetPoint"/>
<Array as="points">
<mxPoint x="773" y="204"/>
</Array>
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="ly2NyTDtiVckSzzE7rCK" name="RabbitMQ">
<mxGraphModel dx="1876" dy="734" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="a5ZM4Hzfx91s-1SzIUil-0"/>
<mxCell id="a5ZM4Hzfx91s-1SzIUil-1" parent="a5ZM4Hzfx91s-1SzIUil-0"/>
<mxCell id="So1rTDARL2AYZkngWKtU-15" style="edgeStyle=none;shape=link;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;exitPerimeter=0;strokeWidth=1;" parent="a5ZM4Hzfx91s-1SzIUil-1" source="a5ZM4Hzfx91s-1SzIUil-3" target="So1rTDARL2AYZkngWKtU-3" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="a5ZM4Hzfx91s-1SzIUil-3" value="" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;sketch=0;strokeWidth=1;rotation=90;" parent="a5ZM4Hzfx91s-1SzIUil-1" vertex="1">
<mxGeometry x="380" y="290" width="60" height="150" as="geometry"/>
</mxCell>
<mxCell id="So1rTDARL2AYZkngWKtU-16" style="edgeStyle=none;shape=link;html=1;strokeWidth=1;" parent="a5ZM4Hzfx91s-1SzIUil-1" source="G4S_lc_L9V6wMhXobJy4-0" target="So1rTDARL2AYZkngWKtU-4" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="G4S_lc_L9V6wMhXobJy4-0" value="" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;sketch=0;strokeWidth=1;rotation=90;" parent="a5ZM4Hzfx91s-1SzIUil-1" vertex="1">
<mxGeometry x="385" y="440" width="60" height="150" as="geometry"/>
</mxCell>
<mxCell id="So1rTDARL2AYZkngWKtU-14" style="edgeStyle=none;shape=link;html=1;strokeWidth=1;" parent="a5ZM4Hzfx91s-1SzIUil-1" source="G4S_lc_L9V6wMhXobJy4-1" target="So1rTDARL2AYZkngWKtU-0" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="G4S_lc_L9V6wMhXobJy4-1" value="" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;sketch=0;strokeWidth=1;rotation=90;" parent="a5ZM4Hzfx91s-1SzIUil-1" vertex="1">
<mxGeometry x="380" y="130" width="60" height="150" as="geometry"/>
</mxCell>
<mxCell id="So1rTDARL2AYZkngWKtU-0" value="Comsumer<br>App A" style="verticalLabelPosition=bottom;html=1;verticalAlign=top;strokeWidth=1;align=center;outlineConnect=0;dashed=0;outlineConnect=0;shape=mxgraph.aws3d.application;fillColor=#e1d5e7;strokeColor=#9673a6;aspect=fixed;fontSize=12;" parent="a5ZM4Hzfx91s-1SzIUil-1" vertex="1">
<mxGeometry x="640" y="159.15" width="82.66" height="91.71" as="geometry"/>
</mxCell>
<mxCell id="So1rTDARL2AYZkngWKtU-3" value="Consumer<br>App B" style="verticalLabelPosition=bottom;html=1;verticalAlign=top;strokeWidth=1;align=center;outlineConnect=0;dashed=0;outlineConnect=0;shape=mxgraph.aws3d.application;fillColor=#fff2cc;strokeColor=#d6b656;aspect=fixed;fontSize=12;" parent="a5ZM4Hzfx91s-1SzIUil-1" vertex="1">
<mxGeometry x="640" y="320" width="82.66" height="91.71" as="geometry"/>
</mxCell>
<mxCell id="So1rTDARL2AYZkngWKtU-4" value="Consumer<br>App C" style="verticalLabelPosition=bottom;html=1;verticalAlign=top;strokeWidth=1;align=center;outlineConnect=0;dashed=0;outlineConnect=0;shape=mxgraph.aws3d.application;fillColor=#f0a30a;strokeColor=#BD7000;aspect=fixed;fontSize=12;fontColor=#000000;" parent="a5ZM4Hzfx91s-1SzIUil-1" vertex="1">
<mxGeometry x="640" y="469.15" width="82.66" height="91.71" as="geometry"/>
</mxCell>
<mxCell id="So1rTDARL2AYZkngWKtU-13" style="edgeStyle=none;shape=link;html=1;strokeWidth=1;" parent="a5ZM4Hzfx91s-1SzIUil-1" source="So1rTDARL2AYZkngWKtU-6" target="So1rTDARL2AYZkngWKtU-9" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="So1rTDARL2AYZkngWKtU-6" value="Producer" style="verticalLabelPosition=bottom;html=1;verticalAlign=top;strokeWidth=1;align=center;outlineConnect=0;dashed=0;outlineConnect=0;shape=mxgraph.aws3d.application;fillColor=#dae8fc;strokeColor=#6c8ebf;aspect=fixed;fontSize=12;" parent="a5ZM4Hzfx91s-1SzIUil-1" vertex="1">
<mxGeometry x="-240" y="320" width="82.66" height="91.71" as="geometry"/>
</mxCell>
<mxCell id="So1rTDARL2AYZkngWKtU-10" style="edgeStyle=none;shape=link;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;strokeWidth=1;" parent="a5ZM4Hzfx91s-1SzIUil-1" source="So1rTDARL2AYZkngWKtU-9" target="G4S_lc_L9V6wMhXobJy4-1" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="zzoEY3L_0gLS3vjDcEmP-0" value="Binding" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="So1rTDARL2AYZkngWKtU-10" vertex="1" connectable="0">
<mxGeometry x="-0.1476" y="2" relative="1" as="geometry">
<mxPoint x="18" y="-10" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="So1rTDARL2AYZkngWKtU-11" style="edgeStyle=none;shape=link;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;strokeWidth=1;" parent="a5ZM4Hzfx91s-1SzIUil-1" source="So1rTDARL2AYZkngWKtU-9" target="a5ZM4Hzfx91s-1SzIUil-3" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="zzoEY3L_0gLS3vjDcEmP-1" value="Binding" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="So1rTDARL2AYZkngWKtU-11" vertex="1" connectable="0">
<mxGeometry x="0.057" y="-1" relative="1" as="geometry">
<mxPoint x="-1" y="-15" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="So1rTDARL2AYZkngWKtU-12" style="edgeStyle=none;shape=link;html=1;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;strokeWidth=1;" parent="a5ZM4Hzfx91s-1SzIUil-1" source="So1rTDARL2AYZkngWKtU-9" target="G4S_lc_L9V6wMhXobJy4-0" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="zzoEY3L_0gLS3vjDcEmP-2" value="Binding" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="So1rTDARL2AYZkngWKtU-12" vertex="1" connectable="0">
<mxGeometry x="0.0228" y="-3" relative="1" as="geometry">
<mxPoint y="-3" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="So1rTDARL2AYZkngWKtU-9" value="Topic Exchange" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;sketch=0;strokeWidth=1;" parent="a5ZM4Hzfx91s-1SzIUil-1" vertex="1">
<mxGeometry x="10" y="285" width="160" height="160" as="geometry"/>
</mxCell>
<mxCell id="bj_nFUt8Yxz1D9w1ioYb-0" value="" style="html=1;verticalLabelPosition=bottom;align=center;labelBackgroundColor=#ffffff;verticalAlign=top;strokeWidth=2;strokeColor=#82b366;shadow=0;dashed=0;shape=mxgraph.ios7.icons.mail;fillColor=#d5e8d4;" parent="a5ZM4Hzfx91s-1SzIUil-1" vertex="1">
<mxGeometry x="-86" y="330" width="30" height="16.5" as="geometry"/>
</mxCell>
<mxCell id="bj_nFUt8Yxz1D9w1ioYb-1" value="" style="html=1;verticalLabelPosition=bottom;align=center;labelBackgroundColor=#ffffff;verticalAlign=top;strokeWidth=2;strokeColor=#82b366;shadow=0;dashed=0;shape=mxgraph.ios7.icons.mail;fillColor=#d5e8d4;" parent="a5ZM4Hzfx91s-1SzIUil-1" vertex="1">
<mxGeometry x="75" y="320" width="30" height="16.5" as="geometry"/>
</mxCell>
<mxCell id="bj_nFUt8Yxz1D9w1ioYb-2" value="" style="html=1;verticalLabelPosition=bottom;align=center;labelBackgroundColor=#ffffff;verticalAlign=top;strokeWidth=2;strokeColor=#82b366;shadow=0;dashed=0;shape=mxgraph.ios7.icons.mail;fillColor=#d5e8d4;" parent="a5ZM4Hzfx91s-1SzIUil-1" vertex="1">
<mxGeometry x="355" y="356.75" width="30" height="16.5" as="geometry"/>
</mxCell>
<mxCell id="bj_nFUt8Yxz1D9w1ioYb-3" value="" style="html=1;verticalLabelPosition=bottom;align=center;labelBackgroundColor=#ffffff;verticalAlign=top;strokeWidth=2;strokeColor=#6c8ebf;shadow=0;dashed=0;shape=mxgraph.ios7.icons.mail;fillColor=#dae8fc;" parent="a5ZM4Hzfx91s-1SzIUil-1" vertex="1">
<mxGeometry x="-130" y="330" width="30" height="16.5" as="geometry"/>
</mxCell>
<mxCell id="bj_nFUt8Yxz1D9w1ioYb-4" value="" style="html=1;verticalLabelPosition=bottom;align=center;labelBackgroundColor=#ffffff;verticalAlign=top;strokeWidth=2;strokeColor=#6c8ebf;shadow=0;dashed=0;shape=mxgraph.ios7.icons.mail;fillColor=#dae8fc;" parent="a5ZM4Hzfx91s-1SzIUil-1" vertex="1">
<mxGeometry x="45" y="395.21" width="30" height="16.5" as="geometry"/>
</mxCell>
<mxCell id="bj_nFUt8Yxz1D9w1ioYb-5" value="" style="html=1;verticalLabelPosition=bottom;align=center;labelBackgroundColor=#ffffff;verticalAlign=top;strokeWidth=2;strokeColor=#6c8ebf;shadow=0;dashed=0;shape=mxgraph.ios7.icons.mail;fillColor=#dae8fc;" parent="a5ZM4Hzfx91s-1SzIUil-1" vertex="1">
<mxGeometry x="355" y="196.75" width="30" height="16.5" as="geometry"/>
</mxCell>
<mxCell id="bj_nFUt8Yxz1D9w1ioYb-6" value="" style="html=1;verticalLabelPosition=bottom;align=center;labelBackgroundColor=#ffffff;verticalAlign=top;strokeWidth=2;strokeColor=#6c8ebf;shadow=0;dashed=0;shape=mxgraph.ios7.icons.mail;fillColor=#dae8fc;" parent="a5ZM4Hzfx91s-1SzIUil-1" vertex="1">
<mxGeometry x="395" y="356.75" width="30" height="16.5" as="geometry"/>
</mxCell>
<mxCell id="bj_nFUt8Yxz1D9w1ioYb-7" value="" style="html=1;verticalLabelPosition=bottom;align=center;labelBackgroundColor=#ffffff;verticalAlign=top;strokeWidth=2;strokeColor=#9673a6;shadow=0;dashed=0;shape=mxgraph.ios7.icons.mail;fillColor=#e1d5e7;" parent="a5ZM4Hzfx91s-1SzIUil-1" vertex="1">
<mxGeometry x="-40" y="330" width="30" height="16.5" as="geometry"/>
</mxCell>
<mxCell id="bj_nFUt8Yxz1D9w1ioYb-8" value="" style="html=1;verticalLabelPosition=bottom;align=center;labelBackgroundColor=#ffffff;verticalAlign=top;strokeWidth=2;strokeColor=#9673a6;shadow=0;dashed=0;shape=mxgraph.ios7.icons.mail;fillColor=#e1d5e7;" parent="a5ZM4Hzfx91s-1SzIUil-1" vertex="1">
<mxGeometry x="105" y="395.21" width="30" height="16.5" as="geometry"/>
</mxCell>
<mxCell id="bj_nFUt8Yxz1D9w1ioYb-9" value="" style="html=1;verticalLabelPosition=bottom;align=center;labelBackgroundColor=#ffffff;verticalAlign=top;strokeWidth=2;strokeColor=#9673a6;shadow=0;dashed=0;shape=mxgraph.ios7.icons.mail;fillColor=#e1d5e7;" parent="a5ZM4Hzfx91s-1SzIUil-1" vertex="1">
<mxGeometry x="355" y="506.75" width="30" height="16.5" as="geometry"/>
</mxCell>
<mxCell id="bj_nFUt8Yxz1D9w1ioYb-10" value="App B Queue" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=#666666;fillColor=#f5f5f5;fontColor=#333333;" parent="a5ZM4Hzfx91s-1SzIUil-1" vertex="1">
<mxGeometry x="365" y="310" width="90" height="20" as="geometry"/>
</mxCell>
<mxCell id="bj_nFUt8Yxz1D9w1ioYb-11" value="App A Queue" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=#666666;fillColor=#f5f5f5;fontColor=#333333;" parent="a5ZM4Hzfx91s-1SzIUil-1" vertex="1">
<mxGeometry x="360" y="150" width="90" height="20" as="geometry"/>
</mxCell>
<mxCell id="bj_nFUt8Yxz1D9w1ioYb-12" value="App C Queue" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=#666666;fillColor=#f5f5f5;fontColor=#333333;" parent="a5ZM4Hzfx91s-1SzIUil-1" vertex="1">
<mxGeometry x="365" y="460" width="90" height="20" as="geometry"/>
</mxCell>
<mxCell id="bj_nFUt8Yxz1D9w1ioYb-15" value="<b>1. </b>Produces sends <br>messages to exhange" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;" parent="a5ZM4Hzfx91s-1SzIUil-1" vertex="1">
<mxGeometry x="-240" y="270" width="130" height="30" as="geometry"/>
</mxCell>
<mxCell id="bj_nFUt8Yxz1D9w1ioYb-16" value="<b>2.</b> Topic Exchange forwards the messages <br>based on routing pattern" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;" parent="a5ZM4Hzfx91s-1SzIUil-1" vertex="1">
<mxGeometry x="-20" y="229.99999999999994" width="240" height="30" as="geometry"/>
</mxCell>
<mxCell id="CXLs0wkfdGLAC9KMzoeh-1" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://dandraka.files.wordpress.com/2021/03/rabbitmq-logo.png;" parent="a5ZM4Hzfx91s-1SzIUil-1" vertex="1">
<mxGeometry x="-240" y="83.25" width="194.81" height="130" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="NrPVPHeclGlAlF4opznJ" name="Java Jar">
<mxGraphModel dx="2276" dy="734" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="QJ8FLIeUjF4pQbJdaDoo-0"/>
<mxCell id="QJ8FLIeUjF4pQbJdaDoo-1" parent="QJ8FLIeUjF4pQbJdaDoo-0"/>
<mxCell id="9ao8Hjhfkhgqr9iylWw7-1" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://www.pngall.com/wp-content/uploads/4/Jar-PNG-Image.png;" parent="QJ8FLIeUjF4pQbJdaDoo-1" vertex="1">
<mxGeometry x="-236.42000000000002" y="190.00000000000003" width="286.87" height="442.65" as="geometry"/>
</mxCell>
<mxCell id="9ao8Hjhfkhgqr9iylWw7-4" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/png,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
gitextract_8gj87pry/ ├── .gitignore ├── README.md ├── amqp/ │ ├── pom.xml │ └── src/ │ └── main/ │ └── java/ │ └── com/ │ └── amigoscode/ │ └── amqp/ │ ├── RabbitMQConfig.java │ └── RabbitMQMessageProducer.java ├── apigw/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── amigoscode/ │ │ └── apigw/ │ │ └── ApiGWApplication.java │ └── resources/ │ ├── application-docker.yml │ ├── application.yml │ └── banner.txt ├── clients/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── amigoscode/ │ │ └── clients/ │ │ ├── fraud/ │ │ │ ├── FraudCheckResponse.java │ │ │ └── FraudClient.java │ │ └── notification/ │ │ ├── NotificationClient.java │ │ └── NotificationRequest.java │ └── resources/ │ ├── clients-default.properties │ ├── clients-docker.properties │ └── clients-kube.properties ├── customer/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── amigoscode/ │ │ └── customer/ │ │ ├── Customer.java │ │ ├── CustomerApplication.java │ │ ├── CustomerController.java │ │ ├── CustomerRegistrationRequest.java │ │ ├── CustomerRepository.java │ │ └── CustomerService.java │ └── resources/ │ ├── application-docker.yml │ ├── application-kube.yml │ ├── application.yml │ └── banner.txt ├── diagrams.drawio ├── docker-compose.yml ├── eureka-server/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── amigoscode/ │ │ └── eurekaserver/ │ │ └── EurekaServerApplication.java │ └── resources/ │ ├── application-docker.yml │ ├── application.yml │ └── banner.txt ├── fraud/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── amigoscode/ │ │ └── fraud/ │ │ ├── FraudApplication.java │ │ ├── FraudCheckHistory.java │ │ ├── FraudCheckHistoryRepository.java │ │ ├── FraudCheckService.java │ │ └── FraudController.java │ └── resources/ │ ├── application-docker.yml │ ├── application-kube.yml │ ├── application.yml │ └── banner.txt ├── k8s/ │ └── minikube/ │ ├── bootstrap/ │ │ ├── postgres/ │ │ │ ├── configmap.yml │ │ │ ├── service.yml │ │ │ ├── statefulset.yml │ │ │ └── volume.yml │ │ ├── rabbitmq/ │ │ │ ├── README.md │ │ │ ├── configmap.yaml │ │ │ ├── rbac.yaml │ │ │ ├── services.yaml │ │ │ └── statefulset.yaml │ │ └── zipkin/ │ │ ├── service.yml │ │ └── statefulset.yml │ └── services/ │ ├── customer/ │ │ ├── deployment.yml │ │ └── service.yml │ ├── fraud/ │ │ ├── deployment.yml │ │ └── service.yml │ └── notification/ │ ├── deployment.yml │ └── service.yml ├── notification/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── amigoscode/ │ │ └── notification/ │ │ ├── Notification.java │ │ ├── NotificationApplication.java │ │ ├── NotificationConfig.java │ │ ├── NotificationController.java │ │ ├── NotificationRepository.java │ │ ├── NotificationService.java │ │ └── rabbitmq/ │ │ └── NotificationConsumer.java │ └── resources/ │ ├── application-docker.yml │ ├── application-kube.yml │ ├── application.yml │ └── banner.txt └── pom.xml
SYMBOL INDEX (47 symbols across 23 files)
FILE: amqp/src/main/java/com/amigoscode/amqp/RabbitMQConfig.java
class RabbitMQConfig (line 13) | @Configuration
method amqpTemplate (line 19) | @Bean
method simpleRabbitListenerContainerFactory (line 26) | @Bean
method jacksonConverter (line 35) | @Bean
FILE: amqp/src/main/java/com/amigoscode/amqp/RabbitMQMessageProducer.java
class RabbitMQMessageProducer (line 8) | @Component
method publish (line 15) | public void publish(Object payload, String exchange, String routingKey) {
FILE: apigw/src/main/java/com/amigoscode/apigw/ApiGWApplication.java
class ApiGWApplication (line 7) | @EnableEurekaClient
method main (line 10) | public static void main(String[] args) {
FILE: clients/src/main/java/com/amigoscode/clients/fraud/FraudClient.java
type FraudClient (line 7) | @FeignClient(
method isFraudster (line 13) | @GetMapping(path = "api/v1/fraud-check/{customerId}")
FILE: clients/src/main/java/com/amigoscode/clients/notification/NotificationClient.java
type NotificationClient (line 6) | @FeignClient(
method sendNotification (line 12) | @PostMapping("api/v1/notification")
FILE: customer/src/main/java/com/amigoscode/customer/Customer.java
class Customer (line 14) | @Data
FILE: customer/src/main/java/com/amigoscode/customer/CustomerApplication.java
class CustomerApplication (line 10) | @SpringBootApplication(
method main (line 24) | public static void main(String[] args) {
FILE: customer/src/main/java/com/amigoscode/customer/CustomerController.java
class CustomerController (line 10) | @Slf4j
method registerCustomer (line 18) | @PostMapping
FILE: customer/src/main/java/com/amigoscode/customer/CustomerRepository.java
type CustomerRepository (line 5) | public interface CustomerRepository extends JpaRepository<Customer, Inte...
FILE: customer/src/main/java/com/amigoscode/customer/CustomerService.java
class CustomerService (line 11) | @Service
method registerCustomer (line 19) | public void registerCustomer(CustomerRegistrationRequest request) {
FILE: eureka-server/src/main/java/com/amigoscode/eurekaserver/EurekaServerApplication.java
class EurekaServerApplication (line 7) | @SpringBootApplication
method main (line 11) | public static void main(String[] args) {
FILE: fraud/src/main/java/com/amigoscode/fraud/FraudApplication.java
class FraudApplication (line 9) | @SpringBootApplication
method main (line 15) | public static void main(String[] args) {
FILE: fraud/src/main/java/com/amigoscode/fraud/FraudCheckHistory.java
class FraudCheckHistory (line 16) | @Data
FILE: fraud/src/main/java/com/amigoscode/fraud/FraudCheckHistoryRepository.java
type FraudCheckHistoryRepository (line 5) | public interface FraudCheckHistoryRepository
FILE: fraud/src/main/java/com/amigoscode/fraud/FraudCheckService.java
class FraudCheckService (line 8) | @Service
method isFraudulentCustomer (line 14) | public boolean isFraudulentCustomer(Integer customerId) {
FILE: fraud/src/main/java/com/amigoscode/fraud/FraudController.java
class FraudController (line 8) | @RestController
method isFraudster (line 16) | @GetMapping(path = "{customerId}")
FILE: notification/src/main/java/com/amigoscode/notification/Notification.java
class Notification (line 13) | @Entity
FILE: notification/src/main/java/com/amigoscode/notification/NotificationApplication.java
class NotificationApplication (line 11) | @SpringBootApplication(
method main (line 21) | public static void main(String[] args) {
FILE: notification/src/main/java/com/amigoscode/notification/NotificationConfig.java
class NotificationConfig (line 11) | @Configuration
method internalTopicExchange (line 23) | @Bean
method notificationQueue (line 28) | @Bean
method internalToNotificationBinding (line 33) | @Bean
method getInternalExchange (line 42) | public String getInternalExchange() {
method getNotificationQueue (line 46) | public String getNotificationQueue() {
method getInternalNotificationRoutingKey (line 50) | public String getInternalNotificationRoutingKey() {
FILE: notification/src/main/java/com/amigoscode/notification/NotificationController.java
class NotificationController (line 11) | @RestController
method sendNotification (line 19) | @PostMapping
FILE: notification/src/main/java/com/amigoscode/notification/NotificationRepository.java
type NotificationRepository (line 5) | public interface NotificationRepository extends JpaRepository<Notificati...
FILE: notification/src/main/java/com/amigoscode/notification/NotificationService.java
class NotificationService (line 9) | @Service
method send (line 15) | public void send(NotificationRequest notificationRequest) {
FILE: notification/src/main/java/com/amigoscode/notification/rabbitmq/NotificationConsumer.java
class NotificationConsumer (line 10) | @Component
method consumer (line 17) | @RabbitListener(queues = "${rabbitmq.queues.notification}")
Condensed preview — 76 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (691K chars).
[
{
"path": ".gitignore",
"chars": 413,
"preview": "HELP.md\ntarget/\n**/target/\n!.mvn/wrapper/maven-wrapper.jar\n!**/src/main/**/target/\n!**/src/test/**/target/\n.idea/\n\n### S"
},
{
"path": "README.md",
"chars": 157,
"preview": "# Microservices\n {\n}\n"
},
{
"path": "clients/src/main/java/com/amigoscode/clients/fraud/FraudClient.java",
"chars": 483,
"preview": "package com.amigoscode.clients.fraud;\n\nimport org.springframework.cloud.openfeign.FeignClient;\nimport org.springframewor"
},
{
"path": "clients/src/main/java/com/amigoscode/clients/notification/NotificationClient.java",
"chars": 403,
"preview": "package com.amigoscode.clients.notification;\n\nimport org.springframework.cloud.openfeign.FeignClient;\nimport org.springf"
},
{
"path": "clients/src/main/java/com/amigoscode/clients/notification/NotificationRequest.java",
"chars": 171,
"preview": "package com.amigoscode.clients.notification;\n\npublic record NotificationRequest(\n Integer toCustomerId,\n S"
},
{
"path": "clients/src/main/resources/clients-default.properties",
"chars": 129,
"preview": "clients.customer.url=http://localhost:8080\nclients.fraud.url=http://localhost:8081\nclients.notification.url=http://local"
},
{
"path": "clients/src/main/resources/clients-docker.properties",
"chars": 127,
"preview": "clients.customer.url=http://customer:8080\nclients.fraud.url=http://fraud:8081\nclients.notification.url=http://notificati"
},
{
"path": "clients/src/main/resources/clients-kube.properties",
"chars": 127,
"preview": "clients.customer.url=http://customer:8080\nclients.fraud.url=http://fraud:8081\nclients.notification.url=http://notificati"
},
{
"path": "customer/pom.xml",
"chars": 2794,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n xmlns:xsi=\"http://www"
},
{
"path": "customer/src/main/java/com/amigoscode/customer/Customer.java",
"chars": 785,
"preview": "package com.amigoscode.customer;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Builder;\nimport lombok.Data;\nimport lo"
},
{
"path": "customer/src/main/java/com/amigoscode/customer/CustomerApplication.java",
"chars": 905,
"preview": "package com.amigoscode.customer;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.aut"
},
{
"path": "customer/src/main/java/com/amigoscode/customer/CustomerController.java",
"chars": 795,
"preview": "package com.amigoscode.customer;\n\nimport lombok.AllArgsConstructor;\nimport lombok.extern.slf4j.Slf4j;\nimport org.springf"
},
{
"path": "customer/src/main/java/com/amigoscode/customer/CustomerRegistrationRequest.java",
"chars": 154,
"preview": "package com.amigoscode.customer;\n\npublic record CustomerRegistrationRequest(\n String firstName,\n String la"
},
{
"path": "customer/src/main/java/com/amigoscode/customer/CustomerRepository.java",
"chars": 178,
"preview": "package com.amigoscode.customer;\n\nimport org.springframework.data.jpa.repository.JpaRepository;\n\npublic interface Custom"
},
{
"path": "customer/src/main/java/com/amigoscode/customer/CustomerService.java",
"chars": 1723,
"preview": "package com.amigoscode.customer;\n\nimport com.amigoscode.amqp.RabbitMQMessageProducer;\nimport com.amigoscode.clients.frau"
},
{
"path": "customer/src/main/resources/application-docker.yml",
"chars": 706,
"preview": "server:\n port: 8080\nspring:\n application:\n name: customer\n datasource:\n password: password\n "
},
{
"path": "customer/src/main/resources/application-kube.yml",
"chars": 706,
"preview": "server:\n port: 8080\nspring:\n application:\n name: customer\n datasource:\n password: password\n "
},
{
"path": "customer/src/main/resources/application.yml",
"chars": 744,
"preview": "server:\n port: 8080\nspring:\n application:\n name: customer\n datasource:\n password: password\n "
},
{
"path": "customer/src/main/resources/banner.txt",
"chars": 306,
"preview": " ,-----. ,--.\n' .--./ ,--.,--. ,---. ,-' '-. ,---. ,--,--,--. ,---. ,--.--.\n| | | || |"
},
{
"path": "diagrams.drawio",
"chars": 604104,
"preview": "<mxfile host=\"65bd71144e\">\n <diagram id=\"J-hNA5ClU3yTLYx-0fgb\" name=\"Main\">\n <mxGraphModel dx=\"2909\" dy=\"1049\""
},
{
"path": "docker-compose.yml",
"chars": 2489,
"preview": "services:\n postgres:\n container_name: postgres\n image: postgres\n environment:\n POSTGRES_USER: amigoscode\n"
},
{
"path": "eureka-server/pom.xml",
"chars": 1718,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n xmlns:xsi=\"http://www"
},
{
"path": "eureka-server/src/main/java/com/amigoscode/eurekaserver/EurekaServerApplication.java",
"chars": 438,
"preview": "package com.amigoscode.eurekaserver;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot"
},
{
"path": "eureka-server/src/main/resources/application-docker.yml",
"chars": 189,
"preview": "spring:\n application:\n name: eureka-server\n zipkin:\n base-url: http://zipkin:9411\n\nserver:\n port: 8761\n\neureka:"
},
{
"path": "eureka-server/src/main/resources/application.yml",
"chars": 192,
"preview": "spring:\n application:\n name: eureka-server\n zipkin:\n base-url: http://localhost:9411\n\nserver:\n port: 8761\n\neure"
},
{
"path": "eureka-server/src/main/resources/banner.txt",
"chars": 478,
"preview": ",------. ,--. ,---.\n| .---' ,--.,--. ,--.--. ,---. | |,-. ,--,--. ' ."
},
{
"path": "fraud/pom.xml",
"chars": 2420,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n xmlns:xsi=\"http://www"
},
{
"path": "fraud/src/main/java/com/amigoscode/fraud/FraudApplication.java",
"chars": 638,
"preview": "package com.amigoscode.fraud;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoco"
},
{
"path": "fraud/src/main/java/com/amigoscode/fraud/FraudCheckHistory.java",
"chars": 832,
"preview": "package com.amigoscode.fraud;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Builder;\nimport lombok.Data;\nimport lombo"
},
{
"path": "fraud/src/main/java/com/amigoscode/fraud/FraudCheckHistoryRepository.java",
"chars": 201,
"preview": "package com.amigoscode.fraud;\n\nimport org.springframework.data.jpa.repository.JpaRepository;\n\npublic interface FraudChec"
},
{
"path": "fraud/src/main/java/com/amigoscode/fraud/FraudCheckService.java",
"chars": 656,
"preview": "package com.amigoscode.fraud;\n\nimport lombok.AllArgsConstructor;\nimport org.springframework.stereotype.Service;\n\nimport "
},
{
"path": "fraud/src/main/java/com/amigoscode/fraud/FraudController.java",
"chars": 766,
"preview": "package com.amigoscode.fraud;\n\nimport com.amigoscode.clients.fraud.FraudCheckResponse;\nimport lombok.AllArgsConstructor;"
},
{
"path": "fraud/src/main/resources/application-docker.yml",
"chars": 620,
"preview": "server:\n port: 8081\nspring:\n application:\n name: fraud\n datasource:\n password: password\n url"
},
{
"path": "fraud/src/main/resources/application-kube.yml",
"chars": 620,
"preview": "server:\n port: 8081\nspring:\n application:\n name: fraud\n datasource:\n password: password\n url"
},
{
"path": "fraud/src/main/resources/application.yml",
"chars": 655,
"preview": "server:\n port: 8081\nspring:\n application:\n name: fraud\n datasource:\n password: password\n url"
},
{
"path": "fraud/src/main/resources/banner.txt",
"chars": 213,
"preview": ",------. ,--.\n| .---' ,--.--. ,--,--. ,--.,--. ,-| |\n| `--, | .--' ' ,-. | | || |"
},
{
"path": "k8s/minikube/bootstrap/postgres/configmap.yml",
"chars": 154,
"preview": "apiVersion: v1\nkind: ConfigMap\nmetadata:\n name: postgres-config\ndata:\n POSTGRES_DB: amigoscode\n POSTGRES_USER: amigos"
},
{
"path": "k8s/minikube/bootstrap/postgres/service.yml",
"chars": 158,
"preview": "apiVersion: v1\nkind: Service\nmetadata:\n name: postgres\nspec:\n selector:\n app: postgres\n ports:\n - port: 5432\n "
},
{
"path": "k8s/minikube/bootstrap/postgres/statefulset.yml",
"chars": 894,
"preview": "apiVersion: apps/v1\nkind: StatefulSet\nmetadata:\n name: postgres\n labels:\n app: postgres\nspec:\n serviceName: postgr"
},
{
"path": "k8s/minikube/bootstrap/postgres/volume.yml",
"chars": 479,
"preview": "apiVersion: v1\nkind: PersistentVolume\nmetadata:\n name: postgres-pc-volume\n labels:\n type: local\n app: postgres\ns"
},
{
"path": "k8s/minikube/bootstrap/rabbitmq/README.md",
"chars": 7067,
"preview": "# Deploy RabbitMQ on Kubernetes with the Kubernetes Peer Discovery Plugin to Minikube\n\nThis is an **example** that demon"
},
{
"path": "k8s/minikube/bootstrap/rabbitmq/configmap.yaml",
"chars": 1804,
"preview": "apiVersion: v1\nkind: ConfigMap\nmetadata:\n name: rabbitmq-config\ndata:\n enabled_plugins: |\n [rabbitmq_management,r"
},
{
"path": "k8s/minikube/bootstrap/rabbitmq/rbac.yaml",
"chars": 558,
"preview": "---\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n name: rabbitmq\n---\nkind: Role\napiVersion: rbac.authorization.k8s.io/"
},
{
"path": "k8s/minikube/bootstrap/rabbitmq/services.yaml",
"chars": 359,
"preview": "kind: Service\napiVersion: v1\nmetadata:\n name: rabbitmq\n labels:\n app: rabbitmq\n type: LoadBalancer\nspec:\n type:"
},
{
"path": "k8s/minikube/bootstrap/rabbitmq/statefulset.yaml",
"chars": 3529,
"preview": "apiVersion: apps/v1\n# See the Prerequisites section of https://www.rabbitmq.com/cluster-formation.html#peer-discovery-k8"
},
{
"path": "k8s/minikube/bootstrap/zipkin/service.yml",
"chars": 177,
"preview": "apiVersion: v1\nkind: Service\nmetadata:\n name: zipkin\nspec:\n selector:\n app: zipkin\n ports:\n - port: 9411\n "
},
{
"path": "k8s/minikube/bootstrap/zipkin/statefulset.yml",
"chars": 652,
"preview": "apiVersion: apps/v1\nkind: StatefulSet\nmetadata:\n name: zipkin\n labels:\n app: zipkin\nspec:\n serviceName: zipkin\n r"
},
{
"path": "k8s/minikube/services/customer/deployment.yml",
"chars": 538,
"preview": "apiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: customer\n labels:\n app: customer\nspec:\n replicas: 1\n templa"
},
{
"path": "k8s/minikube/services/customer/service.yml",
"chars": 159,
"preview": "apiVersion: v1\nkind: Service\nmetadata:\n name: customer\nspec:\n selector:\n app: customer\n ports:\n - port: 80\n "
},
{
"path": "k8s/minikube/services/fraud/deployment.yml",
"chars": 517,
"preview": "apiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: fraud\n labels:\n app: fraud\nspec:\n replicas: 1\n template:\n "
},
{
"path": "k8s/minikube/services/fraud/service.yml",
"chars": 149,
"preview": "apiVersion: v1\nkind: Service\nmetadata:\n name: fraud\nspec:\n selector:\n app: fraud\n ports:\n - port: 80\n targ"
},
{
"path": "k8s/minikube/services/notification/deployment.yml",
"chars": 566,
"preview": "apiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: notification\n labels:\n app: notification\nspec:\n replicas: 1\n"
},
{
"path": "k8s/minikube/services/notification/service.yml",
"chars": 163,
"preview": "apiVersion: v1\nkind: Service\nmetadata:\n name: notification\nspec:\n selector:\n app: notification\n ports:\n - port:"
},
{
"path": "notification/pom.xml",
"chars": 2798,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n xmlns:xsi=\"http://www"
},
{
"path": "notification/src/main/java/com/amigoscode/notification/Notification.java",
"chars": 831,
"preview": "package com.amigoscode.notification;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Builder;\nimport lombok.Getter;\nimp"
},
{
"path": "notification/src/main/java/com/amigoscode/notification/NotificationApplication.java",
"chars": 1343,
"preview": "package com.amigoscode.notification;\n\nimport com.amigoscode.amqp.RabbitMQMessageProducer;\nimport org.springframework.boo"
},
{
"path": "notification/src/main/java/com/amigoscode/notification/NotificationConfig.java",
"chars": 1494,
"preview": "package com.amigoscode.notification;\n\nimport org.springframework.amqp.core.Binding;\nimport org.springframework.amqp.core"
},
{
"path": "notification/src/main/java/com/amigoscode/notification/NotificationController.java",
"chars": 832,
"preview": "package com.amigoscode.notification;\n\nimport com.amigoscode.clients.notification.NotificationRequest;\nimport lombok.AllA"
},
{
"path": "notification/src/main/java/com/amigoscode/notification/NotificationRepository.java",
"chars": 190,
"preview": "package com.amigoscode.notification;\n\nimport org.springframework.data.jpa.repository.JpaRepository;\n\npublic interface No"
},
{
"path": "notification/src/main/java/com/amigoscode/notification/NotificationService.java",
"chars": 856,
"preview": "package com.amigoscode.notification;\n\nimport com.amigoscode.clients.notification.NotificationRequest;\nimport lombok.AllA"
},
{
"path": "notification/src/main/java/com/amigoscode/notification/rabbitmq/NotificationConsumer.java",
"chars": 746,
"preview": "package com.amigoscode.notification.rabbitmq;\n\nimport com.amigoscode.clients.notification.NotificationRequest;\nimport co"
},
{
"path": "notification/src/main/resources/application-docker.yml",
"chars": 912,
"preview": "server:\n port: 8082\nspring:\n application:\n name: notification\n datasource:\n password: password\n "
},
{
"path": "notification/src/main/resources/application-kube.yml",
"chars": 912,
"preview": "server:\n port: 8082\nspring:\n application:\n name: notification\n datasource:\n password: password\n "
},
{
"path": "notification/src/main/resources/application.yml",
"chars": 950,
"preview": "server:\n port: 8082\nspring:\n application:\n name: notification\n datasource:\n password: password\n "
},
{
"path": "notification/src/main/resources/banner.txt",
"chars": 532,
"preview": ",--. ,--. ,--. ,--. ,---. ,--. ,--. ,--.\n| ,'.| | ,---. ,-' '-. `--' / .-' `--' "
},
{
"path": "pom.xml",
"chars": 5182,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/"
}
]
About this extraction
This page contains the full source code of the amigoscode/microservices GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 76 files (655.9 KB), approximately 370.4k tokens, and a symbol index with 47 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.