VB.net 2010 视频教程 VB.net 2010 视频教程 VB.net 2010 视频教程
当前位置:
首页 > 编程开发 > C#编程 >
  • C#教程之EasyNetQ WithTopic过滤失效的解决方案

  • 2019-01-18 22:10 来源:未知

RabbitMQ原理及教程:https://www.cnblogs.com/AlvinLee/p/6141834.html

EasyNetQ是什么以及常见用法这里都不做讲解。可以参考这篇博文:https://blog.csdn.net/hesi9555/article/details/70139346

这里主要来谈谈EasyNetQ中WithTopic方法中的一个容易浪费大量时间的点。

使用EasyNetQ的Subscribe方法后,再使用SubscribeWithTopic方法,你可能会发现无论Routing Key(SubscribeWithTopic中的第三个参数)写什么东西都没用,不管你的Routing key和发送者的Routing Key一样或者不一样,接收者统统都能收得到,即WithTopic的过滤功能失效了。这是为什么呢?

这时候,只要你打开RabbitMQ的web管理后台的队列面板,

(https://localhost:15672/#/queues ,开不了的去rabbitmq-server的安装目录的sbin下右键打开命令行,运行 

.\rabbitmq-plugins.bat enable rabbitmq_management

来启动web管理后台。)

点开新创建出来的队列,点开bindings下拉菜单,如果你看到Routing key这一栏的第一项是“#”,意味着之后添加的所有Routing key都失效了。#代表接受所有。每次运行Subscribe都会自动加上“#”过滤规则并且置顶。

解决方案有:

1、手动删除。"#"那一项点击unbind按钮即可。之后如果使用了Subscribe后还想改成SubscribeWithTopic就必须再手动删一次

2、利用代码删除。

复制代码
            var bus = RabbitHutch.CreateBus(connectionString);

            IAdvancedBus advancedBus = bus.Advanced;
            IBinding bind = advancedBus.Bind(new Exchange("Model.Message:Model(交换机名)"), new Queue("Model.Message:Model_id1(队列名)",false), "#" );
            advancedBus.BindingDelete(bind);
复制代码

相关教程
关于我们--广告服务--免责声明--本站帮助-友情链接--版权声明--联系我们       黑ICP备07002182号