Rebus with Azure Service Bus,订阅一个接口
Rebus with Azure Service Bus, subscribe to an interface
我想接收实现特定接口的所有消息:
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 订阅基地 interface/class?
Is it possible to subscribe to a base interface/class using Rebus?
很遗憾,没有。
虽然 Rebus 有 polymorphic dispatch,但这仅适用于已收到消息并将被分派给处理程序的情况。
因此,如果您想接收所有实现 IBusItem
的具体类型,您需要为每个具体类型调用 await bus.Subscribe<ConcreteBusItem>()
。
我想接收实现特定接口的所有消息:
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 订阅基地 interface/class?
Is it possible to subscribe to a base interface/class using Rebus?
很遗憾,没有。
虽然 Rebus 有 polymorphic dispatch,但这仅适用于已收到消息并将被分派给处理程序的情况。
因此,如果您想接收所有实现 IBusItem
的具体类型,您需要为每个具体类型调用 await bus.Subscribe<ConcreteBusItem>()
。