我尝试从一个API发布一个事件,并从多个其他API订阅此事件。我尝试使用Rebus、RabbitMQ和.NET 5来完成此操作。
无论我做什么,消息似乎根本没有发送到队列。
我的代码如下所示
发送API
Startup.cs -配置服务
services.AddRebus(configure => configure
.Logging(x => x.Serilog())
.Transport(x => x.UseRabbitMq("amqp://guest:guest@localhost:5672", "Bus.Users"))
.Routing(x => x.TypeBased()
.Map<UserUpdatedEvent>("Bus.Users")));
Startup.cs -配置
app.ApplicationServices.UseRebus();
触发发布的代码:
var userUpdatedEvent = new UserUpdatedEvent
{
Id = user.Id,
FirstName = user.FirstName,
LastName = user.LastName,
ProfileImageId = user.ProfileImageUuid,
ProfileImageUrl = user.ProfileImageUrl
};
await _bus.Publish(userUpdatedEvent);
每次都会触发此代码,尽管我从未在rabbitMQ管理的队列或错误队列中看到消息。
我已经尝试解决这个问题很长一段时间了,但似乎找不到任何解决办法。有人知道我做错了什么吗?
谨致问候
1条答案
按热度按时间neekobn81#
本部分
告诉Rebus,您希望将
UserUpdatedEvent
类型的消息路由到队列“Bus.Users”,这样当您消息将被放入队列“业务用户”。
这是一个简单的point-to-point channel,发送者直接将消息发送到接收者的输入队列。
在这种情况下,这可能不是您想要的,因为消息是一个事件,您通常使用点对点通道来发送命令,例如
UpdateUserCommand
指示接收者更新用户。另一方面,当你
Rebus将从事件类型中生成一个主题--在您的例子中,它将被命名为“Messages.UserUpdatedEvent,UserUpdatedEvent”,因为Rebus默认使用被发布的类型的简短的、汇编限定的类型名--并将事件发布到该主题。
为了能够接收发布到主题的事件,需要有人订阅它。
然后它将开始接收事件。这是一个publish-subscribe channel,它对于将事件分发给0..n个订阅者非常方便。
我希望你说的有道理🙂