zoukankan      html  css  js  c++  java
  • RabbitMQ(四) ——路由

    RabbitMQ(四)

    ——路由

     

    (转载请附上本文链接——linhxx)

     

    一、概述

    路由模式(routing)是交换机不将消息广播到全部的队列中,而是采用交换机的另一种模式——direct。该模式下,交换机会精准的将消息发送到某个与其绑定的队列,而不是发送给全部队列。

    如果没有队列绑定交换机,消息会丢失。

    路由模式如下图所示:

     

    二、绑定方式(binding)

    在交换机的fanout模式下,不需要routing key,但是在此模式下,由于交换机需要精准的将消息发送给某个(某些)队列,则需要队列与交换机进行绑定。

    绑定方式如下:

    $routing_key = 'black';

    $channel->queue_bind($queue_name, $exchange_name, $routing_key);

    这样绑定后,当生产者指定的routing key是‘black’,则交换机会将其转发到上述的队列中。

    三、多重绑定(multiple bindings)

    当交换机的direct模式下,允许一个队列绑定多个routing key,也运行交换机将消息发给多个收听同样routing key的队列。此时,如果每个队列监听的消息是一致的,而生产者发送给交换机的routing key也是这个值,则此模式下的direct模式和fanout模式是一样的,即交换机会把消息转发给所有的队列。

    四、发送与接收消息

    1、定义交换机

    要发送消息,首先定义交换机的时候,需要将其模式定义为direct:

    $channel->exchange_declare('direct_logs', 'direct', false, false, false);

    2、发送消息

    $severity = ‘test’;

    $channel->exchange_declare('direct_logs', 'direct', false, false, false);

    $channel->basic_publish($msg, 'direct_logs', $severity);

    上述的$severity即routing key。

    3、消费者

    $severity = ‘test’;

    $channel->queue_bind($queue_name, 'direct_logs', $severity);

    ——written by linhxx

    更多最新文章,欢迎关注微信公众号“决胜机器学习”,或扫描右边二维码。

    博客园这边,我会定期批量发布文章,如果想要实时看到最新的文章,欢迎关注微信公众号"决胜机器学习",里面有我最新的文章。linhxx
  • 相关阅读:
    『Python基础』第3节:变量和基础数据类型
    Python全栈之路(目录)
    前端
    Python十讲
    Ashampoo Driver Updater
    druid 连接池的配置
    webService 入门级
    pom
    pom----Maven内置属性及使用
    webservice 总结
  • 原文地址:https://www.cnblogs.com/linhxx/p/8434171.html
Copyright © 2011-2022 走看看