mq交换机的各种类型
电脑版发表于:2019/6/16 16:44
《1》Message TTL
(1) Queue TTL =》 给队列中的所有消息限定一个时间
(2) Message TTL =》 给队列中指定的消息限定一个时间
《2》Auto Expire 【自动删除】
(1)当我们的队列在规定的时间内没有来访问,就会被删除
consume,basicget,declare...
《3》Max Length 限定队列的最大长度
《4》Max Length Bytes 限定队列的最大占用空间大小。。。
《5》dead-letter当超出最大值转交给另外交换机和另外队列处理(在此之前请先创建好交换机和队列)
《6》Priority实现先进先出
上代码:
看得懂的干,看不懂的。。!
翻前面案例!
//Queue TTL 形式 //创建队列 //姓名,是否持久化,是否是专有的,是否自动删除, //channe.QueueDeclare("mytest", false, false, false, new Dictionary<string, object> //{ // { "x-message-ttl",1000*8 } //表示该消息在发布8秒后消息消失 //}); //channe.BasicPublish(string.Empty, "mytest", null, Encoding.UTF8.GetBytes("乱说")); //Message TTL 形式 //channe.QueueDeclare("mytest", false, false, false, new Dictionary<string, object> //{ //}); //var propertes = channe.CreateBasicProperties(); //propertes.Expiration = "8000";//表示该消息在发布8秒后消息消失 //channe.BasicPublish(string.Empty, "mytest", propertes, Encoding.UTF8.GetBytes("乱说")); //Auto Expire 形式 8秒后将会删除该队列 //channe.QueueDeclare("mytest", false, false, false, new Dictionary<string, object> //{ // {"x-expires",1000*8} //}); //channe.BasicPublish(string.Empty, "mytest", null, Encoding.UTF8.GetBytes("乱说")); //消息最大 channe.QueueDeclare("mytest", false, false, false, new Dictionary<string, object> { {"x-max-length",10}//最大10条消息,然后是按照最先开始进入队列来出队列的 }); for (int i = 0; i < 15; i++) { channe.BasicPublish(string.Empty, "mytest", null, Encoding.UTF8.GetBytes("乱说:" + i)); } Console.WriteLine("发布消息完成"); Console.Read();
////当大过最大数量将会把消息转至mydead_exchange----mydead_queue队列中进行处理 //channe.QueueDeclare("mytest", false, false, false, new Dictionary<string, object> //{ // {"x-max-length",10},//最大10条消息,然后是按照最先开始进入队列来出队列的 // { "x-dead-letter-exchange","mydead_exchange"}, // { "x-dead-letter-routing-key","mydead_queue"} //}); //for (int i = 0; i < 15; i++) //{ // channe.BasicPublish(string.Empty, "mytest", null, Encoding.UTF8.GetBytes("乱说:" + i)); //} //Console.Read(); //Priority实现先进先出 channe.QueueDeclare("mytest", false, false, false, new Dictionary<string, object> { {"x-max-length",10},//最大10条消息,然后是按照最先开始进入队列来出队列的 }); var prox = channe.CreateBasicProperties(); for (int i = 0; i < 15; i++) { prox.Priority = (byte)i;//倒序 先进先出 channe.BasicPublish(string.Empty, "mytest", prox, Encoding.UTF8.GetBytes("乱说:" + i)); } Console.Read();
第五条补充先要执行的代码:
channe.ExchangeDeclare("mydead_exchange", ExchangeType.Direct, true, false, null); //当有很多个队列同时在获取数据时 channe.QueueDeclare("mydead_queue", true, false, false, null); //将 error 绑定一下 channe.QueueBind("mydead_queue", "mydead_exchange", "mydead_queue", null); //应当用到事件 { //官网案例:https://www.rabbitmq.com/tutorials/tutorial-two-dotnet.html //可以优化计算压力 var consumer = new EventingBasicConsumer(channe); consumer.Received += (sender, e) => { string msg = Encoding.UTF8.GetString(e.Body); Console.WriteLine(msg); }; //执行加载的事件 channe.BasicConsume("mydead_queue", true, consumer); } Console.ReadKey();
再见各位!