AY C# RabbitMQ 2019 微笔记2

栏目: ASP.NET · 发布时间: 7年前

内容简介:发送消息,生产者  接收消息 消费者   RabbitMQ是Erlang语言开发prefetchCount限制每次发送给消费者的消息个数,等于1,消息者一个一个处理

发送消息,生产者  接收消息 消费者   RabbitMQ是Erlang语言开发

上篇博客

队列 Queue 先进先出

prefetchCount限制每次发送给消费者的消息个数,等于1,消息者一个一个处理

ExInclusive 只能被一个连接使用,连接关闭后,消息删除

auto deleted: 当最后一个使用者取消订阅时,删除  大于一个使用者 的队列

Arguments 可选的; 由插件和特定于代理的功能使用,例如消息TTL,队列长度限制等

Priorities 优先级,如果需要优先级队列,我们建议使用1到10之间。目前使用更多优先级将消耗更多资源(Erlang进程)。

AY C# RabbitMQ 2019 微笔记2

一个消息一个 消费者,消费者处理完了,是手动告诉兔子 我处理完了,还是手动告诉兔子,兔子才会把消息删掉。

交换器,我称呼邮箱 Exchange 类似微信的公众号,你关注了Exchange,往这里发消息,订阅公众号的都能收到消息

一个消息  很多消费者,共享这个消息的。

邮箱有类型的,

fanout 广播

model.ExchangeDeclare(ExchangeName, "fanout");

先连接的消费者都会即时收到消息,后来启动的消费者打开是不会收到之前的。 你理解公众号就好理解了。

Direct 完全匹配的路由key,才会被接收

Topic 模糊匹配路由key,*一个单词,#任意数量字符

Head不管了,不怎么用。

====================www.ayjs.net       杨洋    wpfui.com        ayui      ay  aaronyang=======请不要转载谢谢了。=========

旧的博客,从这篇往后看 : http://www.ayjs.net/post/366.html

现在使用新的类库的新的写法去实现基本例子,官方是Core或者.NET Framework 4.5.1+

建立2个控制台,分别 引用 rabbitmq.client

使用稳定版5.1

AY C# RabbitMQ 2019 微笔记2

生产者  MQ.Product1

测试 AyTestMQ

DEMO1  Hello Word   以前旧文章

发送方:

   var factory = new ConnectionFactory() { HostName = "localhost",UserName="ay",Password="123456",Port=5672 };
            using (var connection = factory.CreateConnection())
            using (var channel = connection.CreateModel())
            {
                channel.QueueDeclare(queue: "hello",
                                     durable: false,
                                     exclusive: false,
                                     autoDelete: false,
                                     arguments: null);

                string message = "Hello World!";
                var body = Encoding.UTF8.GetBytes(message);

                channel.BasicPublish(exchange: "",
                                     routingKey: "hello",
                                     basicProperties: null,
                                     body: body);
                Console.WriteLine(" [x] Sent {0}", message);
            }

            Console.WriteLine(" Press [enter] to exit.");

AY C# RabbitMQ 2019 微笔记2

查看下,发送的消息只能byte[] 类型,如果是类,找个二进制序列化

AY C# RabbitMQ 2019 微笔记2

有个hello队列了,这种处理 1个消息只能一个消费者

AY C# RabbitMQ 2019 微笔记2

如果你失败了,你的兔子 队列的 所在的硬盘空间不够了,至少需要50M 的硬盘空间

接收方 最新版本换成事件方式了

需要引入

using RabbitMQ.Client;

using RabbitMQ.Client.Events;

这2个空间了

在AyTestMQ项目里面 写法

using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AyTestMQ
{
    class Program
    {
        static void Main(string[] args)
        {
            var factory = new ConnectionFactory() { HostName = "localhost", UserName = "ay", Password = "123456", Port = 5672 };
            using (var connection = factory.CreateConnection())
            using (var channel = connection.CreateModel())
            {
                channel.QueueDeclare(queue: "hello",
                                     durable: false,
                                     exclusive: false,
                                     autoDelete: false,
                                     arguments: null);

                var consumer = new EventingBasicConsumer(channel);
                consumer.Received += (model, ea) =>
                {
                    var body = ea.Body;
                    var message = Encoding.UTF8.GetString(body);
                    Console.WriteLine(" [x] Received {0}", message);
                };
                channel.BasicConsume(queue: "hello",
                                     autoAck: true,
                                     consumer: consumer);

                Console.WriteLine(" Press [enter] to exit.");
                Console.ReadLine();
            }



            Console.ReadKey();
        }
    }
}

这里Received跟以前不一样了,以前的阻塞方式

测试:

启动生产者

启动消费者

AY C# RabbitMQ 2019 微笔记2

由于设置 AY C# RabbitMQ 2019 微笔记2

所以消费完没有删除,生产消息,也是没有自动删除

AY C# RabbitMQ 2019 微笔记2 打开管理手动删除

=========================加深一些属性的印象====================

重新运行生产端,查看记录

AY C# RabbitMQ 2019 微笔记2

生产时候,持久化false。

AY C# RabbitMQ 2019 微笔记2

重启服务

AY C# RabbitMQ 2019 微笔记2

刷新没有了。

AY C# RabbitMQ 2019 微笔记2

把durable改为true,然后重新生产,

AY C# RabbitMQ 2019 微笔记2

ready是1  总数是1,然后重启兔子服务,刷新web管理,ready是0了,虽然持久化,但是我感觉不能消费了。

AY C# RabbitMQ 2019 微笔记2

进行消费测试

AY C# RabbitMQ 2019 微笔记2

果然没有消息,但是消息下面此刻有个消费者了。

AY C# RabbitMQ 2019 微笔记2

这个消息不是持久化了吗。。我也不太清楚了。  有人说要和exchange挂钩,好了。

特殊测试,一个消息只会被正确处理一次,即使web管理上存在,也是读取不了处理。

===================================

测试自动删除,手动把队列删了

生产者

channel.QueueDeclare(queue: "hello",

durable: true,

exclusive: false,

autoDelete: false,

arguments: null);

消费者

channel.QueueDeclare(queue: "hello",

durable: true,

exclusive: false,

autoDelete: true,

arguments: null);

直接给我崩溃了

AY C# RabbitMQ 2019 微笔记2

我再改

生产者

channel.QueueDeclare(queue: "hello",

durable: true,

exclusive: false,

autoDelete: true,

arguments: null);

消费者

channel.QueueDeclare(queue: "hello",

durable: true,

exclusive: false,

autoDelete: true,

arguments: null);

貌似两个改的一样了。哦,我明白了,两个要一致,感觉约定一样。

消费者可以拿到数据了。不关闭控制台,还没执行到using后面那段

打开web管理

queue队列还在,ready已经是0了,

关闭控制台, 执行完,释放 连接

刷新web管理

queue队列不在了,已经被删除。

==================

总结,一个队列消费完了,不删除,也不能使用了,感觉就像一个记录存在那。

所以真实场景,删除好点。

上面例子 为了简洁起见,在很大程度上省略了诸如连接管理,错误处理,连接恢复,并发和度量收集之类的事。 这种简化的代码不应被视为生产就绪。

====================www.ayjs.net       杨洋    wpfui.com        ayui      ay  aaronyang=======请不要转载谢谢了。=========

推荐您阅读更多有关于“RabbitMQ,”的文章


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Elements of Programming

Elements of Programming

Alexander A. Stepanov、Paul McJones / Addison-Wesley Professional / 2009-6-19 / USD 39.99

Elements of Programming provides a different understanding of programming than is presented elsewhere. Its major premise is that practical programming, like other areas of science and engineering, mus......一起来看看 《Elements of Programming》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具