首页 > 解决方案 > Rebus 与 Azure 服务总线,订阅一个接口

问题描述

我想接收所有实现特定接口的消息:

public interface IBusItem
{
    Guid BusItemId { get; }
    DateTime Timestamp { get; }
}

例如,我有这样一条消息:

public class SomeMessage : IBusItem
{
    public Guid BusItemId { get; set; } = Guid.NewGuid();
    public DateTime Timestamp { get; set; } = DateTime.UtcNow;
    public string Message { get; set; }
}

我有一个用于 SomeMessage 的处理程序和另一个用于 IBusItem 的处理程序。如果在接收器中我这样做:

bus.Subscribe<SomeMessage>();

然后调用两个处理程序。

但如果我只想订阅 IBusItem:

bus.Subscribe<IBusItem>();

然后不调用任何处理程序

是否可以使用 Rebus 订阅基本接口/类?

标签: rebusrebus-azureservicebus

解决方案


是否可以使用 Rebus 订阅基本接口/类?

很不幸的是,不行。

虽然 Rebus 具有多态 dispatch,但这仅适用于当消息已被接收并将被分派给处理程序时。

因此,如果您想接收所有实现的具体类型IBusItem,您需要调用await bus.Subscribe<ConcreteBusItem>()它们中的每一个。


推荐阅读