tnblog
首页
视频
资源
登录

mq交换机的各种类型

7013人阅读 2019/6/16 16:44 总访问:3658870 评论:0 收藏:0 手机
分类: .net后台框架


《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实现先进先出

上代码:

看得懂的干,看不懂的。。!

翻前面案例!

  1. //Queue TTL 形式
  2. //创建队列
  3. //姓名,是否持久化,是否是专有的,是否自动删除,
  4. //channe.QueueDeclare("mytest", false, false, false, new Dictionary<string, object>
  5. //{
  6. //    { "x-message-ttl",1000*8 } //表示该消息在发布8秒后消息消失
  7. //});
  8. //channe.BasicPublish(string.Empty, "mytest", null, Encoding.UTF8.GetBytes("乱说"));
  9. //Message TTL 形式
  10. //channe.QueueDeclare("mytest", false, false, false, new Dictionary<string, object>
  11. //{
  12. //});
  13. //var propertes = channe.CreateBasicProperties();
  14. //propertes.Expiration = "8000";//表示该消息在发布8秒后消息消失
  15. //channe.BasicPublish(string.Empty, "mytest", propertes, Encoding.UTF8.GetBytes("乱说"));
  16. //Auto Expire 形式  8秒后将会删除该队列
  17. //channe.QueueDeclare("mytest", false, false, false, new Dictionary<string, object>
  18. //{
  19. //    {"x-expires",1000*8}
  20. //});
  21. //channe.BasicPublish(string.Empty, "mytest", null, Encoding.UTF8.GetBytes("乱说"));
  22. //消息最大
  23. channe.QueueDeclare("mytest"falsefalsefalsenew Dictionary<stringobject>
  24. {
  25.     {"x-max-length",10}//最大10条消息,然后是按照最先开始进入队列来出队列的
  26. });
  27. for (int i = 0; i < 15; i++)
  28. {
  29.     channe.BasicPublish(string.Empty, "mytest"null, Encoding.UTF8.GetBytes("乱说:" + i));
  30. }
  31. Console.WriteLine("发布消息完成");
  32. Console.Read();
  1.  ////当大过最大数量将会把消息转至mydead_exchange----mydead_queue队列中进行处理
  2.  //channe.QueueDeclare("mytest", false, false, false, new Dictionary<string, object>
  3.  //{
  4.  //    {"x-max-length",10},//最大10条消息,然后是按照最先开始进入队列来出队列的
  5.  //    { "x-dead-letter-exchange","mydead_exchange"},
  6.  //    { "x-dead-letter-routing-key","mydead_queue"}
  7.  //});
  8.  //for (int i = 0; i < 15; i++)
  9.  //{
  10.  //    channe.BasicPublish(string.Empty, "mytest", null, Encoding.UTF8.GetBytes("乱说:" + i));
  11.  //}
  12.  //Console.Read();
  13.  //Priority实现先进先出
  14.  channe.QueueDeclare("mytest"falsefalsefalsenew Dictionary<stringobject>
  15.  {
  16.      {"x-max-length",10},//最大10条消息,然后是按照最先开始进入队列来出队列的
  17.  });
  18.  var prox = channe.CreateBasicProperties();
  19.  for (int i = 0; i < 15; i++)
  20.  {
  21.      prox.Priority = (byte)i;//倒序 先进先出
  22.      channe.BasicPublish(string.Empty, "mytest", prox, Encoding.UTF8.GetBytes("乱说:" + i));
  23.  }
  24.  Console.Read();

第五条补充先要执行的代码:

  1. channe.ExchangeDeclare("mydead_exchange", ExchangeType.Direct, truefalsenull);
  2. //当有很多个队列同时在获取数据时
  3. channe.QueueDeclare("mydead_queue"truefalsefalsenull);
  4. //将 error 绑定一下
  5. channe.QueueBind("mydead_queue""mydead_exchange""mydead_queue"null);
  6. //应当用到事件
  7. {
  8.     //官网案例:https://www.rabbitmq.com/tutorials/tutorial-two-dotnet.html
  9.     //可以优化计算压力
  10.     var consumer = new EventingBasicConsumer(channe);
  11.     consumer.Received += (sender, e) =>
  12.     {
  13.         string msg = Encoding.UTF8.GetString(e.Body);
  14.         Console.WriteLine(msg);
  15.     };
  16.     //执行加载的事件
  17.     channe.BasicConsume("mydead_queue"true, consumer);
  18. }
  19. Console.ReadKey();

再见各位!


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价
这一世以无限游戏为使命!
排名
7
文章
192
粉丝
15
评论
16
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术