RabbitMQ --- Hello Mr.Tua
目录
RabbitMQ --- Work Queues(工作队列)
RabbitMQ --- Publish/Subscribe(发布/订阅)
RabbitMQ --- Routing(路由)
安装环境
1.下载安装 Erlang 运行时环境
2.下载安装 RabbitMQ Server 应用程序
3.启动 RabbitMQ 服务(默认启动)
4.安装管理平台插件并打开远程访问权限
4.1.打开 RabbitMQ Comman Prompt
4.2.执行 rabbitmq-plugins enable rabbitmq_management
4.3.访问 http://localhost:15672 查看 RabbitMQ Server 相关信息(默认账密为guest)

4.4.新增远程访问用户

4.5.点击 Set permission 授权给新用户

4.6.停止 RabbitMQ 服务
4.7.修改 ...\rabbitmq_server-3.6.10\etc\rabbitmq.config.example 文件(新增第18行代码)

4.8.启动 RabbitMQ 服务
4.9.访问 http://IP:15672 测试是否成功

基本概念


单个消息生产者 VS 单个消息消费者

在 .NET 中使用 RabbitMQ 需要下载它的客户端程序集来获取并引用 RabbitMQ 相关的组件。
using RabbitMQ.Client;
using System;
using System.Text; //消息生产者控制台
namespace Producer
{
class Program
{
static void Main(string[] args)
{
//创建连接工厂对象
var factory = new ConnectionFactory
{
HostName = "10.202.228.107",//目标主机IP或名称
UserName = "Tua",//RabbitMQ服务的用户名称
Password = "Tua",//RabbitMQ服务的密码
Port = //RabbitMQ服务的默认端口号是5672,可以不用显示指定端口
};
//创建连接对象
using (var connection = factory.CreateConnection())
{
//创建消息信道对象
using (var channel = connection.CreateModel())
{
//创建消息队列,只有在该消息队列不存在时才会创建
channel.QueueDeclare
(
queue: "Tua",//消息队列名称
durable: false,//是否开启持久,true:即不会因为RabbitMQ服务崩溃重启而丢失消息队列
exclusive: false,//是否开启反外,true:即只允许在当前连接中被访问,当连接断开时会自动清除该消息队列
autoDelete: false,//是否开启自动删除,true:即当无任何消息消费者时,也就是说最后一个连接断开时会自动清除该消息队列
arguments: null//用于消息队列的其它属性(构造参数)
);
string msg = "Mr.Tua";
var body = Encoding.UTF8.GetBytes(msg);//将字符串消息转换成二进制数组
//发送消息,将消息发布到消息队列中
channel.BasicPublish
(
exchange: string.Empty,//消息交换机名称
routingKey: "Tua",//路由键名称,指定发送到"Tua"队列
basicProperties: null,//消息的其它属性
body: body//消息内容
);
Console.WriteLine("Producer sent message: {0}", msg);
Console.ReadLine();
}
}
}
}
}
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System;
using System.Text; //消息消费者控制台
namespace Consumer
{
class Program
{
static void Main(string[] args)
{
var factory = new ConnectionFactory
{
//目标主机为本地
HostName = "localhost"
};
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
//创建消息队列,用于确保不受发送端和接收端先后启动顺序影响
channel.QueueDeclare
(
queue: "Tua",
durable: false,
exclusive: false,
autoDelete: false,
arguments: null
);
//创建消息消费者对象
var consumer = new EventingBasicConsumer(channel);
//异步接收消息时的回调
consumer.Received += (sender, e) =>
{
var body = e.Body;
var msg = Encoding.UTF8.GetString(body);
Console.WriteLine("Consumer received message: {0}", msg);
};
//启动消息消费者
//消息消费者处理完消息任务时需要回应消息生产者,使其删除该消息
//如果消息消费者没有回应,那么消息生产者会将该消息重新发送给其它消息消费者
channel.BasicConsume
(
queue: "Tua",
noAck: true,//是否自动回应,false:即需要手动进行消息回应
consumer: consumer
);
Console.ReadLine();
}
}
}
}
}
运行结果
启动消息生产者控制台:

启动消息消费者控制台:

在 RabbitMQ Comman Prompt 中执行 rabbitmqctl list_queues 查看消息队列:

Producer 在 RabbitMQ Server 中创建了一个名为 Tua 的消息队列并含有一条 Mr.Tua 的消息,Consumer 接收到了该消息, 而 Producer 得到了回应就会立即删除该消息。
RabbitMQ --- Hello Mr.Tua的更多相关文章
- RabbitMQ --- Work Queues(工作队列)
目录 RabbitMQ --- Hello Mr.Tua 前言 Work Queues 即工作队列,它表示一个 Producer 对应多个 Consumer,包括两种分发模式:轮循分发(Round-r ...
- RabbitMQ --- Publish/Subscribe(发布/订阅)
目录 RabbitMQ --- Hello Mr.Tua RabbitMQ --- Work Queues(工作队列) 前言 在第二篇文章中介绍了 Work Queues(工作队列),它适用于把一个消 ...
- RabbitMQ --- Routing(路由)
目录 RabbitMQ --- Hello Mr.Tua RabbitMQ --- Work Queues(工作队列) RabbitMQ --- Publish/Subscribe(发布/订阅) 前言 ...
- RabbitMQ 使用场景一
安装环境 1.下载安装 Erlang 运行时环境 2.下载安装 RabbitMQ Server 应用程序 3.启动 RabbitMQ 服务(默认启动) 4.安装管理平台插件并打开远程访问权限 4.1. ...
- RabbitMQ 服务
RabbitMQ 使用场景一 安装环境 1.下载安装 Erlang 运行时环境 2.下载安装 RabbitMQ Server 应用程序 3.启动 RabbitMQ 服务(默认启动) 4.安装管理平 ...
- RabbitMq入门详解
因为项目中需要用到RabbitMq,所有花时间研究了下,虽然博客园已经有前辈写了关于RabbitMq的文章.但还是有必要研究下! 什么是RabbitMq? 百度解释:MQ全称为Message Queu ...
- RabbitMQ的交换器Exchange之direct(发布与订阅 完全匹配)
1.交换器.用来接收生产者发送的消息并将这些消息路由给服务器中的队列.三种常用的交换器类型,a.direct(发布与订阅 完全匹配).b.fanout(广播).c.topic(主题,规则匹配). 2. ...
- 编译安装rabbitmq服务端
有一种方式是:下载rabbitmq-server-generic-unix压缩包,是不用编译的.是已经编译好的源码了 下面介绍编译源码安装 总括: 需要以下步骤: 1.安装erlange.因为 ...
- Github开源:Sheng.RabbitMQ.CommandExecuter (RabbitMQ 的命令模式实现)
[Github]:https://github.com/iccb1013/Sheng.RabbitMQ.CommandExecuter Sheng.RabbitMQ.CommandExecuter 是 ...
随机推荐
- typescritp 导出默认接口
假如有ITest.ts文件,如下: export default interface ITest{ } 这样会报错,编译不通过.据说是设计成这样的,具体详细见:https://github.com/M ...
- log4Net辅助类
public class Log { private ILog logger; public Log(ILog log) { this.logger = log; } public void Debu ...
- Python数据分析_Pandas_窗函数
窗函数(window function)经常用在频域信号分析中.我其实不咋个懂,大概是从无限长的信号中截一段出来,然后把这一段做延拓变成一个虚拟的无限长的信号.用来截取的函数就叫窗函数,窗函数又分很多 ...
- php二维数组去重
php二维数组去重 前言:php一维数组去重很简单,直接array_unique($arr)即可,但是二维数组去重就得自己去写了 二维数组去重方法: /* * 二维数组去重 * 注意:二维数组中的元素 ...
- 【PAT】B1059 C语言竞赛(20 分)
这个题也是个逻辑问题 此题用我这种方式很复杂,应该用map 用两个分别储存成绩,已领过奖的人, #include<stdio.h> #include<math.h> int a ...
- ELK-logstash-6.3.2部署
Logstash 是一款强大的数据处理工具,它可以实现数据传输,格式处理,格式化输出,还有强大的插件功能,常用于日志处理. 1. logstash部署 [yun@mini04 software]$ p ...
- javascript中获取元素尺寸
Javascript获取获取屏幕.浏览器窗口 ,浏览器,网页高度.宽度的大小 屏幕可用工作区宽度:window.screen.availHeight,和浏览器无关,屏幕相关屏幕可用工作区高度:wind ...
- arcgis如何求两个栅格数据集的差集
栅格数据集没有擦除功能,现在有栅格A和栅格B,怎么求两个栅格的差集C 具体步骤如下: 1.首先利用栅格计算器,把栅格B中的value全部赋值为0 输入语句:"栅格B" * 0 2 ...
- C#异步编程の-------异步编程模型(APM)
术语解释: APM 异步编程模型, Asynchronous Programming Model EAP 基于事件的异步编程模式, Event ...
- jquery clone
clone([Even[,deepEven]]) 概述 克隆匹配的DOM元素并且选中这些克隆的副本. 在想把DOM文档中元素的副本添加到其他位置时这个函数非常有用. 参数 EventsBooleanV ...