<?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的更多相关文章

  1. 【RabbitMQ】Publish/Subscribe

    Publish/Subscribe 在上一节我们创建了一个work queue.背后的设想为每个任务被分发给明确的消费者.这节内容我们将做一些完全不同的事情 -- 我们将发送一条消息给多个消费者.这种 ...

  2. RabbitMQ(三) -- Publish/Subscribe

    RabbitMQ(三) -- Publish/Subscribe `rabbitmq`支持一对多的模式,一般称为发布/订阅.也就是说,生产者产生一条消息后,`rabbitmq`会把该消息分发给所有的消 ...

  3. RabbitMQ学习总结 第四篇:发布/订阅 Publish/Subscribe

    目录 RabbitMQ学习总结 第一篇:理论篇 RabbitMQ学习总结 第二篇:快速入门HelloWorld RabbitMQ学习总结 第三篇:工作队列Work Queue RabbitMQ学习总结 ...

  4. (转)RabbitMQ消息队列(四):分发到多Consumer(Publish/Subscribe)

    上篇文章中,我们把每个Message都是deliver到某个Consumer.在这篇文章中,我们将会将同一个Message deliver到多个Consumer中.这个模式也被成为 "pub ...

  5. RabbitMQ消息队列(四):分发到多Consumer(Publish/Subscribe)

    上篇文章中,我们把每个Message都是deliver到某个Consumer.在这篇文章中,我们将会将同一个Message deliver到多个Consumer中.这个模式也被成为 "pub ...

  6. RabbitMQ --- Publish/Subscribe(发布/订阅)

    目录 RabbitMQ --- Hello Mr.Tua RabbitMQ --- Work Queues(工作队列) 前言 在第二篇文章中介绍了 Work Queues(工作队列),它适用于把一个消 ...

  7. RabbitMQ 分发到多Consumer(Publish/Subscribe)

    上篇文章中,我们把每个Message都是deliver到某个Consumer.在这篇文章中,我们将会将同一个Message deliver到多个Consumer中.这个模式也被成为 "pub ...

  8. 译: 3. RabbitMQ Spring AMQP 之 Publish/Subscribe 发布和订阅

    在第一篇教程中,我们展示了如何使用start.spring.io来利用Spring Initializr创建一个具有RabbitMQ starter dependency的项目来创建spring-am ...

  9. RabbitMQ系列教程之三:发布/订阅(Publish/Subscribe)(转载)

    RabbitMQ系列教程之三:发布/订阅(Publish/Subscribe) (本教程是使用Net客户端,也就是针对微软技术平台的) 在前一个教程中,我们创建了一个工作队列.工作队列背后的假设是每个 ...

随机推荐

  1. alert(1) to win部分解题

    XSS在线习题分析 (https://alf.nu/alert1) 1. Warmup function escape(s) { return '<script>console.log(& ...

  2. 数据库——初始mysql语句(2)

    sql语句 #1. 操作文件夹(库) 增:create database db1 charset utf8; 查:show create database db1; show databases; 改 ...

  3. mysql查看语句执行状态的常见函数

    row_count() 返回上一个insert.update.delete语句的影响行数 found_rows() 返回上一个select查到的记录条数 last_insert_id() 返回上一次插 ...

  4. ubuntu--基础环境瞎搞集合

    安装ubuntu系统后有很多东西需要自己瞎搞一下,这里把一些瞎搞的过程记录在这里,方便以后重新装系统后重新配置. 一.安装. 可以在windows下制作启动盘(软碟通),然后开机u盘启动即可安装,预留 ...

  5. ZigBee学习三 UART通信

    ZigBee学习三 UART通信 在使用串口时,只需掌握ZigBee协议栈提供的串口操作相关的三个函数即可. uint8 HalUARTOpen(uint8 port,halUARTCfg_t *co ...

  6. 文件处理.Windows.Fastcopy.3.50.x64.文件复制简体中文破解版(验证版)

    摘要:Fastcopy 3.50 + x64 绿色汉化中文版由知索网汉化发布.Fastcopy 是一款来自日本的最快的文件拷贝工具.磁盘间相互拷贝文件是司空见惯的事情,通常情况都是利用 WINDOWS ...

  7. HTML表格嵌套、合并表格

    一.表格元素< table> table常用属性 border:边框像素 width,height:表格宽度/高度 bordercolor:表格边框颜色 bgcolor:表格背景颜色 二. ...

  8. ai相关

    学习资源 1.1 1.2 2.1 2.2 2.3 前置 octave sklearn python3 git 学习相关 link 定义 Field of study that gives comput ...

  9. linux之tr

    通过使用 tr,您可以非常容易地实现 sed 的许多最基本功能.您可以将 tr 看作为 sed 的(极其)简化的变体:它可以用一个字符来替换另一个字符,或者可以完全除去一些字符.您也可以用它来除去重复 ...

  10. 《Java性能权威指南》笔记----Java性能调优工具

    OS 1.CPU 用户态时间(us):cpu执行应用代码所占时间的百分比. 内核态时间(sy):cpu执行内核代码所占时间的百分比,系统态时间与应用相关. 空闲时间(id):cpu空闲时间百分比.空闲 ...