当前位置: 首页 > news >正文

在 C# .NETCore 中使用 RabbitMQ 实现发布、订阅示例

RabbitMQ 是一个开源消息代理,它允许应用程序通过交换器向队列发送消息,从而实现应用程序之间的异步通信。它支持多种消息传递协议,其中之一就是 AMQP(高级消息队列协议)。在 .NET 生态系统中,可以使用官方的 RabbitMQ .NET 客户端库来操作 RabbitMQ。RabbitMQ 的一种常见消息传递模式是发布/订阅 (pub-sub),它允许将消息广播给多个接收者。在本文中,我们将探讨如何在 .NET 中使用 RabbitMQ 实现发布/订阅模式。

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

理解发布/订阅模式

发布/订阅模式涉及三个主要组件:

发布者:向交易所发送消息,但不知道消息的接收者。
交换器:从发布者接收消息并将其路由到适当的队列。
订阅者(消费者):从队列接收消息。

发布者发送的消息是临时的,除非至少有一个活跃的订阅者,否则不会被保存。交换器会使用各种交换器类型(例如直接交换器、主题交换器、标头交换器和扇出交换器)来决定如何将消息路由到队列。

设置环境

在实现该模式之前,您需要在系统上设置 RabbitMQ。您可以通过其官方网站或使用 Docker 安装 RabbitMQ 服务器。然后,确保您已准备好 .NET 开发环境,并通过将以下RabbitMQ.Client软件包添加到您的项目中来安装适用于 .NET 的 RabbitMQ 客户端:

dotnet add package RabbitMQ.Client

.NET 中的发布/订阅实现

Publisher Code

发布者应用程序创建一个交换器,并向该交换器发送消息:

using RabbitMQ.Client;
using System.Text;

class Publisher
{
public static void Main()
{
var factory = new ConnectionFactory() { HostName = "localhost" };
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
channel.ExchangeDeclare(exchange: "logs", type: "fanout");

                string message = "Hello World!";
var body = Encoding.UTF8.GetBytes(message);

                channel.BasicPublish(exchange: "logs", routingKey: "",
basicProperties: null, body: body);
Console.WriteLine(" [x] Sent {0}", message);
}
}
}
}

Subscriber Code

订阅者监听来自绑定到交换机的特定队列的消息:

using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System;
using System.Text;

class Subscriber
{
public static void Main()
{
var factory = new ConnectionFactory() { HostName = "localhost" };
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
channel.ExchangeDeclare(exchange: "logs", type: "fanout");

var queueName = channel.QueueDeclare().QueueName;
channel.QueueBind(queue: queueName, exchange: "logs", routingKey: "");

            var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
var body = ea.Body.ToArray();
var message = Encoding.UTF8.GetString(body);
Console.WriteLine(" [x] Received {0}", message);
};
channel.BasicConsume(queue: queueName, autoAck: true, consumer: consumer);

            Console.WriteLine(" Press [enter] to exit.");
Console.ReadLine();
}
}
}

关键考虑因素和最佳实践

考虑                                    描述

交易所类型            根据所需的路由行为选择正确的交换类型。要向所有消费者进行广泛广播,请使用fanout。
消息持久性            如果您需要消息持久化,请将消息和队列都配置为持久的。
错误处理               在您的消费者应用程序中实施错误处理来处理错误消息。
消费者确认            确定是否需要自动或手动确认以实现更好的消息处理控制。

结论

得益于 RabbitMQ 提供的强大库,在 .NET 中使用 RabbitMQ 实现发布/订阅模式变得非常简单。使用扇出交换器类型,您可以轻松地将消息广播给多个订阅者,从而提升应用程序的可扩展性和灵活性。通过理解和利用不同的配置并遵循最佳实践,您可以使用 RabbitMQ 在 .NET 中构建高效可靠的基于消息的系统。

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

http://www.dtcms.com/a/528086.html

相关文章:

  • 【MySQL-笔记】数据库MySQL的安装与卸载
  • 网站没有域名wordpress修改鼠标
  • LeetCode 刷题【133. 克隆图】
  • [人工智能-大模型-74]:模型层技术 - 模型训练六大步:③神经网络,预测输出:基本功能与对应的基本组成函数
  • 机器学习锂离子电池!预估电池!
  • Redshift历史SQL运行记录查询
  • 告别信息孤岛:工业无线网桥实现跨车间、跨厂区统一组网
  • 7.2 按钮实验
  • 多语言网站思路柳州市安全教育平台
  • 触摸未来2025-10-25:蓝图绘制
  • 面向对象——设计模式(行为型)
  • 06-MySQL基础查询
  • 蓬莱网站建设哪家专业苏州智能网站开发
  • 医院慢病管理软件系统问题域需求分析文档(示例)
  • Java 大视界 -- Java 大数据机器学习模型在舆情分析中的情感倾向判断与话题追踪
  • 用于小样本故障增量学习的多视图 Shapelet 原型网络
  • 动态规划思想的延伸:计数模式再升级——巧妙捕捉「优美子数组」
  • 徐州提供网站建设要多少钱杭州房产网我爱我家官网
  • 鸿蒙NEXT系列之NDK UI监听组件事件
  • 20251025 分治总结
  • CentOS上安装dpkg的方法
  • 【C++ 泛型编程】基于哈希表封装 unordered_set(附完整源码解析)
  • 【Docker】docker部署一个服务
  • 【C++】set map 的使用
  • mormot.net.sock.pas的总体设计分析
  • 上海企业网站制作哪家专业wordpress适合做大型网站吗
  • 建设银行网站怎么看不见余额数字展馆设计
  • 【数组二分查找+数组反转】2022-11-19
  • 【新版发布】标准版PHP v5.6.4正式版,优化部分用户体验
  • Spring Boot3零基础教程,Profile 环境隔离用法,笔记55