• RabbitMq学习一入门篇(hello world)


    1. 简介  

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

    2. 安装     

      • 安装RabbitMq需要erlang,点击下载
      • 去官网下载Rabbit安装包,点击下载  
      • 安装完成之后,rabbitmq还提供了强大的web版本管理界面,启用方式-》打开CMD命令,cd到安装目录sbin下,输入命令rabbitmq-plugins enable rabbitmq_management; 
    3. “hello world”(.NET中Rabbimq使用)

       1.实例参考官网教程 

    2.使用官网提供的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入门篇讲完了,是不是很简单。

  • 相关阅读:
    迷宫
    小猫
    数位DP模板
    摘桃子
    [USACO10HOL]牛的政治Cow Politics
    ArcEngine中合并断开的线要素(根据几何判断)
    ArcEngine环境下合并断开的线要素(根据属性)
    Web Service和WCF的到底有什么区别
    OGC 的 WMS、WFS 及WCS服务(转)
    ArrayList的使用方法详解(转)
  • 原文地址:https://www.cnblogs.com/jara/p/7223981.html
Copyright © 2020-2023  润新知