.net core RabbitMQ 消息队列
上篇我们说到erlang的安装,现在有了基础前提,就可以继续安装RabbitMQ了!
这里我选用的RabbitMQ版本是:

PS:这个RabbitMQ版本是要对应前面erlang版本,所以前面我们安装的版本是20.3,因为最大支持21.X版本的erlang才能安装 rabbitmq-server-3.7.10
1.安装RabbitMQ
download
下载完执行exe文件,安装到自己选用的目录,并配置环境变量
rabbitmq的基本操作:
- 启动:rabbitmq-server -detached
- 关闭:rabbitmqctl stop
- 启动:rabbitmqctl status
2.配置rabbitmq网页管理插件
以管理员运行命令提示启用插件:
rabbitmq-plugins enable rabbitmq_management
打开浏览器页面:http://localhost:15672 可以看到

默认登陆为:guest/guest
3.开启rabbitMQ远程访问
- 添加用户,用户名:XRom 密码:XRom123
rabbitmqctl add_user XRom XRom123
- 添加权限
rabbitmqctl set_permissions -p "/" XRom ".*" ".*" ".*"
- 修改用户角色
rabbitmqctl set_user_tags XRom administrator
然后就可以远程访问了,可以用新增的用户登录RabbitMQ

4.Producer与Exchange
- Producer
 消息的生产者,也就是创建消息的对象
- Exchange
 消息的接受者,也就是用来接收消息的对象,Exchange接收到消息后将消息按照规则发送到与他绑定的Queue中。下面我们来定义一个Producer与Exchange。
新建.net core 控制台项目,并引入NuGet包


接下来可以用代码看实现效果:
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System;
using System.Text;
using System.Threading;
namespace RabbitMQConsole
{
    class Program
    {
        /// <summary>
        ///  创建只读连接对象
        /// </summary>
        private static readonly ConnectionFactory rabbitMqFactory = new ConnectionFactory()
        {
            HostName = "",//这里写自己电脑hostname,可以通过命令提示符,直接输入hostname查询
            Port = 5672,
            UserName = "XRom",
            Password = "XRom123",
            VirtualHost = "/"
        };
        static void Main(string[] args)
        {
            var exchange = "change2";
            var route = "route2";
            var queue = "queue2";
            using (IConnection conn = rabbitMqFactory.CreateConnection())
            {
                using (IModel channel = conn.CreateModel())
                {
                    channel.ExchangeDeclare(exchange, type: "direct", durable: true, autoDelete: false);//创建change2
                    channel.QueueDeclare(queue, durable: true, exclusive: false, autoDelete: false);//创建queue2
                    channel.QueueBind(queue, exchange, route);//将queue2绑定到change2
                    #region 发送消息
                    var props = channel.CreateBasicProperties();
                    props.Persistent = true; //持久化
                    channel.BasicPublish(exchange, route, true, props, Encoding.UTF8.GetBytes("hello rabbitmq!!"));
                    #endregion
                    #region 消费消息
                    //while (true)
                    //{
                    //    var message = channel.BasicGet(queue, true);  //第二个参数说明自动释放消息,如为false需手动释放消息
                    //    if (message != null)
                    //    {
                    //        var msgBody = Encoding.UTF8.GetString(message.Body);
                    //        Console.WriteLine(string.Format("***接收时间:{0},消息内容:{1}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), msgBody));
                    //    }
                    //    System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1));
                    //}
                    #endregion
                    #region 让失败的消息回到队列中
                    //while (true)
                    //{
                    //    var message = channel.BasicGet(queue, false);
                    //    if (message != null)
                    //    {
                    //        var msgBody = Encoding.UTF8.GetString(message.Body);
                    //        Console.WriteLine(string.Format("***接收时间:{0},消息内容:{1}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), msgBody));
                    //        Console.WriteLine(message.DeliveryTag);   //当前消息被处理的次序数
                    //    if (1 == 1)
                    //            channel.BasicReject(message.DeliveryTag, true);
                    //    }
                    //    System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1));
                    //}
                    #endregion
                    #region 监听消息
                    //channel.BasicQos(prefetchSize: 0, prefetchCount: 20, global: false);  //一次接受10条消息,否则rabbit会把所有的消息一次性推到client,会增大client的负荷
                    //EventingBasicConsumer consumer = new EventingBasicConsumer(channel);
                    //consumer.Received += (model, ea) =>
                    //{
                    //    Byte[] body = ea.Body;
                    //    String message = Encoding.UTF8.GetString(body);
                    //    Console.WriteLine(message + Thread.CurrentThread.ManagedThreadId);
                    //    channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false);
                    //};
                    //channel.BasicConsume(queue: queue, autoAck: false, consumer: consumer);
                    //Console.ReadLine();
                    #endregion
                }
            }
        }
    }
}


.net core RabbitMQ 消息队列的更多相关文章
- .net core使用rabbitmq消息队列 (二)
		之前有写过.net core集成使用rabbitmq的博文,见.net core使用rabbitmq消息队列,但是里面的使用很简单,而且还有几个bug,想改下,但是后来想了想,还是算了,之前使用的是. ... 
- .net core使用rabbitmq消息队列
		看博文的朋友,本文有些过时了,还有些BUG,如果想了解更多用法,看看这篇吧:.net core使用rabbitmq消息队列 (二) 首先,如果你还没有安装好rabbitmq,可以参考我的博客: Ubu ... 
- 基于ASP.NET Core 5.0使用RabbitMQ消息队列实现事件总线(EventBus)
		文章阅读请前先参考看一下 https://www.cnblogs.com/hudean/p/13858285.html 安装RabbitMQ消息队列软件与了解C#中如何使用RabbitMQ 和 htt ... 
- (转)RabbitMQ消息队列(七):适用于云计算集群的远程调用(RPC)
		在云计算环境中,很多时候需要用它其他机器的计算资源,我们有可能会在接收到Message进行处理时,会把一部分计算任务分配到其他节点来完成.那么,RabbitMQ如何使用RPC呢?在本篇文章中,我们将会 ... 
- RabbitMQ消息队列(七):适用于云计算集群的远程调用(RPC)
		在云计算环境中,很多时候需要用它其他机器的计算资源,我们有可能会在接收到Message进行处理时,会把一部分计算任务分配到其他节点来完成.那么,RabbitMQ如何使用RPC呢?在本篇 ... 
- RabbitMQ消息队列(一): Detailed Introduction 详细介绍
		http://blog.csdn.net/anzhsoft/article/details/19563091 RabbitMQ消息队列(一): Detailed Introduction 详细介绍 ... 
- RabbitMQ消息队列1: Detailed Introduction 详细介绍
		1. 历史 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有 ... 
- (转)RabbitMQ消息队列(九):Publisher的消息确认机制
		在前面的文章中提到了queue和consumer之间的消息确认机制:通过设置ack.那么Publisher能不到知道他post的Message有没有到达queue,甚至更近一步,是否被某个Consum ... 
- (转)RabbitMQ消息队列(六):使用主题进行消息分发
		在上篇文章RabbitMQ消息队列(五):Routing 消息路由 中,我们实现了一个简单的日志系统.Consumer可以监听不同severity的log.但是,这也是它之所以叫做简单日志系统的原因, ... 
随机推荐
- Java包装类、拆箱和装箱详解
			转载:https://www.cnblogs.com/ok932343846/p/6749488.html 虽然 Java 语言是典型的面向对象编程语言,但其中的八种基本数据类型并不支持面向对象编程, ... 
- MySQL 索引知识总结
			将 mysql 的索引以书本的索引类比比较贴切,要找到一个关键字为xxx 的条目,首先翻到索引中查找有哪些页码涉及到,无疑就缩小了范围.在这个小范围内再寻找符合条件的数据,效率就会提高许多. mysq ... 
- 探索canvas画布绘制技术
			图片来自KrzysztofBanaś 下面我们开始尝试研究不同的绘图风格和技术 - 边缘平滑,贝塞尔曲线,墨水和粉笔,笔和印章和图案 -等等.事实证明,网上没有太多关于此的内容.在下面的示例中,您请大 ... 
- Java 开源博客 Solo 1.6.0 发布 - 新后台
			简介 Solo 是一款一个命令就能搭建好的 Java 开源博客系统,并内置了 15+ 套精心制作的皮肤.除此之外,Solo 还有着非常活跃的社区,文章分享到社区后可以让很多人看到,产生丰富的交流互动. ... 
- 剑指Offer-编程详解-二维数组中的查找
			题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ... 
- qss 对子控件的设置样式 使用setProperty  --Qt 之 QSS(动态属性)
			https://blog.csdn.net/liang19890820/article/details/51693956 学习了 代码: 当鼠标划过控件时,设置样式 void CustomLabelW ... 
- 个人项目-wordcount
			源代码上传到github的网址为:https://github.com/fancy-dawning/hello-world.git. wc.exe是一个常见的工具,它能统计文本文件的字符数,单词数和行 ... 
- JUnit测试模块使用
			JUnit简介  JUnit是一个Java语言的单元测试框架.它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个. JUn ... 
- No enum constant org.apache.ibatis.type.JdbcType.Integer
			同事今天在用mybatis查询时候,报了上面这个问题.上网查了下,原来是mybatis封装类型的问题.原因是在resultMap中jdbcType写为了Integer,但是在MyBatis中没有这个数 ... 
- java笔记--ASCII编码认知和转换
			ASCII是基于拉丁字母的一套电脑编码系统,主要用于显示英语字符是当今最通用的单字节编码.包括128个字符. --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs. ... 
