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();
                }
            }
        }
    }
}

然后我们先启动消费者监听消息 然后启动生产者发送消息

启动消费者

 

 启动生产者

 

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

GitHub传送门 

posted @ 2021-03-09 19:11  昊天888  阅读(151)  评论(0)    收藏  举报