RabbitMQ交换机fanout类型工作原理和PHP样例代码

1 fanout类型工作原理

这里写图片描述

fanout类型的Exchange路由规则非常简单,它会把所有发送到该Exchange的消息路由到所有与它绑定的Queue中:

当生成者将消息投递到exchange_fanout_clevercode。交互机exchange_fanout_clevercode将会将消息分别投递到和他绑定的queue_fanout_clevercode1,queue_fanout_clevercode2,queue_fanout_clevercode3三个队列中。

2 PHP样例代码

2.1 消费者进程

<?php
require_once __DIR__ . '/../../vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPConnection;

//连接
$host = '127.0.0.1';//ip
$port = '5672';//端口
$user = 'guest'; //用户
$password = 'guest'; //密码
$vhost = '/'; //空间
$connection = new AMQPConnection($host, $port,$user, $password,$vhost);
$channel = $connection->channel();

 /*
     name: 交换机名字
     type: 交换机类型
     passive: false
     durable: true // 交换机将在服务器重启后生存。
     auto_delete: false //通道关闭的时候,交换机不会被删除
 */
 $channel->exchange_declare('exchange_fanout_clevercode'
### RabbitMQ 中的不同类型交换机及其功能 #### 1. 直接交换机 (Direct Exchange) 直接交换机按照指定的路由键将消息转发到相应的队列。如果一个队列绑定此交换机并指定了特定的路由键,则只有带有相同路由键的消息会被传递给该队列[^1]。 ```python import pika connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) channel = connection.channel() channel.exchange_declare(exchange='direct_logs', exchange_type='direct') severity = 'error' message = 'This is an error message' channel.basic_publish( exchange='direct_logs', routing_key=severity, body=message) ``` #### 2. 扇形交换机 (Fanout Exchange) 扇形交换机会忽略路由键,会把收到的信息广播至所有已知的队列中。这意味着任何连接到这个交换机上的队列都会获得一份副本[^2]。 ```python channel.exchange_declare(exchange='logs', exchange_type='fanout') result = channel.queue_declare(queue='', exclusive=True) queue_name = result.method.queue channel.queue_bind(exchange='logs', queue=queue_name) ``` #### 3. 主题交换机 (Topic Exchange) 主题交换机允许更复杂的模式匹配来决定哪些消息应该被发送到哪个队列。通过通配符机制可以定义灵活的路由规则。 ```python channel.exchange_declare(exchange='topic_logs', exchange_type='topic') routing_key = "kern.critical" message = "A critical kernel error" channel.basic_publish( exchange='topic_logs', routing_key=routing_key, body=message) ``` #### 4. 头部交换机 (Headers Exchange) 头部交换机不依赖于路由键而是依据消息头属性来进行过滤。当消息到达时,它会检查这些预设条件并将符合条件的消息分发出去。 ```python headers = {"x-match": "all", "header-key": "value"} properties = pika.BasicProperties(headers=headers) channel.basic_publish( exchange="headers_exchange", routing_key="", properties=properties, body="Message with headers") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值