RabbitMQ-基本使用

embedded/2025/1/17 1:53:36/

1 概述

RabbitMQ中的几个基本概念:

(1)信道(channel):信道是消息的生产者、消费者和服务器之间进行通信的虚拟连接。为什么叫“虚拟连接”呢?因为TCP连接的建立是非常消耗资源的,所以RabbitMQ在TCP连接的基础上构建了虚拟信道。我们尽量重复使用TCP连接,而信道是可以用完就关闭的。

(2)队列(queue):队列是用来进行消息收发的地方,生产者把消息放到队列中,消费者从队列中获取消息。

(3)交换机(exchange):交换机用于把消息路由到一个或者多个队列中。

RabbitMQ介绍:

1 基于erlang 语言开发--- 高并发语言

2 索尼 爱立信 开发的;

3 依赖于erlang 环境;

4 功能全面

5 可视化的插件

2 环境准备

1 VS2022

2 .NET7平台

3 Docker

4 RabbitMQ

5 Linux的云服务器

rabbitmq">3 Docker下安装RabbitMQ

docker search rabbitmq:management
docker pull rabbitmq:management
docker run -d --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq:management

拉取时建议使用management,同时会安装相应环境插件。

Rabbitmq默认端口是:15672—可视化界面,5672----操作数据的时候---通过这个端口去链接。

容器运行成功就可以访问RabbitMQ页面了,地址:http://192.168.xxx.xxx:15672,默认账号密码guest。

rabbitmq">4 C#.Net如何使用RabbitMQ

程序驱动

1 Nuget引入

2 连接接RabbitMQ

3 写入消息

4 定义接受方,消费消息

5 构建生产者消费者模型

1 生产者写入消息到队列

2 消费者获取消息消费掉

6 消息入队全过程

1生产者打开RabbitMq链接

2声明队列

3声明交换机

4绑定队列和交换机

5消息进入到交换机---交换机转发给队列

6消息成功入队

7 落地生产者消费者模型

.NET程序连接RabbitMq

Nuget引入:RabbitMq连接帮助类库 RabbitMQ.Client 6.5.0。

生产者:

{//.NET程序连接RabbitMq//1.Nuget引入 RabbitMq连接帮助类库--RabbitMQ Client string dir = AppDomain.CurrentDomain.BaseDirectory;//当前生产者名称string? producerName = Path.GetFileName(Path.GetDirectoryName(dir));//重点://链接工厂;帮助配置一个完整的链接ConnectionFactory factory = new ConnectionFactory(); //创建链接的工厂 //RabbitMQ服务所在地址factory.HostName = UrlConfig.Rabbitmq_Url;//用户名    factory.UserName = UrlConfig.User;//密码  factory.Password = UrlConfig.Password;//程序调用默认的端口是:5672   factory.Port = 5672;//创建链接using (IConnection connection = factory.CreateConnection()){//创建信道  --高速公路---单车道using (IModel channel = connection.CreateModel()){//创建一个队列---根据名称来判断,如果队列名称存在,就不操作,//如果不存在,就根据名字创建一个队列出来。channel.QueueDeclare(queue: "OnlyProducerMessage", durable: true,exclusive: false, autoDelete: false, arguments: null);//创建一个交换机--后面说channel.ExchangeDeclare(exchange: "OnlyProducerMessageExChange",type: ExchangeType.Direct, durable: true, autoDelete: false, arguments: null);//交换机绑定队列channel.QueueBind(queue: "OnlyProducerMessage",exchange: "OnlyProducerMessageExChange",routingKey: string.Empty, arguments: null);Console.ForegroundColor = ConsoleColor.Red;Console.WriteLine($"=========生产者:{producerName} 已准备就绪=========");int i = 1;{while (true){string message = $"{producerName} : 学习.NET技术_{i}";//smpq协议,需要传递数据格式微byte数组byte[] body = Encoding.UTF8.GetBytes(message);//用指定的频道去发送消息channel.BasicPublish(exchange: "OnlyProducerMessageExChange",routingKey: string.Empty,basicProperties: null,body: body);Console.WriteLine($"=========消息:{message} 已发送=========");i++;Thread.Sleep(500);}}}}
}

消费者:

string dir = AppDomain.CurrentDomain.BaseDirectory;
//当前生产者名称
string? consumerName = Path.GetFileName(Path.GetDirectoryName(dir));ConnectionFactory factory = new ConnectionFactory(); //创建链接的工厂
factory.HostName = UrlConfig.Rabbitmq_Url;//RabbitMQ服务在本地运行
factory.UserName = UrlConfig.User;//用户名
factory.Password = UrlConfig.Password;//密码  
factory.Port = 5672;using (IConnection connection = factory.CreateConnection()) //创建链接
{using (var channel = connection.CreateModel()){Console.ForegroundColor = ConsoleColor.Green;//消费者准备就绪try{//事件驱动模式EventingBasicConsumer consumer = new EventingBasicConsumer(channel);//接受到消息之后,触发事件--就会触发给事件注册的动作;consumer.Received += (model, ea) =>   //接受消息处理的事件;{ReadOnlyMemory<byte> body = ea.Body;string message = Encoding.UTF8.GetString(body.ToArray());Console.WriteLine($"{consumerName}: 接受消息: {message}");};//消息确认----自动确认---同时也明确我这里是接收哪个队列的消息channel.BasicConsume(queue: "OnlyProducerMessage", autoAck: true,consumer: consumer);Console.WriteLine(" Press [enter] to exit.");Console.ReadLine();}catch (Exception ex){Console.WriteLine(ex.Message);}}
}

http://www.ppmy.cn/embedded/154527.html

相关文章

【Linux】从零开始:编写你的第一个Linux进度条小程序

Linux相关知识点可以通过点击以下链接进行学习一起加油&#xff01;初识指令指令进阶权限管理yum包管理与vim编辑器GCC/G编译器make与Makefile自动化构建GDB调试器与Git版本控制工具 文章目录 一、知识铺垫1.1 回车与换行概念1.2 缓冲区 二、实现简单倒计时三、进度条3.1 Verrs…

【 PID 算法 】PID 算法基础

一、简介 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&#xff09;、Differential&#xff08;微分&#xff09;的缩写。也就是说&#xff0c;PID算法是结合这三种环节在一起的。粘一下百度百科中的东西吧。 顾名思义&#xff0c;…

第十章:电子表格软件Excel

文章目录&#xff1a; 一&#xff1a;界面 1.介绍 2.选项卡 2.1 开始 2.2 插入 2.3 布局 2.4 公式 2.5 数据 2.6 审阅 2.7 视图 2.8 开发工具 2.9 图表工具 二&#xff1a;基础 1.工作簿 2.工作表 3.单元格 4.宏 三&#xff1a;数据 1.数据类型 2.自动填充…

理解Spark中运行程序时数据被分区的过程

在Spark中&#xff0c;数据分区是指将数据集分割成多个小的子集&#xff0c;即分区&#xff0c;以便在集群的多个节点上并行处理&#xff0c;从而提高处理效率。以下通过一个具体例子来理解&#xff1a; 例子背景 假设要分析一个包含100万条销售记录的数据集&#xff0c;每条…

linux 端口转发工具rinetd

rinetd是一个轻量级TCP转发工具&#xff0c;简单配置就可以实现端口映射/转发/重定向。 (1) 源码下载 wget https://li.nux.ro/download/nux/misc/el7/x86_64/rinetd-0.62-9.el7.nux.x86_64.rpm(2) 安装rinetd rpm -ivh rinetd-0.62-9.el7.nux.x86_64.rpm (3) 编辑配置文件 …

正则表达式完全指南

# 正则表达式完全指南 正则表达式&#xff08;Regular Expression&#xff0c;简称 regex 或 regexp&#xff09;是一种强大的文本匹配和处理工具。它使用特定的语法规则来描述字符串的匹配模式&#xff0c;广泛应用于文本搜索、替换和数据验证等场景。 ## 1. 基础语法 ### 1.1…

Docker挂载点

在Docker中&#xff0c;挂载点用于将宿主机上的目录映射到容器内的目录&#xff0c;这样可以实现数据的持久化存储和容器之间的数据共享。通过挂载点&#xff0c;容器可以访问宿主机上的文件系统&#xff0c;同时也能够持久化数据&#xff0c;即使容器本身被销毁&#xff0c;数…

Android Room 报错:too many SQL variables (code 1 SQLITE_ERROR) 原因及解决方法

报错信息&#xff1a; android.database.sqlite.SQLiteException: too many SQL variables (code 1 SQLITE_ERROR): while compiling: SELECT * FROM points WHERE id IN (?,?,?,...,?,?,?)SQLiteException: too many SQL variables 通常是由于一次查询或插入的 SQL 语句…