RabbitMQ .NET消息队列使用入门【简单示例】

简介:

RabbitMQ .NET消息队列使用入门【简单示例】

首先下载安装包,我都环境是win7 64位:

去官网下载 otp_win64_19.0.exe  和rabbitmq-server-3.6.3.exe安装好

然后开始编程了:

(1)创建生产者类:

[csharp] view plain copy

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

(2)创建消费者类:

[csharp] view plain copy

  1. class Program
  2.    {
  3.        private static void Main()
  4.        {
  5.            // 建立RabbitMQ连接和通道
  6.            var connectionFactory = new ConnectionFactory
  7.            {
  8.                HostName = "127.0.0.1",
  9.                Port = 5672,
  10.                UserName = "guest",
  11.                Password = "guest",
  12.                Protocol = Protocols.AMQP_0_9_1,
  13.                RequestedFrameMax = UInt32.MaxValue,
  14.                RequestedHeartbeat = UInt16.MaxValue
  15.            };
  16.            using (var connection = connectionFactory.CreateConnection())
  17.            using (var channel = connection.CreateModel())
  18.            {
  19.                // 这指示通道不预取超过1个消息
  20.                channel.BasicQos(0, 1, false);
  21.                //创建一个新的,持久的交换区
  22.                channel.ExchangeDeclare("SISOExchange", ExchangeType.Direct, truefalsenull);
  23.                //创建一个新的,持久的队列
  24.                channel.QueueDeclare("sample-queue"truefalsefalsenull);
  25.                //绑定队列到交换区
  26.                channel.QueueBind("SISOqueue""SISOExchange""optionalRoutingKey");
  27.                using (var subscription = new Subscription(channel, "SISOqueue"false))
  28.                {
  29.                    Console.WriteLine("等待消息...");
  30.                    var encoding = new UTF8Encoding();
  31.                    while (channel.IsOpen)
  32.                    {
  33.                        BasicDeliverEventArgs eventArgs;
  34.                        var success = subscription.Next(2000, out eventArgs);
  35.                        if (success == falsecontinue;
  36.                        var msgBytes = eventArgs.Body;
  37.                        var message = encoding.GetString(msgBytes);
  38.                        Console.WriteLine(message);
  39.                        channel.BasicAck(eventArgs.DeliveryTag, false);
  40.                    }
  41.                }
  42.            }
  43.        }
  44.    }

消费者--结果如图:

原文地址http://www.bieryun.com/2093.html

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
4月前
|
API
【Azure 媒体服务】Media Service的编码示例 -- 创建缩略图子画面的.NET代码调试问题
【Azure 媒体服务】Media Service的编码示例 -- 创建缩略图子画面的.NET代码调试问题
|
2月前
|
消息中间件 安全 Java
云消息队列RabbitMQ实践解决方案评测
一文带你详细了解云消息队列RabbitMQ实践的解决方案优与劣
97 8
|
2月前
|
消息中间件
解决方案 | 云消息队列RabbitMQ实践获奖名单公布!
云消息队列RabbitMQ实践获奖名单公布!
|
2月前
|
消息中间件 存储 弹性计算
云消息队列RabbitMQ实践
云消息队列RabbitMQ实践
|
2月前
|
消息中间件 存储 监控
解决方案 | 云消息队列RabbitMQ实践
在实际业务中,网站因消息堆积和高流量脉冲导致系统故障。为解决这些问题,云消息队列 RabbitMQ 版提供高性能的消息处理和海量消息堆积能力,确保系统在流量高峰时仍能稳定运行。迁移前需进行技术能力和成本效益评估,包括功能、性能、限制值及费用等方面。迁移步骤包括元数据迁移、创建用户、网络打通和数据迁移。
75 4
|
3月前
|
消息中间件 运维 监控
云消息队列RabbitMQ实践解决方案评测报告
本报告旨在对《云消息队列RabbitMQ实践》解决方案进行综合评测。通过对该方案的原理理解、部署体验、设计验证以及实际应用价值等方面进行全面分析,为用户提供详尽的反馈与建议。
93 16
|
3月前
|
消息中间件 弹性计算 运维
阿里云云消息队列RabbitMQ实践解决方案评测报告
阿里云云消息队列RabbitMQ实践解决方案评测报告
82 9
|
3月前
|
消息中间件 监控 数据处理
解决方案 | 云消息队列RabbitMQ实践
解决方案 | 云消息队列RabbitMQ实践
55 1
|
3月前
|
消息中间件 弹性计算 运维
云消息队列RabbitMQ实践
本评测报告详细分析了阿里云云消息队列 RabbitMQ 版的实践原理、部署体验及核心优势。报告认为其在解决消息积压、脑裂难题及弹性伸缩方面表现优秀,但建议进一步细化架构优化策略和技术细节描述。部署文档详尽,对初学者友好,但仍需加强网络配置和版本兼容性说明。实际部署展示了其高可用性和成本优化能力,适用于高并发消息处理和分布式系统数据同步。为进一步提升方案,建议增加安全性配置指导、性能调优建议及监控告警系统设置。
|
2月前
|
消息中间件 监控 测试技术
云消息队列RabbitMQ实践 - 评测
根据反馈,对本解决方案的实践原理已有一定理解,描述整体清晰但需在消息队列配置与使用上增加更多示例和说明以助理解。部署体验中获得了一定的引导和文档支持,尽管文档仍有待完善;期间出现的配置文件错误及依赖库缺失等问题已通过查阅资料解决。设计验证展示了云消息队列RabbitMQ的核心优势,包括高可用性和灵活性,未来可通过增加自动化测试来提高系统稳定性。实践后,用户对方案解决问题的能力及适用场景有了明确认识,认为其具有实际生产价值,不过仍需在性能优化、安全性增强及监控功能上进行改进以适应高并发和大数据量环境。
48 0

相关产品

  • 云消息队列 MQ