先上配置文件 docker-compose.yml
version: "3"
services:
mine_develop:
container_name: mine_develop
hostname: mine_develop
image: hyperf/hyperf:8.0-alpine-v3.12-swoole
volumes:
- ./:/app-src/
ports:
- 19551:9501
- 19552:9502
- 19553:9503
restart: on-failure
environment:
- APP_ENV=dev #节点名称
- APP_NAME=MineAdmin #节点名称
- APP_VERSION=1.0 #节点版本
- APP_DEBUG=true #节点是否debug模式
- APP_NODE=NODE1 #节点url
network_mode: bridge
# entrypoint: ["php", "bin/hyperf.php", "start"]
links:
- mine_develop_db
- mine_develop_redis
command:
- bash
- -c
- |
php -v
php --ri swoole
php -m
cd /app-src
composer install -o
composer dump-autoload -o
rm -rf runtime/container
php bin/hyperf.php server:watch
mine_develop_redis:
container_name: mine_develop_redis
hostname: mine_develop_redis
image: redis:latest
env_file: env.cnf
ports:
- 16398:6379
volumes:
- "/usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro"
restart: always
network_mode: bridge
mine_develop_db:
container_name: mine_develop_db
hostname: mine_develop_db
image: mysql:5.7
env_file: env.cnf
volumes:
- "./data/mysql:/var/lib/mysql:rw"
- "/usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro"
ports:
- 13309:3306
restart: always
command: --default-authentication-plugin=mysql_native_password --skip-external-locking
network_mode: bridge
mine_develop_rabbit:
container_name: mine_develop_rabbit
hostname: mine_develop_rabbit
image: rabbitmq:management
env_file: env.rabbit #配置文件
volumes:
- "/usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro"
ports:
- 15677:15672
- 25657:5672
- 34677:25672
- 41617:61613
- 4887:1883
restart: always
network_mode: bridge
.env 文件
APP_NAME=skeleton
APP_ENV=dev
DB_DRIVER=mysql
DB_HOST=mine_develop_db
DB_PORT=3306
DB_DATABASE=mine
DB_USERNAME=root
DB_PASSWORD=123456
DB_CHARSET=utf8mb4
DB_COLLATION=utf8mb4_unicode_ci
DB_PREFIX=
REDIS_HOST=mine_develop_redis
REDIS_AUTH=
REDIS_PORT=6379
REDIS_DB=0
AMQP_HOST = mine_develop_rabbit
AMQP_PORT = 5672
AMQP_USER = lxfb
AMQP_PASSWORD = aw123456
AMQP_VHOST = /
AMQP_ENABLE = true
SUPER_ADMIN = 1000
ADMIN_ROLE = 1000
CONSOLE_SQL = true
JWT_SECRET="i1XHbusuPRnYmeQ0SNDumOu4YBLzsf/VhGjEojhnH+HY2WJ4c6rc6IwTXSe4ZYNZSdlobojRsMnA2PFwKDiC5Q=="
JWT_API_SECRET="pMr2XY2v7Gaq+AO+7Q4J09QkfaFg7o3J5Pp8ivGHTInXxrjA3arbJwEST5DIJmCezLKOMKL+wFASNhK9Gf4D1Q=="
mine_develop_rabbit是容器名
接着打开并且进入rabbitmq容器
依次执行以下命令
rabbitmqctl add_user lxfb aw123456 #创建rabbitmq用户
rabbitmqctl set_user_tags lxfb administrator #赋予管理员权限
rabbitmqctl set_permissions -p / lxfb '.*' '.*' '.*' #后台访问权限
重启容器
网址访问
账号密码则是设置的 lxf 123456
环境配置完成
然后打开mineadmin项目文件
路径 App\System\Queue\Consumer
文件改成
<?php
declare(strict_types=1);
namespace App\System\Queue\Consumer;
use Hyperf\Amqp\Result;
use Hyperf\Amqp\Annotation\Consumer;
use Hyperf\Amqp\Message\ConsumerMessage;
use PhpAmqpLib\Message\AMQPMessage;
/**
* 后台内部消息队列消费处理
* @Consumer(exchange="mineadmin", routingKey= "message.routing", queue= "message.queue", name= "message.queue", nums= 1)
*/
class MessageConsumer extends ConsumerMessage
{
/**
* @param $data
* @param AMQPMessage $message
* @return string
*/
public function consumeMessage($data, AMQPMessage $message): string
{
return parent::consumeMessage($data, $message);
}
public function consume($data): string
{
return empty($data) ? Result::DROP : Result::ACK;
}
/**
* 设置是否启动amqp
* @return bool
*/
public function isEnable(): bool
{
return env('AMQP_ENABLE', false);
}
}
路径 App\System\Queue\Producer
文件改成
<?php
declare(strict_types=1);
namespace App\System\Queue\Producer;
use Hyperf\Amqp\Annotation\Producer;
use Hyperf\Amqp\Message\ProducerMessage;
/**
* 后台内部消息队列生产处理
* @Producer(exchange="mineadmin", routingKey="message.routing")
*/
class MessageProducer extends ProducerMessage
{
/**
* @throws \Psr\Container\ContainerExceptionInterface
* @throws \Psr\Container\NotFoundExceptionInterface
*/
public function __construct($data)
{
console()->info(
sprintf(
'MineAdmin created queue message time at: %s, data is: %s',
date('Y-m-d H:i:s'),
(is_array($data) || is_object($data)) ? json_encode($data) : $data
)
);
$this->payload = $data;
}
}
剩下的登陆后台发送消息就行.