We're currently setting up a CQRS-based project. Each Web-project instance runs NEventStore, however all share the same EventStore persistence (underlying database).
Now we want to publish the stored events: not only to our ReadModel (one per Web-project instance) but also to additional event consumers (e.g. legacy applications, which also need to be informed in some way of events from our system, and many more).
Therefore we have x event consumers (= event handlers) and y event publishers but only one "real source" of events (the underlying EventStore database).
Q1: Is there now a best practice to connect those systems via Publish/Subscribe?
We thought about publishing the events from the EventStore via NServiceBus. All the consumers should subscribe for the event types they need - therefore each consumer also needs to subscribe at probably more than one publisher - Q2: Is this even possible? We've read that you cannot subscribe for the same event at multiple locations, see: David Boike "Once you subscribe to Message1 at QueueName@WebServer1, you will not also be able to subscribe to Message1 coming from QueueName@WebServer2."
Additional open questions: Q3: How to detect that a consumer has been shut down forever (if it has not successfully unsubscribed from the bus). -> Queue runs full?! How to differentiate this from the situation where it only lost the network connection for a bit?
Q4: What happens if the connection between subscription service and EventStore is not reliable and fails? Consumers register successfully at the subscription service but the EventStore is not aware of the new subscription and does not deliver messages...
Q5: In general: How does NServiceBus handle queues? What happens when the consumer is not reachable for a long amount of time (e.g. a few days)?