# Zeebe Mimarisi
```plantuml
@startuml
component "Zeebe" as zeebeEngine
database "Hazelcast" as hazelcast
database "Kafka" as kafka
component simpleMonitor [
<b>Zeebe Simple Monitor</b>
+ Açık kaynak monitor uygulaması
+ Hazelcast üzerindeki verilerle besleniyor
+ İzleme ve gerekirse akışa müdehale etme imkanı sunuyor
]
component persister [
<b>Postgre Persister</b>
+ Background Worker olarak çalışır
+ Akış verilerini Postgre üzerine denormalize şekilde persist eder
]
database postgre [
<b>Postgre</b>
+ Herbir akış için bir tablo oluşturulur
+ Kompleks yapılar için direkt JSON alan kullanılır
+ Akış bilgisi ve son statüsü kayıt ile tutulur
]
component signalR [
<b>Client Event Aggregator</b>
+ Aktif istemci sessionuna komut gönderir
+ İstemcilerin asenkron olarak komutlarının cevap almasını sağlar
]
component sampleClient [
<b>Örnek Uygulama</b>
+ Web veya Mobil uygulama
]
zeebeEngine --> hazelcast : "Hazelcast Exporter"
zeebeEngine --> kafka : "Kafka Exporter"
hazelcast --> simpleMonitor
kafka --> persister
kafka --> signalR
persister --> postgre
signalR --> sampleClient
postgre --> sampleClient
@enduml
```
## TODO
- [ ] **Zeebe Compose dosyası**
Zeebe, Simply Monitor, Kafka ve Hazelcast exporterları ve postgre içeren docker compose dosyası ve kubernetes dağıtımları için yaml dosyaları oluşturulmalıdır.
Developerlar docker üzerinden ilgili kaynakalara erişim sağlayacaktır.
:::info
Community Workerlar da eklenmeli
* [http worker](https://github.com/camunda-community-hub/zeebe-http-worker)
* [script worker](https://github.com/camunda-community-hub/zeebe-script-worker)
* [Dmn worker](https://github.com/camunda-community-hub/zeebe-dmn-worker)
:::
- [ ] **Postgre Persister**
> bbt.zeebe.postgree-persister
* .Net core Background Worker uygulamasıdır.
* Kaynak olarak kafka topic kullanır.
- [ ] **Client Event Aggregator**
> bbt.zeebe.event-aggregator
* .Net core WebApi uygulamasıdır.
* Kaynak olarak kafka topic kullanır.
* Client uygulamalar signalR Hub kanalına register olur. (user ve customer ile)
* İlgili Client tarafından aktif olarak ilerletilen süreçler ile ilgili geri bildirim kanalı için kullanılır.
* Clinet uygulama state değişimine *listener* olarak *delegate* verir ve beklediği eylemin durumuna göre hareket eder.
## Örnek Uygulama - Sözleşme Onay
- [ ] **Contract Approval Workers**
> bbt.contract-approval.worker
* .Net core uygulaması.
* Kubernetes native, multi-pod parallelism desteği.
* https://blog.bernd-ruecker.com/writing-good-workers-for-camunda-cloud-61d322cad862
* https://docs.microsoft.com/en-us/dotnet/standard/parallel-programming/dataflow-task-parallel-library
- [ ] **Contract Approval API**
> bbt.contract-approval.api
* .Net core Web API.
* Db olarak postgre kullanır.
- [ ] **Contract Approval UI**
> bbt.contract-approval.ui
* Flutter ?