热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

RabbitMQ.NET消息队列使用详解

这篇文章主要为大家详细介绍了RabbitMQ.NET消息队列使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了RabbitMQ .NET消息队列使用方法,供大家参考,具体内容如下

首先下载安装包,我都环境是win7 64位:
去官网下载 otp_win64_19.0.exe  和rabbitmq-server-3.6.3.exe安装好
然后开始编程了:
(1)创建生产者类:

class Program 
 { 
   private static void Main() 
   { 
     //建立RabbitMQ连接和通道 
     var cOnnectionFactory= new ConnectionFactory 
     { 
       HostName = "127.0.0.1", 
       Port = 5672, 
       UserName = "guest", 
       Password = "guest", 
       Protocol = Protocols.DefaultProtocol, 
       AutomaticRecoveryEnabled = true, //自动重连 
       RequestedFrameMax = UInt32.MaxValue, 
       RequestedHeartbeat = UInt16.MaxValue //心跳超时时间 
     }; 
     try 
     { 
       using (var cOnnection= connectionFactory.CreateConnection()) 
       { 
         using (var channel = connection.CreateModel()) 
         { 
           //创建一个新的,持久的交换区 
           channel.ExchangeDeclare("SISOExchange", ExchangeType.Direct, true, false, null); 
           //创建一个新的,持久的队列, 没有排他性,与不自动删除 
           channel.QueueDeclare("SISOqueue", true, false, false, null); 
           // 绑定队列到交换区 
           channel.QueueBind("SISOqueue", "SISOExchange", "optionalRoutingKey"); 
 
           // 设置消息属性 
           var properties = channel.CreateBasicProperties(); 
           properties.DeliveryMode = 2; //消息是持久的,存在并不会受服务器重启影响  
 
           //准备开始推送 
           //发布的消息可以是任何一个(可以被序列化的)字节数组,如序列化对象,一个实体的ID,或只是一个字符串 
           var encoding = new UTF8Encoding(); 
           for (var i = 0; i <10; i++) 
           { 
             var msg = string.Format("这是消息 #{0}&#63;", i + 1); 
             var msgBytes = encoding.GetBytes(msg); 
             //RabbitMQ消息模型的核心思想就是,生产者不把消息直接发送给队列。实际上,生产者在很多情况下都不知道消息是否会被发送到一个队列中。取而代之的是,生产者将消息发送到交换区。交换区是一个非常简单的东西,它一端接受生产者的消息,另一端将他们推送到队列中。交换区必须要明确的指导如何处理它接受到的消息。是放到一个队列中,还是放到多个队列中,亦或是被丢弃。这些规则可以通过交换区的类型来定义。 
             //可用的交换区类型有:direct,topic,headers,fanout。 
             //Exchange:用于接收消息生产者发送的消息,有三种类型的exchange:direct, fanout,topic,不同类型实现了不同的路由算法; 
             //RoutingKey:是RabbitMQ实现路由分发到各个队列的规则,并结合Binging提供于Exchange使用将消息推送入队列; 
             //Queue:是消息队列,可以根据需要定义多个队列,设置队列的属性,比如:消息移除、消息缓存、回调机制等设置,实现与Consumer通信; 
             channel.BasicPublish("SISOExchange", "optionalRoutingKey", properties, msgBytes); 
           } 
           channel.Close(); 
         } 
       } 
     } 
     catch (Exception ex) 
     { 
       Console.WriteLine(ex.Message); 
     } 
 
     Console.WriteLine("消息发布!"); 
     Console.ReadKey(true); 
   } 
 } 

(1)创建消费者类:

class Program 
  { 
    private static void Main() 
    { 
      // 建立RabbitMQ连接和通道 
      var cOnnectionFactory= new ConnectionFactory 
      { 
        HostName = "127.0.0.1", 
        Port = 5672, 
        UserName = "guest", 
        Password = "guest", 
        Protocol = Protocols.AMQP_0_9_1, 
        RequestedFrameMax = UInt32.MaxValue, 
        RequestedHeartbeat = UInt16.MaxValue 
      }; 
 
      using (var cOnnection= connectionFactory.CreateConnection()) 
      using (var channel = connection.CreateModel()) 
      { 
        // 这指示通道不预取超过1个消息 
        channel.BasicQos(0, 1, false); 
 
        //创建一个新的,持久的交换区 
        channel.ExchangeDeclare("SISOExchange", ExchangeType.Direct, true, false, null); 
        //创建一个新的,持久的队列 
        channel.QueueDeclare("sample-queue", true, false, false, null); 
        //绑定队列到交换区 
        channel.QueueBind("SISOqueue", "SISOExchange", "optionalRoutingKey"); 
        using (var subscription = new Subscription(channel, "SISOqueue", false)) 
        { 
          Console.WriteLine("等待消息..."); 
          var encoding = new UTF8Encoding(); 
          while (channel.IsOpen) 
          { 
            BasicDeliverEventArgs eventArgs; 
            var success = subscription.Next(2000, out eventArgs); 
            if (success == false) continue; 
            var msgBytes = eventArgs.Body; 
            var message = encoding.GetString(msgBytes); 
            Console.WriteLine(message); 
            channel.BasicAck(eventArgs.DeliveryTag, false); 
          } 
        } 
      } 
    } 
  } 

消费者--结果如图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 本文详细解析了JavaScript中相称性推断的知识点,包括严厉相称和宽松相称的区别,以及范例转换的规则。针对不同类型的范例值,如差别范例值、统一类的原始范例值和统一类的复合范例值,都给出了具体的比较方法。对于宽松相称的情况,也解释了原始范例值和对象之间的比较规则。通过本文的学习,读者可以更好地理解JavaScript中相称性推断的概念和应用。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 近年来,大数据成为互联网世界的新宠儿,被列入阿里巴巴、谷歌等公司的战略规划中,也在政府报告中频繁提及。据《大数据人才报告》显示,目前全国大数据人才仅46万,未来3-5年将出现高达150万的人才缺口。根据领英报告,数据剖析人才供应指数最低,且跳槽速度最快。中国商业结合会数据剖析专业委员会统计显示,未来中国基础性数据剖析人才缺口将高达1400万。目前BAT企业中,60%以上的招聘职位都是针对大数据人才的。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
author-avatar
wwwmanbj_796_897
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有