首页 > 代码库 > RabbitMq学习一入门篇(hello world)

RabbitMq学习一入门篇(hello world)

简介  

     RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java,也是众多消息队列中表现不俗的一员,作用就是提高系统的并发性,将一些不需要及时响应客户端且占用较多资源的操作,放入队列,再由另外一个线程,去异步处理这些队列,可极大的提高系统的并发能力。

安装   

  •  安装RabbitMq需要erlang,点击下载
  • 去官网下载Rabbit安装包,点击下载  
  • 启用web管理界面,启用方式-》打开CMD命令,cd到安装目录sbin下,输入命令rabbitmq-plugins enable rabbitmq_management; 技术分享

 hello world”(.NET中Rabbimq使用)

  • 实例参考官网教程 
  • 使用官网提供的c#操作类库RabbitMQ.Client 

  我们先分别创建两个控制台程序 一个用来发送消息到rabbitmq 消息代理作为什么生产者;另外一个从中读取进行消费作为消费者。

如:p代表生成者,c代表消费者,中间的部分代表消息队列   

技术分享

生成者的代码如下:

 public static void RunSend()        {            ConnectionFactory connectionFactory = new ConnectionFactory()            {                HostName = "192.168.35.129",                Port = 5672,                Password = "123",                UserName = "mquser"            };            //建立连接rabbitmq 消息代理服务器。            using (IConnection conn = connectionFactory.CreateConnection())            {                //创建Channel对象                using (IModel channel = conn.CreateModel())                {                    //声明队列                      channel.QueueDeclare("hello", durable: false,                        exclusive: false,                        autoDelete: false,                        arguments: null);                    //消息 ,此处是简单的字符串,你也可以定义复杂的消息体                    string msg = "Hello World";                    var body = Encoding.UTF8.GetBytes(msg);                    //把消息放到队列中                    channel.BasicPublish(exchange:"",                        routingKey:"hello",                        basicProperties:null,                        body:body);                    Console.WriteLine("send {0}",msg);                }            }        }

消费者的代码如下:

public static void RunReceive()        {            ConnectionFactory connectionFactory = new ConnectionFactory()            {                HostName = "192.168.35.129",                Port = 5672,                Password = "123",                UserName = "mquser"            };            using (IConnection conn = connectionFactory.CreateConnection())            {                using (IModel channel = conn.CreateModel())                {                    //注意:在 send.CS 中也声明了队列Hello,这里为什么要再次声明                    //第一:QueueDeclare 实现了幂等性,创建的时候如果已经存在,就不会再次创建。                    //第二:因为 两边都进行创建,不用考虑 生产者 和消费者 启动的顺序了。                    channel.QueueDeclare("hello", durable: false,                        exclusive: false,                        autoDelete: false,                        arguments: null);                    //创建事件驱动的消费者类型;建议使用此种方式,不要使用while(true)                    //理由吗 哈哈 看看王清培的博客吧。不稳定不优雅。。。                     var consumer = new EventingBasicConsumer(channel);                    consumer.Received += (sender, e) =>                    {                        var body = e.Body;                        var message = Encoding.UTF8.GetString(body);                        Console.WriteLine(" [x] Received {0}", message);                    };                    channel.BasicConsume(queue: "hello",                                noAck: true,                                consumer: consumer);                    Console.WriteLine(" Press [enter] to exit.");                    Console.ReadLine();                }            }        }

输出

 技术分享

  好了rabbitmq入门篇讲完了,是不是很简单。

RabbitMq学习一入门篇(hello world)