Behind the tech
Monitoring Tools: How uh!ive Supervises Its Infrastructure
Here, we will discuss the monitoring tools used by uh!ive to oversee these services. Monitoring tools not only allow us to stay informed about…
July 23, 2026
Behind the tech
In this new post, let’s talk about the actual implementation of core principles of the event driven architecture.
The topology describes how the bus is implemented on the message broker.
As a message broker, we chose RabbitMQ for its reliability record and ease of use.
In RabbitMQ, the topology is set up by instantiating exchanges and queues.
Exchanges are kind of routers, and queues are bound, using subscriptions to particular routing keys , to them by client applications to store their messages waiting for processing. It is a good practice to consider the queues as private to the logical service (but are shared by the workers of that logical service). We use the message type name as a routing key.
The topology is made of three exchanges:
The Result of a Command is sent to the commands exchange too.
Instances of a same logical service are called workers of that service, and they share the same queue. The broker guarantees that a message is processed by one and only one worker of the pool attached to the queue.
The message processing acknowledgment by clients is a very useful mechanism to ensure no data is lost, that is, a message is guaranteed to be processed at least once, and to allow efficient load balancing. Indeed, the message broker won’t remove a message from the queue until the worker who took it for processing tells it that it has finished its job. During this time, the message is reserved. If the worker who took the message goes down before acknowledging, the message becomes available for any other worker, or the same worker when it comes back. Moreover, the broker knows at any given time which workers are busy and which ones are idle, so it can better share the load between them.
Note that this is the base topology. As the topology is created by the services themselves instead of a central configuration, they can extend it locally (i.e. on their side) for their own needs. That also means they must all agree on the base topology exposed above to join the bus.
The topology describes how the broker routes the messages and what guarantees it must provide.
The EDA also requires that the services implement some basic rules to ensure reliability and performance:
To avoid code duplication, we developed mini-frameworks (in Python, Elixir and Rust) that implement this base topology and all the required behaviors of the services. We’ll talk about them in the next post: Framework and tools!
Behind the tech
Here, we will discuss the monitoring tools used by uh!ive to oversee these services. Monitoring tools not only allow us to stay informed about…
July 23, 2026
Behind the techProduct
uh!ive provides a comprehensive suite of services for processing and analyzing voice (speech analytics, speech-to-text), along with a web application to access…
May 5, 2026