RabbitMQ 教程 - 发布/订阅
发布/订阅
(使用 AMQP 1.0 .NET 客户端)
信息
先决条件
本教程假设 RabbitMQ 已 安装 并在 localhost 上的 标准端口 (5672) 上运行。如果您使用不同的主机、端口或凭据,则需要调整连接设置。
哪里寻求帮助
如果您在学习本教程时遇到困难,可以通过 GitHub Discussions 或 RabbitMQ 社区 Discord 联系我们。
在上一篇教程中,我们创建了一个工作队列。在本教程中,我们将把消息发送给多个消费者——这就是“发布/订阅”模式。
我们将构建一个简单的日志系统:一个程序发送日志,一个或多个接收者打印它们。
交换器
生产者将消息发送到交换机 (exchange),而不是直接发送到队列。交换机根据其类型将消息路由到队列中。
声明一个名为 logs 的 fanout(扇形)交换机
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) 来路由消息。