跳至主内容

RabbitMQ 教程 - 发布/订阅

发布/订阅

(使用 AMQP 1.0 .NET 客户端)

信息

先决条件

本教程假设 RabbitMQ 已 安装 并在 localhost 上的 标准端口 (5672) 上运行。如果您使用不同的主机、端口或凭据,则需要调整连接设置。

哪里寻求帮助

如果您在学习本教程时遇到困难,可以通过 GitHub DiscussionsRabbitMQ 社区 Discord 联系我们。

上一篇教程中,我们创建了一个工作队列。在本教程中,我们将把消息发送给多个消费者——这就是“发布/订阅”模式。

我们将构建一个简单的日志系统:一个程序发送日志,一个或多个接收者打印它们。

交换器

生产者将消息发送到交换机 (exchange),而不是直接发送到队列。交换机根据其类型将消息路由到队列中。

声明一个名为 logsfanout(扇形)交换机

IExchangeSpecification exchangeSpec = management.Exchange(exchangeName).Type("fanout");
await exchangeSpec.DeclareAsync();

绑定

将一个临时的排他队列绑定到该交换机

IQueueSpecification tempQueue = management.Queue().Exclusive(true).AutoDelete(true);
IQueueInfo queueInfo = await tempQueue.DeclareAsync();
string queueName = queueInfo.Name();

IBindingSpecification binding = management.Binding()
.SourceExchange(exchangeSpec)
.DestinationQueue(queueName)
.Key(string.Empty);
await binding.BindAsync();

发布者使用 PublisherBuilder().Exchange(exchangeName);消费者订阅 queueName 并在处理程序中调用 ctx.Accept()

运行

来自 dotnet-amqp

dotnet run --project ReceiveLogs/ReceiveLogs.csproj
dotnet run --project EmitLog/EmitLog.csproj

源码

现在我们可以继续学习教程 4,了解如何根据路由键 (routing keys) 来路由消息。

© . This site is unofficial and not affiliated with VMware.