RabbitMQ入门:“Hello World!“ 教程(一)

RabbitMQ入门:“Hello World!” 教程(一)

一、引言

在现代软件开发中,消息队列系统扮演着越来越重要的角色。RabbitMQ作为一个广泛使用的开源消息代理,它帮助我们解耦应用组件,提高系统的可靠性和扩展性。本文将带你入门RabbitMQ,通过一个简单的"Hello World!"示例,让你了解如何使用.NET/C#客户端与RabbitMQ交互。
在这里插入图片描述

二、安装RabbitMQ

在开始之前,确保你已经正确安装并运行了RabbitMQ服务。

2.1 下载和安装

  1. 访问RabbitMQ官网,下载适合你操作系统的版本。
  2. 按照提供的指南完成安装。
  3. docker部署方式如下:
docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:4-management

2.2 验证安装

打开浏览器,访问http://localhost:15672/,这是RabbitMQ的管理界面。如果能够看到登录页面,说明RabbitMQ已经成功运行(注:初始账号和密码为:guest)。
在这里插入图片描述

三、实战:“Hello World!” 示例

我们将通过编写两个C#程序来实现一个简单的消息发送和接收示例。
在这里插入图片描述

3.1 生产者(发送消息)

using System.Text; // 引入命名空间,用于字符串编码
using RabbitMQ.Client; // 引入RabbitMQ客户端库

// 创建连接工厂,并设置RabbitMQ服务器地址
var factory = new ConnectionFactory { HostName = "localhost" };
using var connection = await factory.CreateConnectionAsync(); // 创建连接
using var channel = await connection.CreateChannelAsync(); // 创建通信频道

// 声明队列,如果队列不存在则创建
await channel.QueueDeclareAsync(queue: "hello",
                     durable: false, // 队列非持久化
                     exclusive: false, // 队列不是排他性的
                     autoDelete: false, // 队列在消费完成后不自动删除
                     arguments: null);

// 要发送的消息
const string message = "Hello World!   Hello World!   Hello World!";
var body = Encoding.UTF8.GetBytes(message); // 将字符串编码为字节数组

// 发布消息到队列,使用默认的交换机和路由键
await channel.BasicPublishAsync(exchange: string.Empty, routingKey: "hello", body: body);
Console.WriteLine($"Producer发送消息:{message}"); // 打印消息发送确认

3.2 消费者(接收消息)

using System.Text; // 引入命名空间,用于字符串编码
using RabbitMQ.Client; // 引入RabbitMQ客户端库
using RabbitMQ.Client.Events; // 引入RabbitMQ事件处理库

// 创建连接工厂,并设置RabbitMQ服务器地址
var factory = new ConnectionFactory { HostName = "localhost" };
using var connection = await factory.CreateConnectionAsync(); // 创建连接
using var channel = await connection.CreateChannelAsync(); // 创建通信频道

// 声明队列,如果队列不存在则创建
await channel.QueueDeclareAsync(queue: "hello",
                     durable: false, // 队列非持久化
                     exclusive: false, // 队列不是排他性的
                     autoDelete: false, // 队列在消费完成后不自动删除
                     arguments: null);

Console.WriteLine("等待消息:"); // 打印等待消息提示

// 创建一个事件驱动的消费者
var consumer = new AsyncEventingBasicConsumer(channel);
// 设置接收到消息时的回调函数
consumer.ReceivedAsync += (model, ea) =>
{
    var body = ea.Body.ToArray();
    var message = Encoding.UTF8.GetString(body);
    Console.WriteLine($"Consumer接收到消息: {message}");
    return Task.CompletedTask;
};
// 订阅队列,自动确认消息
await channel.BasicConsumeAsync("hello", autoAck: true, consumer: consumer);
Console.ReadLine();

3.3 运行示例

打开两个终端窗口,先运行消费者程序,然后运行生产者程序。消费者将打印出从生产者接收到的消息。
分别运行\ReceiveApp\bin\Debug\net8.0\ReceiveApp.exe\SendApp\bin\Debug\net8.0\SendApp.exe,可以看到一开始是没有消息进来的,当运行SendApp.exxe后,ReceiveApp.exe就有接收到消息了(注:可以运行多个SendApp.exe,就可看到ReceiveApp.exe一直有接收到消息)。
在这里插入图片描述

四、结论

通过这个简单的"Hello World!"示例,我们了解了RabbitMQ的基本概念和操作。我们学习了如何安装RabbitMQ,创建生产者和消费者程序,以及如何发送和接收消息。RabbitMQ的强大之处在于其灵活性和可靠性,它能够处理高并发的消息传递,并且支持多种消息协议。希望这篇文章能够帮助你入门RabbitMQ,并在你的项目中有效地使用它。如果你在实践中遇到任何问题,可以通过RabbitMQ社区Discord或GitHub Discussions寻求帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值