吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4815|回复: 12
收起左侧

[其他转载] [C# ]使用RabbitMQ的完整图解

[复制链接]
迷恋自留地 发表于 2021-1-26 20:00

C# 使用RabbitMQ的完整图解

1.前言

Message Queue消息队列,简称MQ,是一种应用程序对应用程序的通信方法,应用程序通过读写出入队列的消息来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此通信。

MQ是消费-生产者模型的一个典型代表,一端往消息队列中不断写入消息,而另一端则可以读取或者订阅队列中的消息。

2. 安装

提示:以下的链接下载特别慢,建议到我的网盘下载,包括案例,速度特快(回复rabbit)

1. 下载RabbitMQ

RabbitMQ服务http://www.rabbitmq.com/download.html
在这里插入图片描述
安装完RabbitMQ服务后,会在Windows服务中看到。如果没有Erlang运行环境,在安装过程中会提醒先安装Erlang环境
在这里插入图片描述

2. OTP

点击是就会直接跳转,或者点击链接进行下载
在这里插入图片描述

下载完后进行暗安装在这里插入图片描述

3.使用

打不开web管理工具的请看参考
>web管理工具的地址是:http://localhost:15672
>初始用户名:guest
>初始密码:guest

4.代码实现

消息生产者
class Program
    {
        static void Main(string[] args)
        {
            try
            {
                ConnectionFactory factory = new ConnectionFactory();
                factory.HostName = Constants.MqHost;
                factory.Port = Constants.MqPort;
                factory.UserName = Constants.MqUserName;
                factory.Password = Constants.MqPwd;
                using (IConnection conn = factory.CreateConnection())
                {
                    using (IModel channel = conn.CreateModel())
                    {
                        //在MQ上定义一个持久化队列,如果名称相同不会重复创建
                        channel.QueueDeclare("MyFirstQueue", true, false, false, null);
                        while (true)
                        {
                            string customStr = Console.ReadLine();
                            RequestMsg requestMsg = new RequestMsg();
                            requestMsg.Name = string.Format("Name_{0}", customStr);
                            requestMsg.Code = string.Format("Code_{0}", customStr);
                            string jsonStr = JsonConvert.SerializeObject(requestMsg);
                            byte[] bytes = Encoding.UTF8.GetBytes(jsonStr);

                            //设置消息持久化
                            IBasicProperties properties = channel.CreateBasicProperties();
                            properties.DeliveryMode = 2;
                            channel.BasicPublish("", "MyFirstQueue", properties, bytes);

                            //channel.BasicPublish("", "MyFirstQueue", null, bytes);

                            Console.WriteLine("消息已发送:" + requestMsg.ToString());
                        }
                    }
                }
            }
            catch (Exception e1)
            {
                Console.WriteLine(e1.ToString());
            }
            Console.ReadLine();
        }
    }
消息消费者
class Program
    {
        static void Main(string[] args)
        {
            try
            {
                ConnectionFactory factory = new ConnectionFactory();
                factory.HostName = Constants.MqHost;
                factory.Port = Constants.MqPort;
                factory.UserName = Constants.MqUserName;
                factory.Password = Constants.MqPwd;
                using (IConnection conn = factory.CreateConnection())
                {
                    using (IModel channel = conn.CreateModel())
                    {
                        //在MQ上定义一个持久化队列,如果名称相同不会重复创建
                        channel.QueueDeclare("MyFirstQueue", true, false, false, null);

                        //输入1,那如果接收一个消息,但是没有应答,则客户端不会收到下一个消息
                        channel.BasicQos(0, 1, false);

                        Console.WriteLine("Listening...");

                        //在队列上定义一个消费者
                        QueueingBasicConsumer consumer = new QueueingBasicConsumer(channel);
                        //消费队列,并设置应答模式为程序主动应答
                        channel.BasicConsume("MyFirstQueue", false, consumer);

                        while (true)
                        {
                            //阻塞函数,获取队列中的消息
                            BasicDeliverEventArgs ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
                            byte[] bytes = ea.Body;
                            string str = Encoding.UTF8.GetString(bytes);
                            RequestMsg msg = JsonConvert.DeserializeObject<RequestMsg>(str);
                            Console.WriteLine("HandleMsg:" + msg.ToString());
                            //回复确认
                            channel.BasicAck(ea.DeliveryTag, false);
                        }
                    }
                }
            }
            catch (Exception e1)
            {
                Console.WriteLine(e1.ToString());
            }
            Console.ReadLine();
        }
    }

5.总结

最后的运行结果
在这里插入图片描述

消息生产者_代码GITHUB
https://github.com/PrideJoy/NetTemple/blob/master/MessageProducer/Program.cs
在这里插入图片描述
消息消费者 _代码GITHUB

在这里插入图片描述

6.项目说明

关于仓库说明,https://github.com/PrideJoy/NetTemple/
每一个项目都是自己亲自练习的
这个项目是关于c#基本知识学习的练习,作为我入门的练手程序,自己学习的一个积累,如今共享出来,也希望对学习C#的朋友有点参考价值

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如果觉得可以的话,点点关注不迷路

喜欢开源项目的话,可以点点看看(项目代码也放在里面啦,回复rabbit获取)
在这里插入图片描述

(微信公众号)分享最新的Net和Core相关技术以及实战技巧,更重要的是分享Net项目,不容错过的还有书籍,手写笔记等等。
在这里插入图片描述

参考

在这里插入图片描述

1.安装RabbitMQ无法访问(http://localhost:15672)_解决方案
2.C#调用RabbitMQ实现消息队列
3.在C#中使用消息队列RabbitMQ
4.rabbitmq 安装过程中遇到的 rabbitmq-plugins不是内部命令或外部命令
5.win10 安装RabbitMQ 报错无法将“rabbitmq-plugins”项识别为 cmdlet、函数、脚本文件或可运行程序的名称

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
never_four + 1 + 1 我很赞同!
明月相照 + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

hui00000 发表于 2021-1-26 20:14
感谢分享
明月相照 发表于 2021-1-26 20:17
tomemouse 发表于 2021-1-26 20:26
bsjasd 发表于 2021-1-26 20:38
感谢分享经验
ytfrdfiw 发表于 2021-1-26 21:12
顶一下。
wxk0248 发表于 2021-1-26 21:24
感谢分享
terrylee 发表于 2021-1-27 09:48

学习到了,感谢分享。
tugodxx 发表于 2021-3-4 12:44
学习到了,感谢分享。
wwxb 发表于 2021-3-30 11:31
虽然不懂,但楼主分享精神可佳
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 06:41

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表