masstransit - 了解 MassTransit 中的 SubscribtionEndpoint 和 RecieveEndpoint
问题描述
我正在尝试结合 Azure 服务总线来了解 MassTransit 配置。
在配置时有 2 种重载方法:SubscriptionEndpoint<T>
和RecieveEndpoint
. 我如何理解 MT 和 ASB 的消息传递是如何工作的。
有两种消息:事件和命令。事件通过Publish<T>
方法发布并传递到主题。它们可以被许多不同的应用程序使用。命令通过Send<T>
方法发送并传递到队列。来自队列的消息只被消费一次(例如并发读者)。
所以,我认为 SubscritionEndpoint 代表事件的配置,因此它具有<T>
通过类型约定进行路由,而 RecieveEndpoint 用于连接命令发送者和命令处理程序。
但是我的测试应用程序说,无论我使用 SubscritionEndpoint 或 RecieveEndpoint 的天气,我仍然可以接收事件。
让我们考虑示例:
cfg.ReceiveEndpoint(host, queueName: "AnotherSubscirber2", configure: configurator =>
{
configurator.Handler<ObjectCreatedB>(context =>
{
Console.WriteLine("Another subscirber, object b created");
return Task.CompletedTask;
});
});
第二个参数的名称为 queueName,但用作主题的订阅者名称。当我使用 发布事件时publishEndpoint.Publish<ObjectCreatedB>
,我能够处理此消息。所以 MT 已经订阅了这个主题:
它怎么知道它需要倾听ObjectCreatedB
?队列名称是,AnotherSubscirber2
但 MT 创建了订阅AnotherSubscirber2
。参数命名是否正确?
如果我添加此代码,我仍然可以完成相同的操作:
cfg.SubscriptionEndpoint<ObjectCreatedB>(host, subsriberName, configurator =>
{
configurator.Consumer<ObjectBCreatedEventHandler>();
});
那么,有什么区别呢?那么如何注册命令处理程序而不是事件处理程序?还是我错过了什么?我的示例代码在这里。
提前致谢!
解决方案
RecieveEndpoint
用于订阅 Azure 服务总线队列(您可以传递队列名称),而用于SubscriptionEndpoint
订阅 Azure 服务总线主题订阅(您可以传递主题路径和订阅名称)。
MassTransit 文档中有关发送与发布的更多信息。
推荐阅读
- python - 尽管在 os.environ 中设置了代理,但 Cartopy 无法下载代理后面的数据
- php - 记录所有 API 请求和响应 + Slim 框架
- r - 未经授权:需要身份验证 - 尝试拉取或运行公共图像
- java - hibernate中的LEFT JOIN表映射
- angular - 无法显示数据表中的数据
- android - 更改应用程序名称后,我无法在手机上调试。[安卓]
- c++ - 以参数为指针的模拟函数
- gcc - STM32 + GCC v8 + Qt Creator + Qbs:在 __libc_init_array 中崩溃
- android - 在 gradle 中创建具有多个 aar 文件作为依赖项的顶级“aar”
- python - 问题 Telethon python 库 - (TELEGRAM)