c# Rebus -消息没有被发送到RabbitMQ



我正在尝试从一个API发布事件,并从多个其他API订阅此事件。我正在尝试使用Rebus, RabbitMQ和。net 5来完成这个任务。

无论我做什么,消息似乎根本没有被发送到队列。

我的代码是这样的

<<p>

发送API/strong>Startup.cs - ConfigureServices

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 - Configure

app.ApplicationServices.UseRebus();

触发publish:

的代码
var userUpdatedEvent = new UserUpdatedEvent
{
Id = user.Id,
FirstName = user.FirstName,
LastName = user.LastName,
ProfileImageId = user.ProfileImageUuid,
ProfileImageUrl = user.ProfileImageUrl
};
await _bus.Publish(userUpdatedEvent);

这段代码每次都会被触发,尽管我从来没有在rabbitMQ管理的队列或错误队列中看到消息。

我一直在试图解决这个问题相当一段时间了,但似乎找不到任何解决方案。有人知道我哪里做错了吗?

亲切的问候

这部分

.Routing(x => x.TypeBased()
.Map<UserUpdatedEvent>("Bus.Users"))

告诉Rebus您希望将类型为UserUpdatedEvent的消息路由到队列"bus . users",因此当您

await bus.Send(new UserUpdatedEvent(...));

消息将被放入队列"bus . users"中。

这是一个简单的点对点通道,发送方将消息直接发送到接收方的输入队列。

在这种情况下,这可能不是您想要的,因为消息是一个事件。您通常使用点对点通道发送命令,例如UpdateUserCommand指示接收方更新用户。

另一方面,当你

await bus.Publish(new UserUpdatedEvent(...));

Rebus将从事件类型中生成一个主题—在您的示例中,它将被称为"Messages之类的内容。UserUpdatedEvent, UserUpdatedEvent",因为Rebus默认使用正在发布的类型的简短的、程序集限定的类型名称,并将事件发布到该主题。

为了能够接收发布到主题的事件,需要有人订阅该主题。在您的例子中,您只需让订阅者

await bus.Subscribe<UserUpdatedEvent>();

,然后它将开始接收事件。这是一个发布-订阅通道,用于将事件分发到0..n用户。

我希望你明白🙂

最新更新