标签:
一:简介
RabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统。他遵循Mozilla Public License开源协议。采用 Erlang 实现的工业级的消息队列(MQ)服务器。
RabbitMQ的官方站:http://www.rabbitmq.com/
AMQP(高级消息队列协议) 是一个异步消息传递所使用的应用层协议规范,作为线路层协议,而不是API(例如JMS),AMQP 客户端能够无视消息的来源任意发送和接受信息。AMQP的原始用途只是为金融界提供一个可以彼此协作的消息协议,而现在的目标则是为通用消息队列架构提供通用构建工具。因此,面向消息的中间件 (MOM)系统,例如发布/订阅队列,没有作为基本元素实现。反而通过发送简化的AMQ实体,用户被赋予了构建例如这些实体的能力。这些实体也是规范的一 部分,形成了在线路层协议顶端的一个层级:AMQP模型。这个模型统一了消息模式,诸如之前提到的发布/订阅,队列,事务以及流数据,并且添加了额外的特性,例如更易于扩展,基于内容的路由。
1.下载Erlang
http://www.erlang.org/download.html
有32位与64位版本可供选择,根据个人需要下载相应版本,下载好后先安装Erlang
2.下载RabbitMQ服务器安装文件
http://www.rabbitmq.com/install-windows.html
安装好RabbitMQ服务器端环境后,RabbitMQ将会以服务的形式驻留在服务器上,默认是开启状态
http://localhost:15672,在登陆界面输入用户名:guest,密码:guest,即可进入管理界面查看各种信息
二:RabbitMQ 示例
发送消息端
class Program { static void Main(string[] args) { UserHelp mes =new UserHelp(); while (true) { var result = mes.GetUserMessage(); Console.WriteLine( result); } } }
public string GetUserMessage() { try { var conFactory = new ConnectionFactory(); conFactory.HostName = "localhost"; conFactory.UserName = "wangdongsheng"; conFactory.Password = "123456"; conFactory.VirtualHost = "/"; using (var connect = conFactory.CreateConnection()) { //rabbitmq服务端 using (var channel = connect.CreateModel()) { //在MQ上定义一个持久化队列,如果名称相同不会重复创建 channel.QueueDeclare("TestQueue", true, false, false, null); // //输入1,那如果接收一个消息,但是没有应答,则客户端不会收到下一个消息 channel.BasicQos(0, 1, false); //在队列上定义一个消费者 var consumer = new QueueingBasicConsumer(channel); //消费队列,并设置应答模式为程序主动应答 channel.BasicConsume("TestQueue", false, consumer); while (true) { //阻塞函数,获取队列中的消息 var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue(); byte[] bytes = ea.Body; string str = Encoding.UTF8.GetString(bytes); var msg = JsonConvert.DeserializeObject<RequestMsg>(str); //恢复确认 channel.BasicAck(ea.DeliveryTag, false); return "接收的数据:"+"发送人-"+msg.Name+";发送内容-"+msg.Code; } } } } catch (Exception ex) { return ex.Message; } }
public class RequestMsg { public string Name { get; set; } public string Code { get; set; } }
接收消息端
class Program { private static void Main(string[] args) { SendHelp help=new SendHelp(); while (true) { Console.WriteLine("请输入内容:"); var write = Console.ReadLine(); if (!string.IsNullOrWhiteSpace(write)) { var result = help.SendMessage(write); Console.ForegroundColor = ConsoleColor.DarkYellow; Console.WriteLine(result); Console.ForegroundColor = ConsoleColor.White; } } Console.ReadKey(); } }
public string SendMessage(string msg) { try { var conFactory = new ConnectionFactory(); conFactory.HostName = "localhost"; conFactory.UserName = "wangdongsheng"; conFactory.Password = "123456"; conFactory.VirtualHost = "/"; using (IConnection connect = conFactory.CreateConnection()) { //rabbitmq服务端 using (var channel = connect.CreateModel()) { //在MQ上定义一个持久化队列,如果名称相同不会重复创建 channel.QueueDeclare("TestQueue", true, false, false, null); while (true) { var requetMsg = new RequestMsg(); requetMsg.Name = "东升"; requetMsg.Code = msg; string jsonStr = JsonConvert.SerializeObject(requetMsg); byte[] bytes = Encoding.UTF8.GetBytes(jsonStr); IBasicProperties pro = channel.CreateBasicProperties(); pro.DeliveryMode = 2; channel.BasicPublish("", "TestQueue", pro, bytes); return "发送消息成功:发送人-"+requetMsg.Name+";消息内容-" + requetMsg.Code; } } } } catch (Exception ex) { return "发送的消息为:" + ex.Message; } }
标签:
原文地址:http://www.cnblogs.com/xiaoyaodijun/p/5593228.html