栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > asp

RabbitMQ .NET消息队列使用详解

asp 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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}?", 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); 
   } 
 } 
      } 
    } 
  } 

消费者--结果如图:

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/55957.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号