rabbitmq 交换机模式一 广播模式 fanout

<?php

require_once "./vendor/autoload.php";

use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;


$conf = [
	'host' => '192.168.33.50',
	'port' => 5672,
	'user' => 'admin',
	'pwd' => 'password',
	'vhost' => '/',
];

$exchangeName = 'fff'; //交换机名
//$queueName = 'ttt'; //队列名称
$routingKey = 'rt'; //路由关键字(也可以省略)

$conn = new AMQPStreamConnection( //建立生产者与mq之间的连接
	$conf['host'], $conf['port'], $conf['user'], $conf['pwd'], $conf['vhost']
);
$channel = $conn->channel(); //在已连接基础上建立生产者与mq之间的通道


$channel->exchange_declare($exchangeName, 'fanout', false, true, false); //声明初始化交换机
//$channel->queue_declare($queueName, false, true, false, false); //声明初始化一条队列
//$channel->queue_bind($queueName, $exchangeName, $routingKey); //将队列与某个交换机进行绑定,并使用路由关键字



$msgBody = json_encode(["name" => "iGoo", "age" => 22]);
$msg = new AMQPMessage($msgBody, ['content_type' => 'text/plain', 'delivery_mode' => 2]); //生成消息
$r = $channel->basic_publish($msg, $exchangeName, $routingKey); //推送消息到某个交换机
$channel->close();
$conn->close();

  

执行代码  php pub.php 查看后台 已经生成了 交换机 但是目前没有设置路由绑定到交换机 手动建立几个队列

 

 

队列   a  b  c

交换机绑定到这三个队列,通过路由

       rt rt  rt1 

 

 

进行推送,看结果是推送到三个队列上还是两个队列上, 代码写了route是rt  

 

 

 

结果三个队列都收到消息了, 是不是说明广播模式的只要绑定了队列,不管路由什么样子都会转发过去

$routingKey = 'rt1'; //路由关键字(也可以省略)
改下这个 路由 在执行一遍

php pub.php 发现 也是一样

 

 

 

 

$routingKey = ''; //路由关键字(也可以省略)

在执行一次 结果也是都转发了

   分发消息到与之绑定的所有队列,发送消息到交换器时会忽略routing key(路由),我们可以称它为广播消息

posted @ 2020-08-21 20:43  brady-wang  阅读(490)  评论(0编辑  收藏  举报