• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > RabbitMQ .NET消息队列使用详解

RabbitMQ .NET消息队列使用详解

作者:天风隼 字体:[增加 减小] 来源:互联网 时间:2017-05-11

天风隼通过本文主要向大家介绍了rabbitmq消息队列,rabbitmq 删除队列,rabbitmq队列,rabbitmq 清空队列,rabbitmq 镜像队列等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文实例为大家分享了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}?", 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); 
   } 
 } 
</div>

(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); 
          } 
        } 
      } 
    } 
  } 
</div>

消费者--结果如图:

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

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • RabbitMQ .NET消息队列使用详解

相关文章

  • 2017-05-11Coolite Cool Study 1 在Grid中用ComboBox 来编辑数据
  • 2017-05-11silverlight用webclient大文件上传的实例代码
  • 2017-05-11页面导出为Excel的时间格式的问题
  • 2017-05-11asp.net中将某字符串切割成阵列并排序列出
  • 2017-05-11asp.net 修改/删除站内目录操作后Session丢失问题
  • 2017-05-11.net中as和is之间的区别分析
  • 2017-05-11C#保存上传来的图片示例代码
  • 2017-05-11asp.net中水印的具体实现代码
  • 2017-05-11ASP.NET对SQLServer的通用数据库访问类
  • 2017-05-11.Net遍历窗体上控件的方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 图片不存在使用默认图片代替的实例
    • aspx超强木马查杀与防范(web网马)
    • 注册或者点击按钮时,怎么防止用户重复提交数据(实例讲解)
    • .NET 2.0获取配置文件AppSettings和ConnectionStrings节数据的方法
    • asp.net+js实现的ajax sugguest搜索提示效果
    • asp.net如何在图片上加水印文字具体实现
    • 动态生成table并实现分页效果心得分享
    • 实例说明asp.net中的简单角色权限控制
    • asp.net gridview中用checkbox全选的几种实现的区别
    • 详解在.net中读写config文件的各种方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有