Fork me on GitHub

6,EasyNetQ-基于Topic的路由

RabbitMQ具有非常酷的功能,基于主题的路由,允许订阅者基于多个标准过滤消息。 主题是与邮件一起发布的点分隔的单词列表。 例子是“stock.usd.nyse”或“book.uk.london”或“a.b.c”,这些单词可以是你喜欢的任何东西,但通常是消息的一些属性。 主题字符串的限制为255个字符。

 

要使用主题发布,只需使用带有主题的重载的Publish方法:

bus.Publish(message, "X.A");

订阅者可以通过指定要匹配的主题来过滤邮件。 这些可以包括通配符:

*:匹配一个字。

#:匹配到零个或多个单词。

所以发布的主题为“X.A.2”的消息将匹配“#”,“X.#”,“* .A.*”,而不是“X.B. *”或“A”。 要订阅一个主题,请使用重载的订阅方法与配置:

bus.Subscribe("my_id", handler, x => x.WithTopic("X.*"));

警告: 具有相同订阅者但不同主题字符串的两个单独订阅可能不会产生您期望的效果。 subscriberId有效地标识个体AMQP队列。 具有相同subscriptionId的两个订阅者将连接到相同的队列,并且两者都将添加自己的主题绑定。 所以,例如,如果你这样做:

bus.Subscribe("my_id", handlerOfXDotStar, x => x.WithTopic("X.*"));
bus.Subscribe("my_id", handlerOfStarDotB, x => x.WithTopic("*.B"));

匹配“x.*”或“* .B”的所有消息将被传递到“XXX_my_id”队列。 然后,RabbitMQ将向两个消费者传递消息,其中handlerOfXDotStar和handlerOfStarDotB轮流获取每条消息。

 现在,如果你想要匹配多个主题(“X. *”OR“* .B”),你可以使用另一个重载的订阅方法,它采用多个主题,如下所示:

bus.Subscribe("my_id", handler, x => x.WithTopic("X.*").WithTopic("*.B"));

有一些主题重载的SubscribeAsync方法的工作方式完全相同。

posted on 2017-07-14 11:19  *Hunter  阅读(1514)  评论(0编辑  收藏  举报

导航

AmazingCounters.com