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

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

文章目录

  • RabbitMQ入门:"Hello World!" 教程(一)
    • 一、引言
    • 二、安装RabbitMQ
      • 2.1 下载和安装
      • 2.2 验证安装
    • 三、实战:"Hello World!" 示例
      • 3.1 生产者(发送消息)
      • 3.2 消费者(接收消息)
      • 3.3 运行示例
    • 四、结论

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寻求帮助。


http://www.kler.cn/a/397973.html

相关文章:

  • 微信小程序设置屏幕安全距离
  • vue3中pinia状态管理库使用以及持久化配置方法总结
  • HMI FUXA测试
  • 【python】用 Scrapy 实现高效爬虫项目
  • 《Java核心技术 卷I》用户界面AWT事件继承层次
  • 后端——接口文档(API)
  • Uniapp踩坑input自动获取焦点ref动态获取实例不可用
  • docker启动训练容器教程
  • html数据类型
  • 【项目设计技巧】客户端SDK的开发
  • Linux驱动开发——pinctrl 和 和 gpio 子系统实验
  • 前缀和算法习题篇(上)
  • 【点云上采样】最近邻插值上采样算法 增加点云密度
  • C++ 编程基础(5)类与对象 | 5.8、面向对象五大原则
  • vue3中将在线url地址转为图片显示方法教程
  • RabbitMQ 通道(Channel)详解:方法使用、消息确认与拒绝
  • 零基础怎么开始学网络安全(非常详细)零基础入门到精通
  • Mac Java 使用 tesseract 进行 ORC 识别
  • [Qt] Qt删除文本文件中的某一行
  • springboot基于Web足球青训俱乐部管理后台系统开发(代码+数据库+LW)
  • 【SpringBoot】23 文件预览(kkFileView)
  • 前端传数组 数据库存Json : [1,2,3]格式
  • Bugku CTF_Web——文件上传
  • 19.UE5道具掉落
  • 【功耗现象】com.gorgeous.lite后台Camera 使用2小时平均电流200mA耗电量400mAh现象
  • 想租用显卡训练自己的网络?AutoDL保姆级使用教程(PyCharm版)