The default mode for managing subscriptions is auto subscribe. When a subscriber endpoint is started, it determines which events it needs to subscribe to. The endpoint then sends subscription messages to the publisher endpoint for those messages. This auto subscription mechanism happens each time the subscriber is restarted.
Messages matching the following criteria will be auto subscribed at startup.
- Defined as an event either using
IEventor by the
- At least one message handler and/or saga exists for the given event.
- If the selected transport does not support publish-subscribe natively, the publisher for that message needs to be specified via the routing API.
Sagas are treated the same as handlers and will cause an endpoint to subscribe to a given event. It is possible to opt-in to the old exclude saga event handling behavior using:
var autoSubscribe = endpointConfiguration.AutoSubscribe(); autoSubscribe.DoNotAutoSubscribeSagas();
In Versions 6 and above it is possible to subscribe to messages not defined as events by manually subscribing to the message type.
A Subscriber will not unsubscribe when it stops, it will remain registered at the publisher to receive events. The publisher still sends events to the queue of the stopped subscriber. When the subscriber is started it will consume the messages from its queue. The subscriber will never lose an event.
Automatic subscriptions by the infrastructure can be disabled using the configuration API:
Events can manually be subscribed and unsubscribed:
await endpoint.Subscribe<MyEvent>() .ConfigureAwait(false); await endpoint.Unsubscribe<MyEvent>() .ConfigureAwait(false);
In Versions 6 and above,
Unsubscribe are accessible via the
IMessageSession available on the
IEndpointInstance or within a Feature startup task.