Distributor is a general deterministic work distribution service. It allows you to define what each service should do.
| CLI argument | ENV variable | description | example | default value |
|---|---|---|---|---|
| connection | CONNECTION | Fabric connection profile | -connection=connection.yaml | connection.yaml |
| user | USER | Fabric user | -user=User1 | User1 |
| org | ORG | Fabric org | -org=atomyze | atomyze |
| redis-addrs | REDIS_ADDRS | Redis nodes addresses | -redis-addrs="redis-6379:6379,redis-6380:6380,redis-6381:6381,redis-6382:6382,redis-6383:6383,redis-6384:6384" | 0.0.0.0:6379 |
| redis-pass | REDIS_PASS | Redis password | -redis-pass="secret" | "" |
| redis-tls | REDIS_TLS | enable TLS for communication with Redis | -redis-tls=true | false |
| redis-rootca-certs | REDIS_ROOTCA_CERTS | comma-separated root CA's certificates list for TLS with Redis | -redis-rootca-certs=/path/to/ca1.pem,/path/to/ca2.pem | "" |
| poll-interval | POLL_INTERVAL | services ping interval | -poll-interval=500ms | 1000ms |
| ping-timeout | PING_TIMEOUT | ping request timeout | -ping-timeout=500ms | 1000ms |
| distribution-namespace | DISTRIBUTION_NAMESPACE | key in storage where work distribution data is stored | -distribution-namespace=sys-matching-table | sys-matching-table |
| services-namespace | SERVICES_NAMESPACE | key in storage where services list is stored | -services-namespace=sys-robots-list | sys-robots-list |
| workunits-namespace | WORKUNITS_NAMESPACE | key in storage where work units list is stored | -workunits-namespace=sys-channels | sys-channels |
| prom-port | PROM_PORT | Prometheus metrics port | -prom-port=8473 | 9090 |
| ka-time | KA_TIME | KeepAlive time | -ka-time=10s | 10s |
| ka-timeout | KA_TIMEOUT | KeepAlive timeout | -ka-timeout=20s | 20s |
| ka-permit-without-stream | KA_PERMIT_WITHOUT_STREAM | KeepAlive param: if true, client sends keepalive pings even with no active RPCs; if false, when there are no active RPCs, Time and Timeout will be ignored and no keepalive pings will be sent | -ka-permit-without-stream=false | false |
| config-type | - | which type of config to use | -config-type=args or -config-type=env | args |
Build:
docker build -t distributor .
Run:
docker run --restart unless-stopped --name distributor --network sample_net \
-e POLL_INTERVAL=200ms -e LOG=debug -e PING_TIMEOUT=300ms -e -DISTRIBUTION_NAMESPACE=matching-table-namespace \
-e SERVICES_NAMESPACES=oneservices-list-namespace,anotherservices-list-namespace -e WORKUNITS_NAMESPACE=workunits-namespace \
-e REDIS_PASS="" -e REDIS_ADDRS=redis-6379:6379,redis-6380:6380,redis-6381:6381,redis-6382:6382,redis-6383:6383,redis-6384:6384 \
-d distributor