Subscriber Channel Events¶
Subscribers expose RabbitMQ channel-level events through the common IAsyncBrokerClient contract.
This allows consumer applications to observe broker/channel behavior while consuming messages.
Enable Channel Events¶
Channel events are enabled through the subscriber descriptor.
var descriptor = new SubscriberBoundDescriptor
{
EnableChannelEvents = true,
Queue = new QueueDescriptor
{
Name = "orders.created",
Durable = true
},
Exchange = new ExchangeDescriptor
{
Name = "orders",
Type = ExchangeTypes.Direct,
Durable = true
},
Binder = new BinderDescriptor
{
RoutingKey = "orders.created"
}
};
Register Event Handlers¶
A subscriber exposes:
IDelegateHandler<ChannelEventArgs> OnChannelEventFired { get; }
You can register one or more handlers.
subscriber.OnChannelEventFired.Add(
async (sender, args) =>
{
var eventText = args.ToString();
Console.WriteLine(
$"channel event: {DateTime.UtcNow:u}, {eventText}");
await Task.CompletedTask;
});
EventTag¶
ChannelEventArgs.EventTag identifies the channel event raised by the RabbitMQ client.
Common event tags include:
| EventTag | Description |
|---|---|
FlowControl |
RabbitMQ changed the channel flow-control state. |
CallbackException |
RabbitMQ raised a callback exception on the channel. |
ModelShutdown |
The channel/model was shut down. |
Multiple Handlers¶
Multiple handlers can be registered.
subscriber.OnChannelEventFired.Add(
async (sender, args) =>
{
Console.WriteLine(args.EventTag);
await Task.CompletedTask;
});
subscriber.OnChannelEventFired.Add(
async (sender, args) =>
{
// Send the event to telemetry or monitoring.
await Task.CompletedTask;
});
Handler Errors¶
If a channel event handler throws an exception, the exception belongs to the handler logic.
Keep handlers lightweight and resilient.
subscriber.OnChannelEventFired.Add(
async (sender, args) =>
{
try
{
Console.WriteLine(args.ToString());
}
catch (Exception exception)
{
Console.WriteLine(exception.Message);
}
await Task.CompletedTask;
});
When To Use¶
Subscriber channel events are useful for:
- diagnostics;
- observability;
- broker troubleshooting;
- monitoring flow-control events;
- detecting channel shutdowns.
Difference From Message Handling¶
Channel events are not message delivery events.
| Feature | Purpose |
|---|---|
Received |
Handles application messages delivered to the subscriber. |
OnChannelEventFired |
Observes RabbitMQ channel-level events. |
Use Received to process messages.
Use OnChannelEventFired to observe channel behavior.