rebus - 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 订阅基本接口/类?
解决方案
是否可以使用 Rebus 订阅基本接口/类?
很不幸的是,不行。
虽然 Rebus 具有多态 dispatch,但这仅适用于当消息已被接收并将被分派给处理程序时。
因此,如果您想接收所有实现的具体类型IBusItem
,您需要调用await bus.Subscribe<ConcreteBusItem>()
它们中的每一个。
推荐阅读
- docker - 在生产中使用 rabbitmq 和 docker
- sql - 酒店预订的数据库设计问题
- java - 如何在 MacBook 上对齐黄瓜示例
- bash - 如何在bash中将具有唯一字符串的行添加到文件和具有相同字符串的目录
- reactjs - 如何在具有一组状态的组件中进行多次调度?
- ios - 如何展开具有表格视图的自定义集合视图单元格?
- java - JHipster如何将每个文件名映射到其对应的模板类名?
- react-native - componentDidMount 换屏
- ssh - 在一个会话中运行每个 ssh 命令
- hibernate - 实体中的本地日期时间在保存时忽略给定格式的最后 3 位数字