RabbitMQ

作者: 废柴_拔刀吧 | 来源:发表于2018-12-10 15:21 被阅读0次

Exchange

exchange 包含4中类型, direct, topic,fanout,header

  • direct :
    exchage 和 queue 进行 binding 时会设置 routingKey ,

    channel.QueueBind(queue: "create_pdf_queue",
                    exchange: "pdf_events",
                    routingKey: "pdf_create",
                    arguments: null);
    

    然后,消息发送时也会设置对应的 routingKey , 只有两个 routingKey 完全相同,exchange才会选择对应的 binding 进行消息路由。

    channel.BasicPublish(exchange: "pdf_events",
                        routingKey: "pdf_create",
                        basicProperties: properties,
                        body: body);
    
  • topic
    类似 direct exchange , 只是此模式 routingKey 可以使用通配符 '*','#'.

  • fanout
    将消息路由到所有绑定的队列中, 无需对消息的 routingKey 进行匹配操作。

  • header
    路由规则是根据 header 进行判断,header 就是下面的 arguments 参数。

    Dictionary<string, object> aHeader = new Dictionary<string, object>();
    aHeader.Add("format", "pdf");
    aHeader.Add("type", "report");
    aHeader.Add("x-match", "all");
    channel.QueueBind(queue: "queue.A",
                    exchange: "agreements",
                    routingKey: string.Empty,
                    arguments: aHeader);
    

    其中 x-match 为特殊的 header , all 表示匹配所有的 header ,如果为 any 表示只要匹配其中一个 header 即可。
    发布消息时传入 header 值。

    var properties = channel.CreateBasicProperties();
    properties.Persistent = true;
    Dictionary<string, object> mHeader1 = new Dictionary<string, object>();
    mHeader1.Add("format", "pdf");
    mHeader1.Add("type", "report");
    properties.Headers = mHeader1;
    channel.BasicPublish(exchange: "agreements",
                    routingKey: string.Empty,
                    basicProperties: properties,
                    body: body);
    

总结

一般来说direct和topic用来具体的路由消息,如果要用广播的消息一般用fanout的exchange。
header类型用的比较少,但还是知道一点好。

参考文档

https://www.cnblogs.com/julyluo/p/6265775.html

相关文章

网友评论

      本文标题:RabbitMQ

      本文链接:https://www.haomeiwen.com/subject/xdgrhqtx.html