docker + hyperf + rabbitmq打造高性能高并发高可用的服务架构

创建hyperf

Docker 下开发

docker run --name hyperf \
-v /www/wwwroot/project:/data/project \
-p 9501:9501 -it \
--privileged -u root \
--entrypoint /bin/sh \
hyperf/hyperf:7.4-alpine-v3.11-swoole

查看容器

docker ps -a

docker + hyperf + rabbitmq打造高性能高并发高可用的服务架构

启动容器

docker start 容器id

docker + hyperf + rabbitmq打造高性能高并发高可用的服务架构

进入容器

docker exec -it 容器id /bin/bash

docker + hyperf + rabbitmq打造高性能高并发高可用的服务架构

设置阿里云镜像

composer config -g repo.packagist composer https://mirrors.aliyun.com/composer

docker + hyperf + rabbitmq打造高性能高并发高可用的服务架构

创建项目

cd data/project/
composer create-project hyperf/hyperf-skeleton

docker + hyperf + rabbitmq打造高性能高并发高可用的服务架构

启动项目

cd hyperf-skeleton
php bin/hyperf.php start

访问

[root@iZvixj0oze6411Z webman]# curl 127.0.0.1:9501
{"method":"GET","message":"Hello Hyperf."}

创建rabbitmq

拉取rabbitmq镜像

[root@iZvixj0oze6411Z ~]# docker pull rabbitmq:3.9-management
3.9-management: Pulling from library/rabbitmq
eaead16dc43b: Pull complete 
d5e775568c00: Pull complete 
de99a1ffedd3: Pull complete 
32e52a38037e: Pull complete 
5ed4b54cb161: Pull complete 
32bea722cea4: Pull complete 
d547a307a70f: Pull complete 
e29573589782: Pull complete 
1e7b56521e24: Pull complete 
95bcf5c80f3f: Pull complete 
Digest: sha256:a40aee9f0eaebd910883d5b3d2fe26ee3a04e8e66a37032175167cb0ac58feb2
Status: Downloaded newer image for rabbitmq:3.9-management
docker.io/library/rabbitmq:3.9-management

查看镜像

[root@iZvixj0oze6411Z ~]# docker images
REPOSITORY                                      TAG                       IMAGE ID       CREATED        SIZE
rabbitmq                                        3.9-management            dd952ebca9a2   2 weeks ago    262MB

创建容器

[root@iZvixj0oze6411Z ~]# docker run -d --name MyRabbitMq -p 15672:15672 -p 5672:5672 rabbitmq:3.9-management
fcfc4cc56a733e6d4b580b7cebd354cb074864d739699673a201a1d5bdd9fabc

访问

http://ip:15672/
账号guest
密码guest

配置hyperf容器连接rabbitmq服务

进入容器

[root@iZvixj0oze6411Z ~]# docker attach c30542df1122
/ # 

AMQP 组件

安装

docker + hyperf + rabbitmq打造高性能高并发高可用的服务架构

composer require hyperf/amqp

命令行

 composer require hyperf/command

创建 rabbitmq 配置文件

添加一个用户amqptest,密码为123456

docker + hyperf + rabbitmq打造高性能高并发高可用的服务架构

docker + hyperf + rabbitmq打造高性能高并发高可用的服务架构

docker + hyperf + rabbitmq打造高性能高并发高可用的服务架构
点击添加权限

docker + hyperf + rabbitmq打造高性能高并发高可用的服务架构

点击set permission后返回即可
docker + hyperf + rabbitmq打造高性能高并发高可用的服务架构

docker + hyperf + rabbitmq打造高性能高并发高可用的服务架构

<?php

return [
    'default' => [
//        'host' => 'localhost',
        'host' => '47.113.xxx.xx', //用的容器需要用到宿主机的ip地址
        'port' => 5672,
        'user' => 'amqptest', //rabbitmq 设置
        'password' => '123456',//rabbitmq 设置
        'vhost' => '/',//rabbitmq 设置
        'concurrent' => [
            'limit' => 1,
        ],
        'pool' => [
            'connections' => 1,
        ],
        'params' => [
            'insist' => false,
            'login_method' => 'AMQPLAIN',
            'login_response' => null,
            'locale' => 'en_US',
            'connection_timeout' => 3.0,
            'read_write_timeout' => 6.0,
            'context' => null,
            'keepalive' => false,
            'heartbeat' => 3,
            'close_on_destruct' => false,
        ],
    ],
//    'pool2' => [
//        ...
//    ]
];

创建一个生产者

投递消息

/data/project/hyperf-skeleton # php bin/hyperf.php gen:amqp-producer DemoProducer

docker + hyperf + rabbitmq打造高性能高并发高可用的服务架构

添加一个hyperf交换机

docker + hyperf + rabbitmq打造高性能高并发高可用的服务架构

docker + hyperf + rabbitmq打造高性能高并发高可用的服务架构

'vhost' => '/' 对应 Can access virtual hosts

docker + hyperf + rabbitmq打造高性能高并发高可用的服务架构

docker + hyperf + rabbitmq打造高性能高并发高可用的服务架构

添加一个测试队列

docker + hyperf + rabbitmq打造高性能高并发高可用的服务架构

交换机绑定队列

docker + hyperf + rabbitmq打造高性能高并发高可用的服务架构

docker + hyperf + rabbitmq打造高性能高并发高可用的服务架构
队列绑定交换机

docker + hyperf + rabbitmq打造高性能高并发高可用的服务架构

docker + hyperf + rabbitmq打造高性能高并发高可用的服务架构

一定要相互绑定,不然写不入队列数据

生成命令

/data/project/hyperf-skeleton # php bin/hyperf.php gen:command FooCommand

WaitGroup 特性

docker + hyperf + rabbitmq打造高性能高并发高可用的服务架构

<?php

declare(strict_types=1);

namespace App\Command;

use App\Amqp\Producer\DemoProducer;
use Hyperf\Amqp\Producer;
use Hyperf\Command\Command as HyperfCommand;
use Hyperf\Command\Annotation\Command;
use Hyperf\Utils\ApplicationContext;
use Psr\Container\ContainerInterface;

/**
 * @Command
 */
#[Command]
class FooCommand extends HyperfCommand
{
    /**
     * @var ContainerInterface
     */
    protected $container;

    public function __construct(ContainerInterface $container)
    {
        $this->container = $container;

        parent::__construct('demo:command');
    }

    public function configure()
    {
        parent::configure();
        $this->setDescription('Hyperf Demo Command');
    }

    public function handle()
    {
        $wg = new \Hyperf\Utils\WaitGroup();
        $wg->add(1000); //1000并发

        try {
            for ($i = 0; $i < 1000; $i++) {
                var_dump('执行:' . $i);
                co(function () use ($wg) {
                    $message = new DemoProducer(['title' => '1000并发生产者']);
                    $producer = ApplicationContext::getContainer()->get(Producer::class);
                    $producer->produce($message);
                    $wg->done();
                });
            }

        } catch (\Exception $exception) {
            var_dump($exception->getMessage());
        }
        var_dump('执行完成1');
        $wg->wait();
        var_dump('执行完成2');
    }
}

引入类

Alt + Enter

执行命令

/data/project/hyperf-skeleton # php bin/hyperf.php demo:command
[DEBUG] Event Hyperf\Framework\Event\BootApplication handled by Hyperf\Config\Listener\RegisterPropertyHandlerListener listener.
[DEBUG] Event Hyperf\Framework\Event\BootApplication handled by Hyperf\ExceptionHandler\Listener\ExceptionHandlerListener listener.
[DEBUG] Event Hyperf\Framework\Event\BootApplication handled by Hyperf\DbConnection\Listener\RegisterConnectionResolverListener listener.

如果不行,重新相互绑定,不然写不入队列数据

docker + hyperf + rabbitmq打造高性能高并发高可用的服务架构

进入队列查看3条数据

docker + hyperf + rabbitmq打造高性能高并发高可用的服务架构

消费者

消费消息

php bin/hyperf.php gen:amqp-consumer DemoConsumer

docker + hyperf + rabbitmq打造高性能高并发高可用的服务架构

消费(启动就可以消费)

php bin/hyperf.php start

docker + hyperf + rabbitmq打造高性能高并发高可用的服务架构

参考视频
Docker+HyperF+RabbitMq打造高性能高并发高可用的服务架构

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 1

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!