• 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 的 Socket 编程教程
    java中的io系统总结
    java FileFilter的使用
    Java System 类详解 in, out, err
    电子邮件和短信将令情书绝迹
    一些有趣的编程名言
    10个经典的Android开源应用项目 android入门
    从装饰者设计模式学习Java IO
    python 求N以内的所有的质数
    java中length,length(),size()区别
  • 原文地址:https://www.cnblogs.com/linhxx/p/8434171.html
Copyright © 2020-2023  润新知