High availability process manager

Hi everyone,

I trying to set up 2 process managers running the same code. But I need only one to handle the events, the other one should handle them only if the first one is disconnected, to get High Availability.

I’ve tried to set one persisted subscription, with the buffer size at maximum on a “dispatch to one” strategy. Bu I not getting a lot of “Retrying message” errors until I have to restart the event store.

What should be the right way to set 1 main process manager and the second as contingency plan?


Prefer-one will prefer to send to the first connected client. It will
dispatch to the second connected client only if the buffer of the
first connected client is full. If you disconnect the first connected
client the messages will be retried to the second.

This does not sound like what you want.

How are you testing? Leaving the first connected client connected will
result in messages continuing to be delivered to it.

For process managers you likely don't want this strategy. You will
probably prefer a pinned strategy assuming you still require generally
ordered messages (competing consumers can't give you perfect
ordering). Round robin can also be used assuming you handle out of
order messages between instances (which you should)



Hi Greg,

When you say that “competing consumers can’t give you perfect ordering”, that means that either:

  • Each consumer will receive ordered events, but can’t be ordered between other consumers? For example, event 1 to 10 to the first consumer, and event 11 to 20 to the other one (at the same time).


  • The events will be received without ordering on each consumer? For example, 1, 3, 5, 4 to the first, and 2, 7, 6 to the other one.



Depends on strategy behaviours are discussed here:
(see bottom)