zoukankan      html  css  js  c++  java
  • .nerCore-RabbitMQDemo消息队列

      1.定义:MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们.MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取或者订阅队列中的消息。RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统。他遵循Mozilla Public License开源协议。消息队列引入的异步通信机制,提高了数据处理的能力,降低数据库处理数据的负荷。

     2.应用场景:1)不同系统之间的通信; 2)对实时性要求不高但是费时的操作,例如发送短信,邮件提醒,记录用户操作日志,更新文章阅读计数等等。

    3.安装环境:

      1.由于RabbitMQ使用Erlang语言编写,所以先安装Erlang语言运行环境;

       先下载Erlang,网址是 http://www.erlang.org/downloads,安装完成以后,在我的电脑-属性-高级系统变量-环境变量-系统变量-Path,添加路径,比如我的路径是D:Program Fileserl9.1in ,然后确定即可。

       打开 cmd ,输入 erl 后回车,如果看到版本信息,就是安装成功了。

      2.安装RabbitMQ服务端 地址 http://www.rabbitmq.com/,安装以后服务自己启动,不需要管,RabbitMQ会为我们创建默认的用户名guest和密码guest,guest默认拥有RabbitMQ的所有权限。

        如果需要创建新用户,可以在在cmd里找到路径如图(注意是找到sbin这个目录):,执行命令:

      rabbitmqctl  add_user  zy zy   //创建用户zy密码为zy 

      rabbitmqctl  set_permissions  zy  ".*"  ".*"  ".*"

      rabbitmqctl  set_user_tags zy administrator

      3. 开启rabbitmq_management插件,在web界面查看和管理RabbitMQ服务,在命令行里输入   rabbitmq-plugins enable rabbitmq_management ,端口号是15672

      4.在新建的发送端项目里,安装NuGet里的RabitMQ包,

      namespace RabbitMQDemo
    {
        class Program
        {

            /// <summary>
            /// 需要先安装NuGet程序包-RabbitMQ
            /// 发送端 create by zhangyu 2017.10.26
            /// </summary>
            /// <param name="args"></param>
            static void Main(string[] args)
            {
                string queueName = "hello";

                var factory = new ConnectionFactory();
                factory.HostName = "localhost";//RabbitMQ服务在本地运行,RabbitMQ不在本机,只需要设置目标机器的IP地址或者机器名称即可
                factory.UserName = "zy";
                factory.Password = "zy";

         //1.简单实例
                using (var connection = factory.createconnection())
                {
                    //如果要发送消息,需要创建一个队列,然后将消息发布到这个队列中,在创建队列的时候,只有rabbitmq上该队列不存在,才会去创建
                    //消息是以二进制数组的形式传输的,所以如果消息是实体对象的话,需要序列化,然后转化为二进制数组。(可以使用jsonconvert.serializeobject)
                    using (var channel = connection.createmodel())
                    {
                        channel.queuedeclare(queuename, false, false, false, null);//创建一个名称为hello的消息队列
                        string message = "hello world!";//需要发送的消息
                        var body = encoding.utf8.getbytes(message);
                        channel.basicpublish("", queuename, null, body);//发布消息
                        console.writeline("已发送:{0}", message);
                        console.readline();
                    }
              }

       }

    }

      5.创建接收端:

      using RabbitMQ.Client;
    using RabbitMQ.Client.Events;
    using System;
    using System.Text;
    using System.Threading;

    namespace RabbitMQDemoReceive
    {
        /// <summary>
        /// 需要先安装NuGet程序包-RabbitMQ
        /// 接受端 create by zhangyu 2017.10.26
        /// </summary>
        /// <param name="args"></param>
        class Program
        {
            static void Main(string[] args)
            {
                string queueName = "hello";

                var factory = new ConnectionFactory();
                factory.HostName = "localhost";
                factory.UserName = "zy";
                factory.Password = "zy";
      using (var connection = factory.CreateConnection())
                {
                    using (var channel = connection.CreateModel())
                    {
                        channel.QueueDeclare(queueName, false, false, false, null);
                        var consumer = new EventingBasicConsumer(channel);
                        channel.BasicConsume(queueName, false, consumer);
                        consumer.Received += (model, ea) =>
                        {
                            var body = ea.Body;
                            var message = Encoding.UTF8.GetString(body);
                            Console.WriteLine("已接收: {0}", message);
                        };
                        Console.ReadLine();
                    }
                }

        }
    }
    6.

    现在发送和接收的客户端都写好了,让我们编译执行起来

    发送消息:

    接收消息:

    web界面查看,端口号是15672

     

    <a href="https://files.cnblogs.com/files/randy619/netCore%E4%BD%BF%E7%94%A8RabbitMQ%E6%B6%88%E6%81%AF%E9%98%9F%E5%88%97.7z">更多内容</a>
  • 相关阅读:
    利用web.confing保存数据
    sql2005 未知错误 MS Visual Database Tools
    安装SQL2005时系统配置检查出现“性能监视器计数器要求”
    DNN中的Unit Test
    介绍一个收费的SVN Host
    DNN Navisuite菜单模块原始XML文件的格式
    如何使用C#调用Java
    介绍几个DNN SEO模块,可免费试用的
    帮你找到色彩Photoshop LAB Color
    Google PR 到4了
  • 原文地址:https://www.cnblogs.com/randy619/p/7736755.html
Copyright © 2011-2022 走看看