zoukankan      html  css  js  c++  java
  • 【EasyNetQ】- 基于topic的路由

    RabbitMQ具有非常酷的功能,基于主题的路由,允许订户根据多个标准过滤消息。主题是由与消息一起发布的点分隔的单词列表。例如,“stock.usd.nyse”或“book.uk.london”或“abc”,这些单词可以是您喜欢的任何内容,但通常是该消息的某些属性。主题字符串的长度限制为255个字符。

    要使用主题发布,只需将重载的Publish方法与主题一起使用:

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

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

    *(星号)恰好匹配一个单词。

    #(hash)匹配零个或多个单词。

    因此,以“XA2”主题发布的消息将匹配“#”,“X。#”,“* .A。*”但不匹配“XB *”或“A”。要订阅主题,请使用重载的Subscribe方法和配置:

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

    一个警告具有相同subscriberId但不同主题字符串的两个单独订阅可能不会产生您期望的效果。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. *”或“* .B”),你可以使用带有多个主题的Subscribe方法的另一个重载,如下所示:

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

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

    有关主题的更多警示故事,请参阅此博客帖子Topic Confusion,但请注意该示例使用旧版本的API,您必须在调用Publish之前打开发布频道。

  • 相关阅读:
    js 与或运算符 || && 妙用(great!!!)
    type of && undefined
    全新框架?微信小程序与React Native的异同之处
    JS-十五章(15.16)
    JS-第十三章
    ValueError: zero-size array to reduction operation maximum which has no identity
    time
    模块
    day8-函数
    day7-format字符串格式化
  • 原文地址:https://www.cnblogs.com/wangwust/p/9437397.html
Copyright © 2011-2022 走看看