RabbitMQ消息队列中间件
一. RabbitMQ 简介
MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。
RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、 安全。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。
二. RabbitMQ 使用场景
1. 解耦(为面向服务的架构(SOA)提供基本的最终一致性实现)
2. 异步提升效率
3. 流量削峰
三.准备工作
1.官网下载RabbitMQ服务端 https://www.rabbitmq.com/
2.下载Erlang(RabbitMQ依赖项) https://www.erlang.org/downloads
3.安装Erlang

4.安装RabbitMQ

4.设置Erlang\OTP环境变量(指向Erlang\OTP安装目录下的Bin目录)

5.测试Erlang\OTP是否安装成功

6.添加RabbitMQ环境变量(指向安装目录下的sbin目录)

7.查看RabbitMQ状态

8.启动RabbitMQ管理工具

9.登录管理工具在浏览器输入地址http://127.0.0.1:15672/,进入管理页面,账户密码都是guest


10.新建RabbitMQ用户(因为默认用户guest只能在本机连接)

11.点击添加的用户

12.设置权限

到此就部署好了,那么我们举两个栗子
生产者(写数据)和消费者(读数据)来调用RabbitMQ
新建两个.NET FrameWork命令行项目
RabbitMQSend为生产者(写数据)
RabbitMQReceive为消费者(读数据)
NuGet分别都安装RabbitMQ.Client

注意看版本 这里最新版需要.net framework 4.6.1
RabbitMQSend 生产者(写数据)
Program.cs代码如下
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using RabbitMQ.Client; 7 8 namespace RabbitMQSend 9 { 10 class Program 11 { 12 static void Main(string[] args) 13 { 14 ConnectionFactory factory = new ConnectionFactory(); 15 factory.HostName = "192.168.3.180";//RabbitMQ主机 16 factory.UserName = "admin";//用户名 17 factory.Password = "admin";//密码 18 using (IConnection Connection = factory.CreateConnection())//连接服务器 19 { 20 using (IModel Model = Connection.CreateModel())//创建通道 21 { 22 Model.QueueDeclare("Test", false, false, false, null);//创建一个名称为Test的消息队列 23 IBasicProperties basicProperties = Model.CreateBasicProperties(); 24 basicProperties.DeliveryMode = 1; 25 for (int i = 1; i <= 100; i++) 26 { 27 string Message = "这是测试" + i; 28 Model.BasicPublish("", "Test", basicProperties, Encoding.UTF8.GetBytes(Message)); //生产者发送消息(写数据) 29 Console.WriteLine($"Send:{Message}"); 30 } 31 } 32 } 33 Console.ReadLine(); 34 } 35 } 36 }
RabbitMQReceive 消费者(读数据)
Program.cs代码如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
namespace RabbitMQReceive
{
class Program
{
static void Main(string[] args)
{
ConnectionFactory factory = new ConnectionFactory();
factory.HostName = "192.168.3.180";//RabbitMQ主机
factory.UserName = "admin";//用户名
factory.Password = "admin";//密码
using (IConnection Connection = factory.CreateConnection())//连接服务器
{
using (IModel Model = Connection.CreateModel())//创建通道
{
Model.QueueDeclare("Test", false, false, false, null);//连接名称为Test的消息队列
EventingBasicConsumer consumer = new EventingBasicConsumer(Model);//消费者
Model.BasicConsume("Test", true, consumer);//消费消息
consumer.Received += (model, Message) =>//委托消费者接收事件
{
//model为通道 Message为消费者消息
byte[] Body = Message.Body.ToArray();//消息正文
string NewMessage = Encoding.UTF8.GetString(Body);
Console.WriteLine($"Receive:{NewMessage}");
};
Console.ReadLine();
}
}
}
}
}
然后我们先启动消费者监听消息 然后启动生产者发送消息
启动消费者

启动生产者

可以看到消息为同步,而且按照消息队列顺序发送,这里就不特意录视频了 测试同步可以加暂停

浙公网安备 33010602011771号