RabbitMQ 服务
RabbitMQ 使用场景一
安装环境
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 = 5672//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",//路由键名称
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 服务的更多相关文章
- RabbitMQ服务安装配置
RabbitMQ是流行的开源消息队列系统,是AMQP(Advanced Message Queuing Protocol高级消息队列协议)的标准实现,用erlang语言开发.RabbitMQ据说具有良 ...
- Erlang&RabbitMQ服务安装配置
RabbitMQ是流行的开源消息队列系统,是AMQP(Advanced Message Queuing Protocol高级消息队列协议)的标准实现,用erlang语言开发.RabbitMQ据说具有良 ...
- 重启rabbitmq服务
重启rabbitmq服务通过两个命令来实现: rabbitmqctl stop :停止rabbitmq rabbitmq-server restart : 重启rabbitmq 因为rabbitmqc ...
- 深入理解消息中间件技术之RabbitMQ服务
什么叫消息队列? 消息(Message)是指在应用间传送的数据.消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象. 消息队列(Message Queue)是一种应用间的通信方式, ...
- RabbitMQ服务端配置详解
RabbitMQ支持三种配置方式: 1) 读取环境变量中配置, 这包括shell中环境变量和rabbitmq-env.conf/rabbitmq-env-conf.bat文件中配置的环境变量 可配置如 ...
- CentOS7下RabbitMQ服务安装配置
参考文档: CentOS7下RabbitMQ服务安装配置 http://www.linuxidc.com/Linux/2016-03/129557.htm 在linux下安装配置rabbitMQ详细教 ...
- Windows下当地RabbitMQ服务的安装
Windows下本地RabbitMQ服务的安装 本文参考:刘若泽相关技术文档 当然这些内容页可以通过RabbitMQ官方网站获得. RabbitMQ配置说明手册 一.RaibbitMQ服务器配置 1. ...
- RabbitMQ服务主机名更改导致消息队列无法连接
RabbitMQ服务主机名更改导致消息队列无法连接 在多节点环境中,RabbitMQ服务使用一个独立节点部署.在此环境下,如果修改了RabbitMQ节点的主机名,则需要更新RabbitMQ用户才能保证 ...
- RabbitMQ服务端配置详解(转自:http://www.cnblogs.com/zhen-rh/p/6884297.html)
RabbitMQ支持三种配置方式: 1) 读取环境变量中配置, 这包括shell中环境变量和rabbitmq-env.conf/rabbitmq-env-conf.bat文件中配置的环境变量 可配置如 ...
- RabbitMQ学习系列一安装RabbitMQ服务
RabbitMQ学习系列一:windows下安装RabbitMQ服务 http://www.80iter.com/blog/1437026462550244 Rabbit MQ 是建立在强大的Erla ...
随机推荐
- 转一篇对EJB理解的文章
1. 我们不禁要问,什么是"服务集群"?什么是"企业级开发"? 既然说了EJB 是为了"服务集群"和"企业级开发",那么 ...
- setting-在设置中添加新的选项
如下图的“通知栏调出方式” 具体实现如下 1.在 res/xml/settings_headers.xml 文件中添加如下内容 <preference-headers xmlns:android ...
- Elasticsearch和MongoDB
Elasticsearch和MongoDB分片及高可用对比 本文旨在对比Elasticsearch和MongoDB高可用和分片的实现机制. Elasticsearch ES天生就是分布式的,那她又是如 ...
- Spring MVC handler interceptors example--转载
原文地址:http://www.mkyong.com/spring-mvc/spring-mvc-handler-interceptors-example/ Spring MVC allow you ...
- 关于Promise的详细总结
1. 异步回调 1.1 回调地狱 在需要多个操作的时候,会导致多个回调函数嵌套,导致代码不够直观,就是常说的回调地狱 1.2 并行结果 如果几个异步操作之间并没有前后顺序之分,但需要等多个异步操作都完 ...
- 多校连萌15-8-12#A
#include <cstdio> #include <iostream> #include <algorithm> #include <queue> ...
- Windows 7 下快速挂载和分离VHD文件的小脚本
1.保存以下代码为VDM.vbs,放在Windows\system32下 Dim ArgsSet Args = WScript.ArgumentsTranArgs = " "For ...
- express,中间件(body-parser),req.body获取不到参数(含postman发请求的方法)
问题描述: 最近在做毕设,express 里边的中间件(body-parser)失效,req.body获取不到任何值,req.query能获取到值.一开始加body-parser中间件是有用的,直到昨 ...
- Day1:注释
一.注释方法 1.单行注释用#,本行#号后的内容为注释内容,不执行 2.多行用三个单引号或三个双引号标注,中间内容为注释,不执行 二.其他相关内容 三个引号中的内容还可以当作字符串赋值给变量,可以同时 ...
- FTP、WEB虚拟目录作用
随风原文FTP.WEB虚拟目录作用 在 IIS中,双击您要为之添加虚拟目录的服务以显示其属性表. 单击“目录”选项卡. 单击“添加”. 单击“浏览”从“目录”框中选择一个目录. ...