上篇我们说到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 消息队列的更多相关文章

  1. .net core使用rabbitmq消息队列 (二)

    之前有写过.net core集成使用rabbitmq的博文,见.net core使用rabbitmq消息队列,但是里面的使用很简单,而且还有几个bug,想改下,但是后来想了想,还是算了,之前使用的是. ...

  2. .net core使用rabbitmq消息队列

    看博文的朋友,本文有些过时了,还有些BUG,如果想了解更多用法,看看这篇吧:.net core使用rabbitmq消息队列 (二) 首先,如果你还没有安装好rabbitmq,可以参考我的博客: Ubu ...

  3. 基于ASP.NET Core 5.0使用RabbitMQ消息队列实现事件总线(EventBus)

    文章阅读请前先参考看一下 https://www.cnblogs.com/hudean/p/13858285.html 安装RabbitMQ消息队列软件与了解C#中如何使用RabbitMQ 和 htt ...

  4. (转)RabbitMQ消息队列(七):适用于云计算集群的远程调用(RPC)

    在云计算环境中,很多时候需要用它其他机器的计算资源,我们有可能会在接收到Message进行处理时,会把一部分计算任务分配到其他节点来完成.那么,RabbitMQ如何使用RPC呢?在本篇文章中,我们将会 ...

  5. RabbitMQ消息队列(七):适用于云计算集群的远程调用(RPC)

            在云计算环境中,很多时候需要用它其他机器的计算资源,我们有可能会在接收到Message进行处理时,会把一部分计算任务分配到其他节点来完成.那么,RabbitMQ如何使用RPC呢?在本篇 ...

  6. RabbitMQ消息队列(一): Detailed Introduction 详细介绍

     http://blog.csdn.net/anzhsoft/article/details/19563091 RabbitMQ消息队列(一): Detailed Introduction 详细介绍 ...

  7. RabbitMQ消息队列1: Detailed Introduction 详细介绍

    1. 历史 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有 ...

  8. (转)RabbitMQ消息队列(九):Publisher的消息确认机制

    在前面的文章中提到了queue和consumer之间的消息确认机制:通过设置ack.那么Publisher能不到知道他post的Message有没有到达queue,甚至更近一步,是否被某个Consum ...

  9. (转)RabbitMQ消息队列(六):使用主题进行消息分发

    在上篇文章RabbitMQ消息队列(五):Routing 消息路由 中,我们实现了一个简单的日志系统.Consumer可以监听不同severity的log.但是,这也是它之所以叫做简单日志系统的原因, ...

随机推荐

  1. redis集群的远程管理与监控

    一.redis集群的重要性 目前大部分的互联网平台,都会用到Redis内存数据库,以提高响应速度,提升用户使用体验. 为了实现Redis的高可用,通常都会布署Redis集群,使用Redis-Senti ...

  2. K:大数加法

    相关介绍:  在java中,整数是有最大上限的.所谓大数是指超过整数最大上限的数,例如18 452 543 389 943 209 789 324 233和8 123 534 323 432 323 ...

  3. python中字符串格式化%与.format

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  4. drupal7 STMP邮件模块配置

    drupal7.54 STMP  version = "7.x-1.6" 配置:   注意:上面的“用户名”需要和“站点信息”页面的电子邮件地址保持一致,邮件发送才能成功 ---- ...

  5. css3在页面中插入内容

    A. 使用选择器来插入内容 h2:before{ content:"前缀"; } h2:after{ content:"后缀"; } B. 指定个别的元素不进行 ...

  6. Docker 核心概念、安装、端口映射及常用操作命令,详细到令人发指。

    Docker简介 Docker是开源应用容器引擎,轻量级容器技术. 基于Go语言,并遵循Apache2.0协议开源 Docker可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发 ...

  7. C语言中关键词static的用法与作用域

    一.面向过程设计中的static 转载:http://blog.csdn.net/celerylxq/article/details/6160499 1.静态全局变量 在全局变量前,加上关键字stat ...

  8. Angular架构概览(截取部分)

    原文链接:https://angular.cn/docs/ts/latest/guide/architecture.html 我们是这样写 Angular 应用的:用 Angular 扩展语法编写 H ...

  9. 2.bootstrap安装

    1.下载 您可以从 http://getbootstrap.com/ 上下载 Bootstrap 的最新版本(或者 http://www.bootcss.com/  中文网) Download Boo ...

  10. Jquery使两个Div的滚动条同步滚动

    $("#div").scroll(function(){ $("#div1").scrollTop($(this).scrollTop()); // 纵向滚动条 ...