使用Azure Service Bus进行Rebus,订阅接口

时间:2020-03-01 14:15:17

标签: rebus rebus-azureservicebus

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

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订阅基本接口/类?

1 个答案:

答案 0 :(得分:1)

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

不幸的是,没有。

尽管Rebus具有polymorphic dispatch,但这仅适用于已接收到消息并将其分派给处理程序的情况。

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