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 是 ...
随机推荐
- 软件工程-CMM与CMMI
CMM CMMI
- 线程:生命周期、实现方式、start()和run()的区别!
1.线程的生命周期 要想实现多线程,必须在主线程中创建新的线程对象.Java语言使用Thread类及其子类的对象来表示线程,在它的 一个完整的生命周期中通常要经历如下的五种状态: 新建:当一个Thre ...
- python写一个双色球彩票计算器
首先声明,赌博一定不是什么好事,也完全没有意义,不要指望用彩票发财.之所以写这个,其实是用来练手的,可以参考这个来预测一些其他的东西,意在抛砖引玉. 啰嗦完了,马上开始,先上伪代码 打开网址 读取内容 ...
- Error: spawn Unknown system errno 203
在用node写代码的时候发现这个错误,google之无解,现在解决,发于此. 事件起因为一个全局模块通过子进程(chind_process)调用另一个全局模块的命令,这个错误就是在命令行通过全局命令调 ...
- ws协议的配置
server { listen 80; server_name 域名或IP; rewrite ^(.*)$ https://$host$1 permanent; } server { listen 4 ...
- Sql注入的分类:数字型+字符型
Sql注入: 就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.通过构造恶意的输入,使数据库执行恶意命令,造成数据泄露或者修改内容等,以 ...
- Git学习记录 力做全网最强入门教程
目录 Git学习记录 力做全网最强入门教程 什么是GitHub? 什么是Git? Git的配置 Git的安装(只介绍windos操作系统下) Git的配置 至此我们的入门教程到此结束,更新中级教程要等 ...
- JDK10源码阅读--String
jdk源码里对String的介绍: String 是不可变的,一旦被创建其值不能被改变. String buffers 支持可变String. 因为String是不可变的, 所以它们可以被共享. 例如 ...
- leetcode 44. Wildcard Matching(模糊匹配)
搬运工了- - https://blog.csdn.net/jmspan/article/details/51460021
- sql server2008 R2打开报错:无法识别的配置节 system.serviceModel解决办法分享
本人是先安装的sql server2008 R2成功可以运行后,再安装VS2010成功后,再打开sql server2008,就出现以下错误,无法连接服务器. 无法识别的配置节 system.se ...