【读书笔记】VS2022搭建RabbitMQ3.10.5


前言

本篇无创新,都是对下面这篇文章的拙劣模仿。
参考1:https://blog.youkuaiyun.com/lzx1991610/article/details/102970854
参考2:
https://www.cnblogs.com/abeam/p/11872956.html

实验环境:win10、 VS2022
使用语言:C#


提示:以下是本篇文章正文内容

一、背景

RabbitMQ 3.10.5 发布 2022 年 6 月 6 日,RabbitMQ 团队很高兴地宣布 RabbitMQ 3.10.5 的发布,这是 RabbitMQ 3.10.x 系列的维护版本。

此版本需要 Erlang/OTP 23.2 并支持 Erlang 24 和 Erlang 25。


二、安装步骤

1.下载Erlang

Erlang/OTP
Link:https://www.erlang.org/downloads?
【我下的是Erlang/OTP 25.0.1】

2.下载RabbitMQ

Link: https://www.rabbitmq.com/install-windows.html#installer

下载rabbitmq-Server-3.10.5.exe
在这里插入图片描述

3.安装成功

在这里插入图片描述


三、配置环境

点击管理工具
在这里插入图片描述
输入命令:rabbitmq-plugins enable rabbitmq_management
试了一下命令,非常好玩:
停止:net stop RabbitMQ
启动:net start RabbitMQ

在浏览器中输入地址查看:http://127.0.0.1:15672/
使用默认账户登录:guest/ guest
在这里插入图片描述

就进去啦。详细的介绍,可以参考这个link:https://blog.youkuaiyun.com/lzx1991610/article/details/102970854


四、初步使用

1.项目准备

准备两个项目,我这里准备的是Test2(生产者)和test3(消费者),分别引入【RabbitMQ.Client】包即可
在这里插入图片描述

2.代码实现

下面是 test2的RabbitMQProducer.cs的代码。

//生产者
    internal class RabbitMQProducer
    {
        private ConnectionFactory factory;

        public RabbitMQProducer()
        {
            factory = new ConnectionFactory();      //连接 RabbitMQ 工厂实例

            factory.HostName = "localhost";             //要连接到的主机,默认为 localhost

            factory.Port = 5672;                        //连接断开,默认为 -1(5672)

            factory.UserName = "guest";                 //RabbitMQ 连接用户名,默认为 guest

            factory.Password = "guest";                 //RabbitMQ 连接密码,默认为 guest
        }

        public void CreateHello()
        {
            //创建连接对象

            using (var connection = factory.CreateConnection())

            {
                //创建一个新的通道、会话和模型
                using (var channel = connection.CreateModel())

                {

                    /*

                    * 创建一个名为 myQueue1 的消息队列,如果名称相同不会重复创建,参数解释:

                    * 参1:myQueue1, 消息队列名称;

                     * 参2:false, 是否持久化,持久化的队列会存盘,服务器重启后任然存在;

                    * 参3:false, 是否为排他队列,排他队列表示仅对首次声明它的连接可见,并在连接断开时自动删除。这种队列适用于一个客户端同时发送和读取消息的应用场景。

                     * 参4:false, 是否自动删除,自动删除的前提是:至少有一个消费者连接到这个队列,之后所有与这个队列连接的消费者都断开时,才会自动删除。

                     * 参5:设置队列的其他一些参数,如 x-rnessage-ttl、x-expires、x-rnax-length、x-rnax-length-bytes、x-dead-letter-exchange、x-deadletter-routing-key、x-rnax-priority 等。

                     */

                    channel.QueueDeclare("myQueue1", false, false, false, null);

                    var properties = channel.CreateBasicProperties();

                    properties.DeliveryMode = 1;

                    string message = "Hello RabbitMQ";  //消息内容

                    byte[] body = Encoding.UTF8.GetBytes(message);

                    channel.BasicPublish("", "myQueue1", properties, body);    //发送(生产)消息

                    Console.WriteLine($"Send Message: {message}");

                }
            }

            Console.ReadLine();
        }
    }

下面是 test3的RabbitMQConsumer.cs的代码。

public class RabbitMQConsumer
    {
        private ConnectionFactory factory;
        public RabbitMQConsumer()
        {
            factory = new ConnectionFactory();      //连接 RabbitMQ 工厂实例

            factory.HostName = "localhost";             //要连接到的主机,默认为 localhost

            factory.Port = 5672;                        //连接断开,默认为 -1(5672)

            factory.UserName = "guest";                 //RabbitMQ 连接用户名,默认为 guest

            factory.Password = "guest";                 //RabbitMQ 连接密码,默认为 guest
        }

        public void closeHello()
        {
            //不能放入 using 语句中,否则当 using 语句结束后会 Close 连接,EventingBasicConsumer.Received 事件将不会被触发

            var connection = factory.CreateConnection();

            var channel = connection.CreateModel();

            channel.QueueDeclare("myQueue1", false, false, false, null);

            var consumer = new EventingBasicConsumer(channel);  //消费者(指定消息通道)

            channel.BasicConsume("myQueue1", true, consumer);   //消费消息(在当前通道中监听 myQueue1 队列,并进行消费)

            //该事件在接收到消息时触发

            consumer.Received += (sender, e) =>
            {
                byte[] body = e.Body.ToArray();   //消息字节数组
                string message = Encoding.UTF8.GetString(body); //消息内容
                Console.WriteLine($"Received: {message}, {DateTime.Now.ToString("HH: mm:ss fff")}");

            };

            Console.ReadLine();
            connection.Close();

            channel.Close();
        }
    }

3.实验结果

运行完生产者代码之后,在queues中ready会变成1,然后再运行消费者ready就会变成0
在这里插入图片描述


总结

参考1:https://blog.youkuaiyun.com/lzx1991610/article/details/102970854
参考2:https://www.cnblogs.com/abeam/p/11872956.html

再次感谢两位大佬的文章

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值