Description | Originally coming from a more technically organized application layout, in 2016 the step was taken towards a microservice architecture. Each microservice focus on its own functional use cases, business functions and business value. The whole OpenWMS.org system encompasses around 15 different services that serve different purpose and that can be composed differently in end-customer projects. |
|---|---|
Justification | OSGi was a great technology to built modular applications. One of the most important requirements on OpenWMS.org is the ability to extend in a flexible way and to get changes into production without downtime. The best successive architecture style after OSGi is te microservice style, it helps us to deploy changes easily and without downtime and to implement new features quickly. |
Addressing | Modularity, Flexibility, Extendability, Changeability |
Description | Each microservice has its own set of database tables, either relational database tables or NoSQL collections/tables. Tables are differentiated by a naming pattern. Each table has a prefix that points to the owning microservice. All tables can be deployed into a single database, or in multiple databases or database schemas. This is a question of distribution and what need to be deployed where. Relationships between database tables of different microservices are forbidden. |
|---|---|
Justification | It is absolutely fine to use one database for all the tables used in a system. It may also make sense to separate between database schemas, for example to separate WMS tables from TMS or BPMN tables. With this approach we do not get in conflict with the strict data separation enforced in microservice architecture style and still have the flexibility of different deployment forms |
Addressing | Flexibility, Performance |
Queue (Point-to-Point Messaging)A queue delivers each message to only one consumer. | |
|---|---|
Characteristics |
|
Example Use Cases |
|
Pub/SubIn pub/sub, a message is sent to all subscribed consumers. Every subscriber gets its own copy of the message | |
|---|---|
Characteristics |
|
Example Use Cases |
|
Queue | Pub/Sub |
|---|---|
Fat events hurt less here because:
Cons
| Only Thin events proposed, because of
|
Characteristics |
|
|---|---|
Example Use Cases |
|
Characteristics |
|
|---|---|
Example Use Cases |
|
Azure Service Bus Message Broker (Queue & Pub/Sub) | Azure Event Hubs Event Streaming Platform | |
|---|---|---|
Designed for |
|
|
When to take |
|
|
Feature | Azure Service Bus | Azure Event Hubs |
|---|---|---|
Primary Purpose | Enterprise messaging | Big data event ingestion |
Category | Message Broker | Event Streaming Platform |
Messaging Model | Queue + Topic/Subscription | Partitioned event stream (log) |
Typical Message Size | Small/medium business messages | High-volume telemetry/events |
Throughput | Thousands/sec | Millions/sec |
Latency | Low | Very low |
Retention | Message removed after consumption | Time-based retention (1–90 days or more with Capture) |
Replay Events | ❌ No | ✅ Yes |
Ordering | FIFO via sessions | Ordering per partition |
Delivery Guarantee | At-least-once, exactly-once workflows possible | At-least-once |
Transactions | ✅ Supported | ❌ Limited |
Dead Letter Queue | ✅ Built-in | ❌ Not native |
Message Locking | ✅ Yes | ❌ No |
Backpressure Handling | Built-in | Consumer-managed |
Scaling Model | Broker-managed | Partition-based horizontal scale |
Kafka Protocol Support | ❌ No | ✅ Yes (native Kafka API compatible) |