Short description around RabbitMQ usage in Digizuite. Important is to mention This is a brief description of RabbitMQ in relation to Digizuite. It's really Important that you only want to change the RabbitMQ configuration if the customer specifically asks for it.
RabbitMQ documentation: https://www.rabbitmq.com/documentation.html
NServiceBus RabbitMQ docsdocumentation: https://docs.particular.net/transports/rabbitmq/
...
Break down of RabbitMQ's relation to Digizuite:
- RabbitMQ is multi-tenant and can be structured in a concept called Virtual Hosts (https://www.rabbitmq.com/vhosts.html).
- Digizuite utilize utilizes the Virtual Host concept to separate queues, exchanges, and bindings between systems (this from each other. This allows you to utilize an existing rabbit RabbitMQ queue as an example so that systems on the same server can be separated on the same server and with a vhost in RabbitMQ for each of them systems).
In the local Rabbit Management studio you can see all virtual hosts like this (localhost:15672): - For each vhost, we do create a publish queue and a number of subscription queues (right now there is a sub queue for DC and one for all other services such as audit and ai).
- To exchange messages between the queues we use the conventional routing topology as per NServiceBus (https://docs.particular.net/transports/rabbitmq/routing-topology) rather than the Direct Routing with routing keys as I originally preferred. The reason is that conventional routing takes into consideration the inheritance aspect and therefore generating all exchanges for all interfaces as illustrated below:
...
You want to see these two connections (if more as below it is also okay):
*.dam.core.subscriber
*.dam.core.webhost.subscriber
If you do not see these then you want to recycle the two highlighted:
...