首页
视频
资源
登录
原
.netcore3.1 RabbitMq 讲讲相关方法
5618
人阅读
2021/1/29 15:05
总访问:
2604719
评论:
0
收藏:
0
手机
分类:
RabbitMq
![](https://img.tnblog.net/arcimg/hb/585b0f1ffa7f4c2095baa20c175b32a0.png) >#.netcore3.1 RabbitMq 讲讲相关方法 [TOC] QueueDeclare方法 ------------ tn>这是一个创建队列的方法,参数以及参数描述由下图所示: | 参数名 | 参数描述 | | ------------ | ------------ | | durable | 持久化操作。【mnesiz:数据库中会有专门的表去保存我们的队列申明】 | | exclusive | 排外。当前定义的队列是`connection`共享的,其他的`connection`是访问不到的... | | autoDelete | 自动删除 | | passive | 消极 | | arguments | 传入一些相关参数 | >### durable持久化 tn>我们先来创建一个非持久化队列来进行一个演示 ```csharp channel.QueueDeclare("NoDurable", false, false, false, null); ``` ![](https://img.tnblog.net/arcimg/hb/f2984024f6854f959763b2abc1840bea.png) tn>之后我们进行重启`rabbitmq`,然后我们就发现队列已经被删除了 ![](https://img.tnblog.net/arcimg/hb/446c1a218d9f441c8aa8fc789a5df4f7.png) ![](https://img.tnblog.net/arcimg/hb/5e6afd7c23f84c8ba9f70a8f9328f8a5.png) >### exclusive 排外 tn>一般`connection`是高成本的,因为`TCP`需要经过三次握手才可以连接得上,而在一个`connection`中是可以创建无数多个`channel`的。而`exclusive`为`true`也是随着`connection`的释放而释放,并且其他`connection`是不可以访问这个队列的。举个例子: ```csharp var factory = new ConnectionFactory() { HostName = "47.98.187.188", UserName = "bob", Password = "bob" }; // 创建一个链接 using (var connection = factory.CreateConnection()) { // 创建一个通道 using (var channel = connection.CreateModel()) { // 创建持久化队列 channel.QueueDeclare("NoExclusive", false, true, false, null); // 这里我们先看完UI后再回车,让连接失效 Console.ReadLine(); } } ``` ![](https://img.tnblog.net/arcimg/hb/40f9033a488042f3ae1d17001614c553.png) tn>然后回车 ![](https://img.tnblog.net/arcimg/hb/30ec2f1fc9ac4d9f910f1a0f3f479d9b.png) >### autoDelete 自动删除 ```csharp channel.QueueDeclare("AutoDelete", false, false, true, null); ``` ![](https://img.tnblog.net/arcimg/hb/0f9a4f9dcd8c4bb6a99fd44fe3c8f989.png) tn>接着我们用一个消费端去消费该队列,并迅速的将消费端关闭,代码与UI过程如下: ```csharp var factory = new ConnectionFactory() { HostName = "47.98.187.188", UserName = "bob", Password = "bob" }; // 创建一个链接 using (var connection = factory.CreateConnection()) { // 创建一个通道 using (var channel = connection.CreateModel()) { var consumer = new EventingBasicConsumer(channel); // 事件在交付到使用者时触发。(消费处理事件) consumer.Received += (model, ea) => { var body = ea.Body.ToArray(); var message = Encoding.UTF8.GetString(body); Thread.Sleep(1000); channel.BasicAck(ea.DeliveryTag, multiple: false); }; // 绑定到队列中去 channel.BasicConsume(queue: "AutoDelete", autoAck: false, consumer: consumer); Console.ReadLine(); } } // 消费端结束 ``` ![](https://img.tnblog.net/arcimg/hb/f788cb6db48e46bea163e7af417c1c0c.png) ![](https://img.tnblog.net/arcimg/hb/9274537688ac4ebfb3650656fc1de4d0.png) QueueDeclarePassive方法 ------------ tn>检测队列是否存在。如果不存在就报错,就拿刚刚的`AutoDelete`来举个例子。 ```csharp channel.QueueDeclarePassive("AutoDelete"); ``` ![](https://img.tnblog.net/arcimg/hb/ac4d6bb7b9954e3c9d01b8dc8549f651.png) QueueDeclareNoWait方法 ------------ tn>与`QueueDeclare`方法是差不多的,区别在于一个同步获取创建的结果,一个异步不返回结果,从底层源代码来说,这个方法所执行的步骤比`QueueDeclare`少 ![](https://img.tnblog.net/arcimg/hb/a534d8ee69c24fbe9f4894e20f97b1c7.png) ![](https://img.tnblog.net/arcimg/hb/75c81b95bb37461b871e69fbd1d518aa.png) tn>最后有一些`Exchange`与`Queue`的一些方法的意思类似,只不过一个是交换机,一个是队列的区别。
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
👈{{preArticle.title}}
👉{{nextArticle.title}}
评价
{{titleitem}}
{{titleitem}}
{{item.content}}
{{titleitem}}
{{titleitem}}
{{item.content}}
尘叶心繁
这一世以无限游戏为使命!
博主信息
排名
6
文章
6
粉丝
16
评论
8
文章类别
.net后台框架
168篇
linux
17篇
linux中cve
1篇
windows中cve
0篇
资源分享
10篇
Win32
3篇
前端
28篇
传说中的c
4篇
Xamarin
9篇
docker
15篇
容器编排
101篇
grpc
4篇
Go
15篇
yaml模板
1篇
理论
2篇
更多
Sqlserver
4篇
云产品
39篇
git
3篇
Unity
1篇
考证
2篇
RabbitMq
23篇
Harbor
1篇
Ansible
8篇
Jenkins
17篇
Vue
1篇
Ids4
18篇
istio
1篇
架构
2篇
网络
7篇
windbg
4篇
AI
18篇
threejs
2篇
人物
1篇
嵌入式
2篇
python
13篇
HuggingFace
8篇
pytorch
9篇
opencv
6篇
最新文章
最新评价
{{item.articleTitle}}
{{item.blogName}}
:
{{item.content}}
关于我们
ICP备案 :
渝ICP备18016597号-1
网站信息:
2018-2024
TNBLOG.NET
技术交流:
群号656732739
联系我们:
contact@tnblog.net
欢迎加群
欢迎加群交流技术