RabbitMQ消息列队

RabbitMQ消息列队

RabbitMQ安装

  1. 下载RabbitMQ
    RabbitMQ服务:http://www.rabbitmq.com/download.html
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述在安装之前我们要安装RabbitMQ 的依赖环境,需要另外安装
    Erlang 安装 https://www.erlang-solutions.com/resources/download.html
    一定要注意 RabbitMQ 的版本和Erlang版本是否兼容
    在这里插入图片描述在这里插入图片描述
    最后我们一定要先安装配置依赖环境 Erlang\OTP
    直接运行下载好的 我们运行otp_win64_22.1.exe
    安装完成后,设置环境变量如下:
    在这里插入图片描述
    然后运行CMD,输入erl,测试安装是否成功,如下图:
    在这里插入图片描述
    安装rabbitmq-server
    安装完依赖后,我们接着安装rabbitmq-server-3.8.0.exe。
    在这里插入图片描述
    CDM命令
    rabbitmq-plugins enable rabbitmq_management
    在这里插入图片描述 rabbitmq-server.bat start
    在这里插入图片描述
    启动成功后,在浏览器输入地址http://127.0.0.1:15672 进入管理页面,账户密码都是guest
    管理页面介绍https://baijiahao.baidu.com/s?id=1732891548341088166&wfr=spider&for=pc

在这里插入图片描述至此RabbitMQ安装完毕

RabbitMQ的应用

我们在安装之前,MQ主要用于削峰
MQ全称为Message Queue,即消息队列。“消息队列”是在消息的传输过程中保存消息的容器。它是典型的:生产者、消费者模型。生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息。因为消息的生产和消费都是异步的,而且只关心消息的发送和接收,没有业务逻辑的侵入,这样就实现了生产者和消费者的解耦。

本地应用开始
首先创建两个控制台应用程序,KibaRabbitMQSend和KibaRabbitMQReceived。
然后引入RabbitMQ的开源类库。
在C#里使用RabbitMQ开源类库非常简单,可以去官网下载一个.NET版本的RabbitMQ客户端类库,也可以直接在Nuget上搜索RabbitMQ,然后安装,如下图:
在这里插入图片描述一、KibaRabbitMQSend
安装完RabbitMQ开源类库后,我们编写代码,实现向RabbitMQ服务器发送消息,代码如下:

using RabbitMQ.Client;
using System;
using System.Text;
using System.Threading;

namespace KibaRabbitMQSend
{
   public class Program
    {
        static void Main(string[] args)
        {
            var factory = new ConnectionFactory();
            factory.HostName = "localhost";//主机名,Rabbit会拿这个IP生成一个endpoint,这个很熟悉吧,就是socket绑定的那个终结点。
            factory.UserName = "guest";//默认用户名,用户可以在服务端自定义创建,有相关命令行
            factory.Password = "guest";//默认密码

            using (var connection = factory.CreateConnection())//连接服务器,即正在创建终结点。
            {
                //创建一个通道,这个就是Rabbit自己定义的规则了,如果自己写消息队列,这个就可以开脑洞设计了
                //这里Rabbit的玩法就是一个通道channel下包含多个队列Queue
                using (var channel = connection.CreateModel())
                {

                    for (int i = 0; i < 10000; i++)
                    {
                        channel.QueueDeclare("kibaQueue", false, false, false, null);//创建一个名称为kibaQueue的消息队列
                        var properties = channel.CreateBasicProperties();
                        properties.DeliveryMode = 1;
                        string message = i+" I am Kiba518"; //传递的消息内容
                        channel.BasicPublish("", "kibaQueue", properties, Encoding.UTF8.GetBytes(message)); //生产消息
                        Console.WriteLine($"发送 Send :{message}");
                        Thread.Sleep(500);
                    }

                    //channel.QueueDeclare("kibaQueue", false, false, false, null);//创建一个名称为kibaqueue的消息队列
                    //var properties = channel.CreateBasicProperties();
                    //properties.DeliveryMode = 1;
                    //string message = "I am Kiba518"; //传递的消息内容
                    //channel.BasicPublish("", "kibaQueue", properties, Encoding.UTF8.GetBytes(message)); //生产消息
                    //Console.WriteLine($"Send:{message}");
                }
            }
        }
    }
}

在这里插入图片描述运行代码
然后我们使用命令行rabbitmqctl list_queues,去RabbitMQ的服务器查看当前消息队列,如下图:
在这里插入图片描述
二、KibaRabbitMQReceived
现在我们编写接收消息代码

using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System;
using System.Text;
using System.Threading;

namespace KibaRabbitMQReceived
{
   public class Program
    {
        static void Main(string[] args)
        {
            var factory = new ConnectionFactory();
            factory.HostName = "localhost";
            factory.UserName = "guest";
            factory.Password = "guest";

            while (true)
            {
                using (var connection = factory.CreateConnection())
                {
                    using (var channel = connection.CreateModel())
                    {
                        channel.QueueDeclare("kibaQueue", false, false, false, null);

                        /* 这里定义了一个消费者,用于消费服务器接受的消息
                         * C#开发需要注意下这里,在一些非面向对象和面向对象比较差的语言中,是非常重视这种设计模式的。
                         * 比如RabbitMQ使用了生产者与消费者模式,然后很多相关的使用文章都在拿这个生产者和消费者来表述。
                         * 但是,在C#里,生产者与消费者对我们而言,根本算不上一种设计模式,他就是一种最基础的代码编写规则。
                         * 所以,大家不要复杂的名词吓到,其实,并没那么复杂。
                         * 这里,其实就是定义一个EventingBasicConsumer类型的对象,然后该对象有个Received事件,
                         * 该事件会在服务接收到数据时触发。
                         */
                        var consumer = new EventingBasicConsumer(channel);//消费者
                        channel.BasicConsume("kibaQueue", true, consumer);//消费消息
                        consumer.Received += (model, ea) =>
                        {
                            var body = ea.Body.ToArray();
                            var message = Encoding.UTF8.GetString(body);
                            Console.WriteLine("接收"+message);
                        };
                    }
                }
                Thread.Sleep(300);
            }
        }

    }
}

在这里插入图片描述安装
https://www.cnblogs.com/mq0036/p/11726733.html
https://blog.csdn.net/qq_40732336/article/details/113186732

部署问题
https://www.cnblogs.com/yyee/p/14291300.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值