I'm new to NServiceBus, but currently using it with SQL Server Transport to send messages between three machines: one belongs to an endpoint called Server
, and two belong to an endpoint called Agent
. This is working as expected, with messages sent to the Agent
endpoint distributed to one of the two machines via the default round-robin.
I now want to add a new endpoint called PriorityAgent
with a different queue and two additional machines. While all endpoints use the same message type, I know where each message should be handled prior to sending it, so normally I can just choose the correct destination endpoint and the message will be processed accordingly.
However, I need to build in a special case: if all machines on the PriorityAgent
endpoint are currently down, messages that ordinarily should be sent there should be sent to the Agent
endpoint instead, so they can be processed without delay. On the other hand, if all machines on the Agent
endpoint are currently down, any Agent
messages should not be sent to PriorityAgent
, they can simply wait for an Agent
machine to return.
I've been researching the proper way to implement this, and haven't seen many results. I imagine this isn't an unheard-of scenario, so my assumption is that I'm searching for the wrong things or thinking about this problem in the wrong way. Still, I came up with a couple potential solutions:
Separately track heartbeats of
PriorityAgent
machines, and add a mutator or behavior to change the destination of outgoingPriorityAgent
messages to theAgent
endpoint if those heartbeats stop.Give
PriorityAgent
messages a short expiration, and somehow handle the expiration to redirect messages to theAgent
endpoint. I'm not sure if this is actually possible.
Is one of these solutions on the right track, or am I off-base entirely?