随着公司加大力度信息化建设,PCB企业各种各样的系统软件越来越多,整个公司订单流状态监控变得越来越不可控,是时候需采用新的方式来收集各系统状态节点状态了,以下记录RabbitMQ安装使用:

一.RabbitMQ简介

RabbitMQ作为一个消息代理,主要和消息打交道,负责接收并转发消息。RabbitMQ提供了可靠的消息机制、跟踪机制和灵活的消息路由,支持消息集群和分布式部署。适用于排队算法、秒杀活动、消息分发、异步处理、数据同步、处理耗时任务、CQRS等应用场景

二.RabbitMQ环境搭建

1.安装Erlang运行环境

Rabbit MQ 是建立在强大的Erlang OTP平台上,因此安装Rabbit MQ的前提是安装Erlang

下载并安装 Erlang OTP For Windows (vR16B03)

2.安装RabbitMQ

下载并安装 Rabbit MQ Server Windows Installer (v3.2.3)

3.安装管理平台插件

rabbitmq-plugins enable rabbitmq_management

4.重启RabbitMQ服务

net stop RabbitMQ && net start RabbitMQ

5.安装RabbitMQ界面

安装插件与重启服务

MQ启动

MQ服务:

三.RabbitMQ界面

1.RabbitMQ网址:

http://localhost:15672

默认账号和密码:guest   guest

2.主界面

3.增加用户

4.配置用户权限

四.C# 发送消息与接受消息

1.发送消息

        /// <summary>
/// 连接配置
/// </summary>
private static readonly ConnectionFactory rabbitMqFactory = new ConnectionFactory()
{
HostName = "127.0.1.1",
UserName = "pcbren",
Password = "abc+2015",
Port =
};
/// <summary>
/// 路由名称
/// </summary>
const string ExchangeName = "pcbren.exchange";
/// <summary>
///队列名称
/// </summary>
const string QueueName = "pcbren.queue";
static void Main(string[] args)
{
using (IConnection conn = rabbitMqFactory.CreateConnection())
{
using (IModel channel = conn.CreateModel())
{
channel.ExchangeDeclare(ExchangeName, "direct", durable: true, autoDelete: false, arguments: null);
channel.QueueDeclare(QueueName, durable: true, autoDelete: false, exclusive: false, arguments: null);
channel.QueueBind(QueueName, ExchangeName, routingKey: QueueName);
var props = channel.CreateBasicProperties();
props.Persistent = true;
string vadata = Console.ReadLine();
while (vadata != "exit")
{
var msgBody = Encoding.UTF8.GetBytes(vadata);
channel.BasicPublish(exchange: ExchangeName, routingKey: QueueName, basicProperties: props, body: msgBody);
Console.WriteLine(string.Format("发送时间:{0},发送完成", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")));
vadata = Console.ReadLine();
}
}
}
}

2.接收消息

        /// <summary>
/// 连接配置
/// </summary>
private static readonly ConnectionFactory rabbitMqFactory = new ConnectionFactory()
{
HostName = "127.0.1.1",
UserName = "pcbren",
Password = "abc+2015",
Port =
};
/// <summary>
/// 路由名称
/// </summary>
const string ExchangeName = "pcbren.exchange";
/// <summary>
///队列名称
/// </summary>
const string QueueName = "pcbren.queue";
static void Main(string[] args)
{
using (IConnection conn = rabbitMqFactory.CreateConnection())
{
using (IModel channel = conn.CreateModel())
{
channel.QueueDeclare(QueueName, durable: true, autoDelete: false, exclusive: false, arguments: null);
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, MQ) =>
{
var msgBody = Encoding.UTF8.GetString(MQ.Body);
Console.WriteLine(string.Format("接收时间:{0},消息内容:{1}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), msgBody));
channel.BasicAck(deliveryTag: MQ.DeliveryTag, multiple: false); //消息确认后,MQ服务端才将此消息清除
};
channel.BasicConsume(QueueName, false, consumer: consumer);
Console.ReadKey();
}
}
}
五.RabbitMQ消息循环调度

使用消列队列的好处就是它能够并行的处理队列。当一个消息接受端处理不过来时,我们只需要增加多个消息接收处理者。下图展示两个消息接收端,等待消息接收,再启动一个消息发送端进行消息发送。

从下图中可知,循环发送6条信息依次的分派给2个客户端,每个客户端平均接收到3条消息
        默认情况下:RabbitMQ这种分发消息的方式叫做循环(round-robin)。

六.RabbitMQ消息持久化

最新文章

  1. Python 操作 MS Excel 文件
  2. 很好用的查看音频波形的软件cool edit pro
  3. 基于perl的网络爬虫
  4. LINUX ping 指定网卡
  5. 深入理解shared pool共享池之library cache系列一
  6. 服务器上搭建spark开发环境
  7. 取消开机window 设备选择
  8. 转 图片缓存之内存缓存技术LruCache,软引用
  9. 2017 ICPC/ACM 沈阳区域赛HDU6228
  10. [hashcat]基于字典和暴力破解尝试找到rar3-hp的压缩包密码
  11. nginx日志相关的查询
  12. linux 按文件大小排序
  13. 牛客练习赛 43 B-Tachibana Kanade Loves Probability
  14. Java笔记(十一)通用容器类和总结
  15. iOS程序main函数之前发生了什么
  16. Odoo9以后的社区版本和企业版功能上的区别
  17. goreleaser 方便的go 二进制包分发工具
  18. C# ConcurrentBag的实现原理
  19. 【转】Smartphone--Android真机管理平台
  20. Git 学习笔记--git 查看某个文件的修改历史

热门文章

  1. php除法的知识点
  2. python学习之-- redis模块管道/订阅发布
  3. HUD——1083 Courses
  4. [Bzoj1009][HNOI2008]GT考试(KMP)(矩乘优化DP)
  5. Codeforces 920E(补图BFS)
  6. 【.Net 学习系列】-- EF Core实践(Code First)
  7. linux是类unix操作系统
  8. jmete命令行停止失败的原因分析
  9. 系统安全攻防战:DLL注入技术详解
  10. CentOS 6.x Inotify+Rsync