rabbitmq 交换机模式 -主题模式 topic
建立一个交换机 tpc 并且绑定了各自的路由到 Q1 Q2
- <?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 = 'tpc'; //交换机名
- //$queueName = 'ttt'; //队列名称
- $routingKey = 'lazy.a.b'; //路由关键字(也可以省略)
- $conn = new AMQPStreamConnection( //建立生产者与mq之间的连接
- $conf['host'], $conf['port'], $conf['user'], $conf['pwd'], $conf['vhost']
- );
- $channel = $conn->channel(); //在已连接基础上建立生产者与mq之间的通道
- $channel->exchange_declare($exchangeName, 'topic', 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();
通过代码生产消息 时候,
- $routingKey = 'lazy.a.b'; //路由关键字(也可以省略)
Q2 会收到消息
- $routingKey = 'lazy.a'; //路由关键字(也可以省略)
- Q2也会收到消息
因为#号会匹配多个 比如 lazy.a lazy.b lazy.a.b.c
- $routingKey = 'a.orange.b'; //路由关键字(也可以省略)
Q1会收到消息 因为只匹配到orange 前面一个后面一个
- $routingKey = 'a.orange.b.c'; //路由关键字(也可以省略)
没有队列收到
- $routingKey = 'a.orange.rabbit'; //路由关键字(也可以省略)
两个都匹配到, 匹配到rabbit和 中间的orange
消费者代码
- <?php
- /**
- * Created by PhpStorm.
- * User: jmsite.cn
- * Date: 2019/1/15
- * Time: 13:16
- */
- //声明连接参数
- $config = array(
- 'host' => '192.168.33.50',
- 'vhost' => '/',
- 'port' => 5672,
- 'login' => 'admin',
- 'password' => 'password'
- );
- //连接broker
- $cnn = new AMQPConnection($config);
- if (!$cnn->connect()) {
- echo "Cannot connect to the broker";
- exit();
- }
- //在连接内创建一个通道
- $ch = new AMQPChannel($cnn);
- //创建一个交换机
- $ex = new AMQPExchange($ch);
- //声明路由键
- $routingKey = 'lazy.#';
- //声明交换机名称
- $exchangeName = 'tpc';
- //设置交换机名称
- $ex->setName($exchangeName);
- //设置交换机类型
- //AMQP_EX_TYPE_DIRECT:直连交换机
- //AMQP_EX_TYPE_FANOUT:扇形交换机
- //AMQP_EX_TYPE_HEADERS:头交换机
- //AMQP_EX_TYPE_TOPIC:主题交换机
- $ex->setType(AMQP_EX_TYPE_TOPIC);
- //设置交换机持久
- $ex->setFlags(AMQP_DURABLE);
- //声明交换机
- $ex->declareExchange();
- ////创建一个消息队列
- $q = new AMQPQueue($ch);
- //设置队列名称
- $q->setName('Q2');
- //设置队列持久
- $q->setFlags(AMQP_DURABLE);
- //声明消息队列
- $q->declareQueue();
- //交换机和队列通过$routingKey进行绑定
- //$q->bind($ex->getName(), $routingKey);
- //接收消息并进行处理的回调方法
- function receive($envelope, $queue) {
- //休眠两秒,
- sleep(2);
- //echo消息内容
- echo $envelope->getBody()."\n";
- //显式确认,队列收到消费者显式确认后,会删除该消息
- $queue->ack($envelope->getDeliveryTag());
- }
- //设置消息队列消费者回调方法,并进行阻塞
- $q->consume("receive");
- //$q->consume("receive", AMQP_AUTOACK);//隐式确认,不推荐
rabbitmq 交换机模式 -主题模式 topic的更多相关文章
- RabbitMQ六种队列模式-主题模式
前言 RabbitMQ六种队列模式-简单队列RabbitMQ六种队列模式-工作队列RabbitMQ六种队列模式-发布订阅RabbitMQ六种队列模式-路由模式RabbitMQ六种队列模式-主题模式 [ ...
- 队列模式&主题模式
# RabbitMQ 消息中间件 **Advanced Message Queuing Protocol (高级消息队列协议** The Advanced Message Queuing Protoc ...
- ActiveMQ--模式(队列模式/主题模式)
两种模式:队列模式/主题模式 pom.xml <dependency> <groupId>org.apache.activemq</groupId> <art ...
- RabbitMQ简单应用の主题模式(topic)
Topic exchange(主题转发器) 发送给主题转发器的消息不能是任意设置的选择键,必须是用小数点隔开的一系列的标识符.这些标识符可以是随意,但是通常跟消息的某些特性相关联.一些合法的路由选择键 ...
- Rabbitmq交换机三种模式介绍
1.topic 将路由键和某模式进行匹配.此时队列需要绑定要一个模式上.符号“#”匹配一个或多个词,符号“*”匹配不多不少一个词.因此“abc.#”能够匹配到“abc.def.ghi”,但是“abc. ...
- RabbitMQ入门:主题路由器(Topic Exchange)
上一篇博文中,我们使用direct exchange 代替了fanout exchange,这次我们来看下topic exchange. 一.Topic Exchange介绍 topic exchan ...
- SpringBoot整合RabbitMQ实现六种工作模式
RabbitMQ主要有六种种工作模式,本文整合SpringBoot分别介绍工作模式的实现. 前提概念 生产者 消息生产者或者发送者,使用P表示: 队列 消息从生产端发送到消费端,一定要通过队列转发,使 ...
- RabbitMQ六种队列模式-路由模式
前言 RabbitMQ六种队列模式-简单队列RabbitMQ六种队列模式-工作队列RabbitMQ六种队列模式-发布订阅RabbitMQ六种队列模式-路由模式 [本文]RabbitMQ六种队列模式-主 ...
- RabbitMQ六种队列模式-工作队列模式
前言 RabbitMQ六种队列模式-简单队列RabbitMQ六种队列模式-工作队列 [本文]RabbitMQ六种队列模式-发布订阅RabbitMQ六种队列模式-路由模式RabbitMQ六种队列模式-主 ...
随机推荐
- 大量数据也不在话下,Spring Batch并行处理四种模式初探
1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! Spring相关文章:Springboot-Cloud 前面写了一篇文章<通过例子讲解Spring Batch入门,优 ...
- 初等函数——指数函数(Exponential Function)
一般地,函数叫做指数函数,其中x是自变量,函数的定义域是R.
- 数据库SQL调优的几种方式
1.创建索引 (1) 要尽量避免全表扫描,首先应考虑在where 及order by涉及的列上建立索引 (2) 在经常需要进行检索的字段上创建索引,一个表中的索引最好不要超过6个 2.避免在索引上使用 ...
- .NET Core开源导入导出库 Magicodes.IE 2.3发布
在2.3这一版本的更新中,我们迎来了众多的使用者.贡献者,在这个里程碑中我们也添加并修复了一些功能.对于新特点的功能我将在下面进行详细的描述,当然也欢迎更多的人可以加入进来,再或者也很期待大家来提is ...
- robots检测插件编写
首先先把url分割 url = 'https://www.baidu.com/s?wd=123&rsv_spt=1&rsv_iqid=0x8d22781d000014ad&is ...
- xss利用——BeEF#stage4(其余功能介绍)
目录 信息收集 => 社会工程 =>网络扫描 => 结合metasploit => tunneling => xss => 维持权限 功能介绍 #1 - 信息收集 ...
- 使用jsonify返回json数据
from flask import Flask, jsonify app = Flask(__name__) json_data = [ {"name":"json&qu ...
- Spark中的聚类算法
Spark - Clustering 官方文档:https://spark.apache.org/docs/2.2.0/ml-clustering.html 这部分介绍MLlib中的聚类算法: 目录: ...
- 再解决不了前端加密我就吃shi
参考文章 快速定位前端加密方法 渗透测试-前端加密测试 前言 最近学习挖洞以来,碰到数据做了加密基本上也就放弃了.但是发现越来越多的网站都开始做前端加密了,不论是金融行业还是其他.所以趁此机会来捣鼓一 ...
- Python练习题 022:用递归函数反转字符串
[Python练习题 022] 利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来. --------------------------------------- 又来一个递归题!不过,有 ...