PHP实现RabbitMQ的Publish/Subscribe
<?php
/**
* Created by PhpStorm.
* User: 豆腐居士
* Date: 2018/5/30
* Time: 上午11:01
*/ class AqiTask extends BaseTask
{
const EX_NAME = 'aqi_fanout';
function clientAction()
{
$conn = new AMQPConnection([
'host' => '0.0.0.0',
'port' => 5672,
'login' => 'wangwang',
'password' => '123456'
]);
if (!$conn->connect()) {
exit('fail');
}
$channel = new AMQPChannel($conn);
$ex = new AMQPExchange($channel);
$ex->setName(self::EX_NAME);
$ex->setType(AMQP_EX_TYPE_FANOUT); //direct类型
$ex->setFlags(AMQP_DURABLE); //持久化
$ex->declareExchange();
for ($i = 0; $i < 10; $i++) {
$msg = 'hello fanout:' . $i;
echo $msg . PHP_EOL;
$ex->publish($msg);
}
$conn->disconnect();
} function server1Action()
{
$conn = new AMQPConnection([
'host' => '0.0.0.0',
'port' => 5672,
'login' => 'wangwang',
'password' => '123456'
]);
if (!$conn->connect()) {
exit('fail');
}
$channel = new AMQPChannel($conn);
$ex = new AMQPExchange($channel);
$ex->setName(self::EX_NAME);
$ex->setType(AMQP_EX_TYPE_FANOUT); //fanout类型
$ex->setFlags(AMQP_DURABLE); //持久化
$ex->declareExchange(); $queue = new AMQPQueue($channel);
$queue->setName('q1');
$queue->setFlags(AMQP_DURABLE);
$queue->declareQueue();
$queue->bind($ex->getName());try {
$queue->consume(function ($envelope, $q) {
echo 'server1:' . $envelope->getBody(), PHP_EOL;
$q->ack($envelope->getDeliveryTag()); //这里是手动应答 如果使用默认的自动应答,进程退出后消息会丢失
});
} catch (\Exception $e) {
echo $e->getMessage();
}
} function server2Action()
{
$conn = new AMQPConnection([
'host' => '0.0.0.0',
'port' => 5672,
'login' => 'wangwang',
'password' => '123456'
]);
if (!$conn->connect()) {
exit('fail');
} $channel = new AMQPChannel($conn);
$ex = new AMQPExchange($channel);
$ex->setName(self::EX_NAME);
$ex->setType(AMQP_EX_TYPE_FANOUT);
$ex->setFlags(AMQP_DURABLE);
$ex->declareExchange(); $queue = new AMQPQueue($channel);
$queue->setName('q2');
$queue->setFlags(AMQP_DURABLE);
$queue->declareQueue();
$queue->bind($ex->getName());$queue->consume(function ($envelope, $q) {
echo 'server2:' . $envelope->getBody(), PHP_EOL;
$q->ack($envelope->getDeliveryTag());
});
}
}
PHP实现RabbitMQ的Publish/Subscribe的更多相关文章
- 【RabbitMQ】Publish/Subscribe
Publish/Subscribe 在上一节我们创建了一个work queue.背后的设想为每个任务被分发给明确的消费者.这节内容我们将做一些完全不同的事情 -- 我们将发送一条消息给多个消费者.这种 ...
- RabbitMQ(三) -- Publish/Subscribe
RabbitMQ(三) -- Publish/Subscribe `rabbitmq`支持一对多的模式,一般称为发布/订阅.也就是说,生产者产生一条消息后,`rabbitmq`会把该消息分发给所有的消 ...
- RabbitMQ学习总结 第四篇:发布/订阅 Publish/Subscribe
目录 RabbitMQ学习总结 第一篇:理论篇 RabbitMQ学习总结 第二篇:快速入门HelloWorld RabbitMQ学习总结 第三篇:工作队列Work Queue RabbitMQ学习总结 ...
- (转)RabbitMQ消息队列(四):分发到多Consumer(Publish/Subscribe)
上篇文章中,我们把每个Message都是deliver到某个Consumer.在这篇文章中,我们将会将同一个Message deliver到多个Consumer中.这个模式也被成为 "pub ...
- RabbitMQ消息队列(四):分发到多Consumer(Publish/Subscribe)
上篇文章中,我们把每个Message都是deliver到某个Consumer.在这篇文章中,我们将会将同一个Message deliver到多个Consumer中.这个模式也被成为 "pub ...
- RabbitMQ --- Publish/Subscribe(发布/订阅)
目录 RabbitMQ --- Hello Mr.Tua RabbitMQ --- Work Queues(工作队列) 前言 在第二篇文章中介绍了 Work Queues(工作队列),它适用于把一个消 ...
- RabbitMQ 分发到多Consumer(Publish/Subscribe)
上篇文章中,我们把每个Message都是deliver到某个Consumer.在这篇文章中,我们将会将同一个Message deliver到多个Consumer中.这个模式也被成为 "pub ...
- 译: 3. RabbitMQ Spring AMQP 之 Publish/Subscribe 发布和订阅
在第一篇教程中,我们展示了如何使用start.spring.io来利用Spring Initializr创建一个具有RabbitMQ starter dependency的项目来创建spring-am ...
- RabbitMQ系列教程之三:发布/订阅(Publish/Subscribe)(转载)
RabbitMQ系列教程之三:发布/订阅(Publish/Subscribe) (本教程是使用Net客户端,也就是针对微软技术平台的) 在前一个教程中,我们创建了一个工作队列.工作队列背后的假设是每个 ...
随机推荐
- alert(1) to win部分解题
XSS在线习题分析 (https://alf.nu/alert1) 1. Warmup function escape(s) { return '<script>console.log(& ...
- 数据库——初始mysql语句(2)
sql语句 #1. 操作文件夹(库) 增:create database db1 charset utf8; 查:show create database db1; show databases; 改 ...
- mysql查看语句执行状态的常见函数
row_count() 返回上一个insert.update.delete语句的影响行数 found_rows() 返回上一个select查到的记录条数 last_insert_id() 返回上一次插 ...
- ubuntu--基础环境瞎搞集合
安装ubuntu系统后有很多东西需要自己瞎搞一下,这里把一些瞎搞的过程记录在这里,方便以后重新装系统后重新配置. 一.安装. 可以在windows下制作启动盘(软碟通),然后开机u盘启动即可安装,预留 ...
- ZigBee学习三 UART通信
ZigBee学习三 UART通信 在使用串口时,只需掌握ZigBee协议栈提供的串口操作相关的三个函数即可. uint8 HalUARTOpen(uint8 port,halUARTCfg_t *co ...
- 文件处理.Windows.Fastcopy.3.50.x64.文件复制简体中文破解版(验证版)
摘要:Fastcopy 3.50 + x64 绿色汉化中文版由知索网汉化发布.Fastcopy 是一款来自日本的最快的文件拷贝工具.磁盘间相互拷贝文件是司空见惯的事情,通常情况都是利用 WINDOWS ...
- HTML表格嵌套、合并表格
一.表格元素< table> table常用属性 border:边框像素 width,height:表格宽度/高度 bordercolor:表格边框颜色 bgcolor:表格背景颜色 二. ...
- ai相关
学习资源 1.1 1.2 2.1 2.2 2.3 前置 octave sklearn python3 git 学习相关 link 定义 Field of study that gives comput ...
- linux之tr
通过使用 tr,您可以非常容易地实现 sed 的许多最基本功能.您可以将 tr 看作为 sed 的(极其)简化的变体:它可以用一个字符来替换另一个字符,或者可以完全除去一些字符.您也可以用它来除去重复 ...
- 《Java性能权威指南》笔记----Java性能调优工具
OS 1.CPU 用户态时间(us):cpu执行应用代码所占时间的百分比. 内核态时间(sy):cpu执行内核代码所占时间的百分比,系统态时间与应用相关. 空闲时间(id):cpu空闲时间百分比.空闲 ...