<?php
/**
* 场景:
* 监控订单表状态 队列通信
* 一个进程向队列发布消息 另外两个进程争抢
*/ //设置主进程名
echo '主进程id:' . posix_getpid() . PHP_EOL;
cli_set_process_title('php_main'); //1、此子进程用于监听数据的改变
$process1 = new \Swoole\Process(function (\Swoole\Process $process) {
// cli_set_process_title('php_child');
$process->name('php_child1');
$pdo = new \PDO('mysql:host=mysql;dbname=test', 'root', 'csh.aptx4869#'); while (true) {
$statement = $pdo->query('select * from `order` where is_pay=1 and is_notice=0 order by id desc');
$data = $statement->fetch(PDO::FETCH_ASSOC);
if ($data) {
//投递数据到消息队列中
$process->push('php_child1发送' . $data['client_name'] . '已支付 ');
$pdo->exec('update `order` set is_notice=1 where id=' . $data['id']);
}
sleep(3);
}
}, false, SOCK_STREAM, true);
//启动消息队列作为进程间通信
$process1->useQueue(2);
echo '子进程1 id:' . $process1->start() . PHP_EOL; //2、此子进程用于发送邮件
$process2 = new \Swoole\Process(function (\Swoole\Process $process) {
$process->name('php_child2');
while (true) {
//从队列中提取数据
$orderInfo = $process->pop();
if ($orderInfo) {
echo $orderInfo;
echo 'php_child2发送邮件' . PHP_EOL;
}
sleep(3);
}
}, false, SOCK_STREAM, true);
$process2->useQueue(2);
echo '子进程2 id:' . $process2->start() . PHP_EOL; //3、此子进程用于发送邮件
$process3 = new \Swoole\Process(function (\Swoole\Process $process) {
$process->name('php_child3');
while (true) {
//从队列中提取数据
$orderInfo = $process->pop();
if ($orderInfo) {
echo $orderInfo;
echo 'php_child3发送邮件' . PHP_EOL;
}
sleep(3);
}
}, false, SOCK_STREAM, true);
$process3->useQueue(2);
echo '子进程3 id:' . $process3->start() . PHP_EOL; while (true) {
sleep(3);
} //\Swoole\Process::wait();
//使用Process作为监控父进程,创建管理子进程时,父类必须注册信号SIGCHLD对退出的进程执行wait,否则子进程退出时会变成僵尸进程
Swoole\Process::signal(SIGCHLD, function ($signo) {
//false 非阻塞模式
while ($ret = \Swoole\Process::wait(false)) {
var_dump($ret);
}
});

swoole 消息队列的更多相关文章

  1. php和redis怎么实现消息队列

    把瞬间服务器的请求处理换成异步处理,缓解服务器的压力,实现数据顺序排列获取.本文主要和大家分享php和redis如何实现消息队列,希望能帮助到大家. redis实现消息队列步骤如下: 1).redis ...

  2. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  3. 消息队列 Kafka 的基本知识及 .NET Core 客户端

    前言 最新项目中要用到消息队列来做消息的传输,之所以选着 Kafka 是因为要配合其他 java 项目中,所以就对 Kafka 了解了一下,也算是做个笔记吧. 本篇不谈论 Kafka 和其他的一些消息 ...

  4. .net 分布式架构之业务消息队列

    开源QQ群: .net 开源基础服务  238543768 开源地址: http://git.oschina.net/chejiangyi/Dyd.BusinessMQ ## 业务消息队列 ##业务消 ...

  5. 【原创经验分享】WCF之消息队列

    最近都在鼓捣这个WCF,因为看到说WCF比WebService功能要强大许多,另外也看了一些公司的招聘信息,貌似一些中.高级的程序员招聘,都有提及到WCF这一块,所以,自己也关心关心一下,虽然目前工作 ...

  6. Java消息队列--ActiveMq 实战

    1.下载安装ActiveMQ ActiveMQ官网下载地址:http://activemq.apache.org/download.html ActiveMQ 提供了Windows 和Linux.Un ...

  7. Java消息队列--JMS概述

    1.什么是JMS JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送 ...

  8. 消息队列性能对比——ActiveMQ、RabbitMQ与ZeroMQ(译文)

    Dissecting Message Queues 概述: 我花了一些时间解剖各种库执行分布式消息.在这个分析中,我看了几个不同的方面,包括API特性,易于部署和维护,以及性能质量..消息队列已经被分 ...

  9. Netty构建分布式消息队列(AvatarMQ)设计指南之架构篇

    目前业界流行的分布式消息队列系统(或者可以叫做消息中间件)种类繁多,比如,基于Erlang的RabbitMQ.基于Java的ActiveMQ/Apache Kafka.基于C/C++的ZeroMQ等等 ...

随机推荐

  1. aarch64架构下安装tensorflow详细过程

    本人使用的是: EAIDK-610开发板,Redhat的Linux系统,arm64架构,python3.6环境. 重要的: 一定要下载符合自己环境架构相同的tensorflow安装包. 三种架构: x ...

  2. liux 命令行

    查找文件 () find / -name httpd.conf #在根目录下查找文件httpd.conf,表示在整个硬盘查找 () find /etc -name httpd.conf #在/etc目 ...

  3. php 基础 字符型转换整形

    示例: 可以得出规律:以有效数字开头的,取有效数字.以非有效数字开头的都转换为0:

  4. Python格式化字符串知多少

    字符串格式化相当于字符串模板.也就是说,如果一个字符串有一部分是固定的,而另一部分是动态变化的,那么就可以将固定的部分做成模板,然后那些动态变化的部分使用字符串格式化操作符(%) 替换.如一句问候语: ...

  5. Java 枚举(enum)的学习

    Java 枚举(enum)的学习 本文转自:https://blog.csdn.net/javazejian/article/details/71333103 枚举的定义 在定义枚举类型时我们使用的关 ...

  6. c# Linq List<T>去除其中重复的项

    //要去重的 list<T> listTest: var resultlist= listTest.GroupBy(p =>p.Id).Select(g => g.First( ...

  7. iOS 开发之基于JWT的Token认证机制及解析

    在移动端和服务端通信中,一般有两种认证方式:token 和 session. 1.session/cookie 认证机制: 在服务端创建一个Session对象,同时在客户端的浏览器端创建一个Cooki ...

  8. PCC值average pearson correlation coefficient计算方法

    1.先找到task paradise 的m1-m6: 2.根据公式Dy=D1* 1/P*∑aT ,例如 D :t*k1   a:k2*k1: Dy :t*k2 Dy应该有k2个原子,维度是t: 3.依 ...

  9. 校准产品质量,把控出海航向,腾讯WeTest《2019中国移动游戏质量白皮书》正式开放预约

    作者:wetest小编 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. 原文链接:https://wetest.qq.com/lab/view/483.html 每当步入一个新的年份, ...

  10. 201771010135杨蓉庆《面向对象程序设计(java)》第六周学习总结

    实验六 继承定义与使用 1.实验目的与要求 (1) 理解继承的定义: (2) 掌握子类的定义要求 (3) 掌握多态性的概念及用法: (4) 掌握抽象类的定义及用途: (5) 掌握类中4个成员访问权限修 ...