<?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. winform 多个datagridview 之间同步滚动

    1.添加Scroll事件 2.注意需判断数据长度,避免溢出 private void dgYY_Scroll(object sender, ScrollEventArgs e) { ) { dgFee ...

  2. laravel 模型观察器

    模型观察器 对模型的生命周期内的多个时间点进行监控,分别有 ~ing 和 ~ed 事件 每个监控方法接收 model 作为唯一参数 使用观察器 创建观察器文件,一个普通类,不需要继承什么 针对需要的事 ...

  3. 使用php-vmstat遇到的麻烦

    workerman-vmstat是一个基于workerman的扩展,用于监听服务器应用对内存.cpu消耗的友好的查看功能,具体介绍可以去git上看:    https://github.com/wal ...

  4. Java进阶学习(2)之对象交互(上)

    对象交互 对象交互 对象的识别 时钟小程序 把现实世界用对象去建模,去分解问题规模,最终抽象成对象和对象的模型 例如11:03的小程序,可以抽象成一个显示类,一个类生成两个对象去表示时钟 packag ...

  5. 多进程manager共享

    使用manager在进程之间事项共享数据. 栗子: 主进程调用manager,创建一个字典d和一个列表l,启动十个子进程,每个子进程都向d和l中放数据 from multiprocessing imp ...

  6. k8s搭建

    K8s官方文档地址:https://kubernetes.io/docs/reference/command-line-tools-reference/kube-apiserver/  如果用云主机部 ...

  7. python第四节【函数】

    函数 1. 函数 def greet_user(): """显示简单的问候语""" print("Hello") gre ...

  8. DBC里首饰不同代码的含义

    DuraMax"这个就是我们要找的物件持久的属性了,一开始怎么也找不到,原来这里的变量中 "1000"表示1个持久度,那么"40000"就表示40个持 ...

  9. python学习之rabbitmq

    0.讲述rabbit中各部分的含义及作用 https://www.jb51.net/article/75647.htm 1.rabbitMQ的安装 1)在安装rabbitmq之前需要先安装erlang ...

  10. 根据权限显示accordion

    前端界面: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Home.asp ...