从运行容器开始

docker run -v /www:/www -p 9601:9601 -p 9602:9602 -p 9603:9603 -it --entrypoint /bin/sh hyperf/hyperf:latest

# 镜像容器运行后,在容器内安装 Composer

wget https://github.com/composer/composer/releases/download/1.8.6/composer.phar

chmod u+x composer.phar

mv composer.phar /usr/local/bin/composer

# 将 Composer 镜像设置为阿里云镜像,加速国内下载速度

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

$ cd /www

# 通过 Composer 安装 hyperf/hyperf-skeleton 项目

composer create-project hyperf/hyperf-skeleton api

composer create-project hyperf/hyperf-skeleton org

composer create-project hyperf/hyperf-skeleton mms

在每个项目根目录里面都安装watch,这是热加载组件

wget -O watch https://gitee.com/hanicc/hyperf-watch/raw/master/watch

使用docker-compose启动

1、在宿主机的www目录下创建一个docker-compose目录,该目录用于存放相关的docker-compose和dockerfile文件

ps:这里不一定要在www目录下,但是换了其他目录的时候执行docker—compose -f 后面要带路径

2、在docker-compose目录下分别创建三个文件夹api、org、mms,这三个文件夹存储对应项目的dockerfile,内容如下:

FROM hyperf/hyperf

WORKDIR /www

#CMD ["php","bin/hyperf.php","start"]

CMD php watch -c

因为使用的都是同个镜像,所以内容都一样

3、边写docker-compose.yml

version: '2'

networks:

dev_yes:

services:

api:

build:

context: ./api

dockerfile: dockerfile

ports:

- "9601:9601"

volumes:

- /www/api:/www

networks:

- dev_yes

mms:

build:

context: ./mms

dockerfile: dockerfile

ports:

- "9602:9602"

volumes:

- /www/mms:/www

networks:

- dev_yes

org:

build:

context: ./org

dockerfile: dockerfile

ports:

- "9603:9603"

volumes:

- /www/org:/www

networks:

- dev_yes

在宿主机执行一下命令,启动服务

docker-compose -f /www/docker-compose/docker-compose.yml up

至此服务开启成功!

但是不知道为什么这里的watch热加载组件没有成功~~~

配置服务之间的通讯

api作为消费端

org和mms作为服务端

配置如下:

org服务端

先配置

config/autoload/server.php

'servers' => [

[

'name' => 'jsonrpc',

'type' => Server::SERVER_BASE,

'host' => '0.0.0.0',

'port' => 9603,

'sock_type' => SWOOLE_SOCK_TCP,

'callbacks' => [

SwooleEvent::ON_RECEIVE => [Hyperf\JsonRpc\TcpServer::class, 'onReceive'],

],

],

]

修改.env

APP_NAME=org

定义服务提供者和定义接口文件

JsonRpc/TestService.php

declare(strict_types=1);

namespace App\JsonRpc;

use Hyperf\RpcServer\Annotation\RpcService;

/**

* Class TestService

* @package App\JsonRpc

* @RpcService(name="TestService",protocol="jsonrpc",server="jsonrpc")

*/

class TestService implements TestServiceInterface

{

public function test(int $a , int $b) :array

{

return ['code'=>0,'data'=>'这是org服务提供者','params1'=>$a,'params2'=>$b];

}

}

JsonRpc/TestServiceInterface.php

declare(strict_types=1);

namespace App\JsonRpc;

interface TestServiceInterface

{

public function test(int $a , int $b):array ;

}

mms服务端

config/autoload/server.php

'servers' => [

[

'name' => 'jsonrpc',

'type' => Server::SERVER_BASE,

'host' => '0.0.0.0',

'port' => 9602,

'sock_type' => SWOOLE_SOCK_TCP,

'callbacks' => [

SwooleEvent::ON_RECEIVE => [Hyperf\JsonRpc\TcpServer::class, 'onReceive'],

],

],

]

修改.env

APP_NAME=mms

定义服务提供者和定义接口文件

JsonRpc/MmsService.php

declare(strict_types=1);

namespace App\JsonRpc;

use Hyperf\RpcServer\Annotation\RpcService;

/**

* Class MmsServeice

* @package App\JsonRpc

* @RpcService(name="MmsService",protocol="jsonrpc",server="jsonrpc")

*/

class MmsService implements MmsServiceInterface

{

public function mmsTest(string $cellPhone,int $code) :array

{

return ['code'=>0,'data'=>'这是mms服务端','message'=>'电话号码是'.$cellPhone.',验证码是'.$code];

}

}

JsonRpc/MmsServiceInterface.php

declare(strict_types=1);

namespace App\JsonRpc;

interface MmsServiceInterface

{

public function mmsTest(string $cellPhone, int $code) :array ;

}

api 消费端配置

config/autoload/services.php

declare(strict_types=1);

/**

* This file is part of Hyperf.

*

* @link https://www.hyperf.io

* @document https://doc.hyperf.io

* @contact group@hyperf.io

* @license https://github.com/hyperf/hyperf/blob/master/LICENSE

*/

return [

'consumers' => value(function (){

$services = [

'TestService'=>['service'=>\App\JsonRpc\TestServiceInterface::class,'host'=>'org','port'=>9603],

'MmsService'=>['service'=>\App\JsonRpc\MmsServiceInterface::class,'host'=>'mms','port'=>9602],

];

$consumers =[];

foreach ($services as $name => $value){

$consumers[] = [

'name' => $name,

'service' => $value['service'],

'protocol' => 'jsonrpc',

'load_balancer' => 'random',

'nodes' => [

['host' => $value['host'], 'port' => $value['port']],

],

];

}

return $consumers;

})

];

定义org和mms接口文件

JsonRpc/TestServiceInterface.php

declare(strict_types=1);

namespace App\JsonRpc;

interface TestServiceInterface

{

public function test(int $a , int $b):array ;

}

JsonRpc/MmsServiceInterface.php

declare(strict_types=1);

namespace App\JsonRpc;

interface MmsServiceInterface

{

public function mmsTest(string $cellPhone, int $code) :array ;

}

控制其中调用

declare(strict_types=1);

/**

* This file is part of Hyperf.

*

* @link https://www.hyperf.io

* @document https://doc.hyperf.io

* @contact group@hyperf.io

* @license https://github.com/hyperf/hyperf/blob/master/LICENSE

*/

namespace App\Controller;

use App\JsonRpc\MmsServiceInterface;

use App\JsonRpc\TestServiceInterface;

use Hyperf\HttpServer\Annotation\Controller;

use Hyperf\HttpServer\Annotation\GetMapping;

use Hyperf\Utils\ApplicationContext;

/**

* Class IndexController

* @package App\Controller

* @Controller(prefix="index")

*/

class IndexController extends AbstractController

{

/**

* @Author xue

* @DateTime 2020-08-25

* @GetMapping(path="testRpc")

*/

public function testRpc()

{

$orgClient = ApplicationContext::getContainer()->get(TestServiceInterface::class);

$data1 = $orgClient->test(1,2);

$mmsClient = ApplicationContext::getContainer()->get(MmsServiceInterface::class);

$data2 = $mmsClient->mmsTest('13681242210',1234);

$data[]=$data1;

$data[]=$data2;

return $data;

}

}

浏览器访问index/testRpc

输出:

[{"code":0,"data":"这是org服务提供者","params1":1,"params2":2},{"code":0,"data":"这是mms服务端","message":"电话号码是13681242210,验证码是1234"}]

正式环境docker部署hyperf_Hyperf使用docker-compose集群部署相关推荐

  1. 学习笔记Hadoop(五)—— Hadoop集群的安装与部署(2)—— Hadoop集群部署模式、配置固定IP

    一.Hadoop集群部署模式 Hadoop的安装部署的模式一共有三种: 独立模式(本地模式) standalone 默认的模式,无需运行任何守护进程(daemon),所有程序都在单个JVM上执行.由于 ...

  2. EureKa服务注册与发现(集群部署Eureka与支付模块集群部署、订单模块访问负载均衡调用支付服务实现)

    上一遍文章完成了,聚合父工程.消费模块.支付模块.公共模块的搭建.RestTemplate调用支付模块 该篇项目创建gitv2.0的管理分子完成学习 1.Eureka基础知识 1.1. 什么是服务治理 ...

  3. 【部署】Apache DolphinScheduler 伪集群部署

    [部署]Apache DolphinScheduler(海豚) 伪集群部署(Pseudo-Cluster) Standalone极速体验版 DolphinScheduler 伪集群部署 前置准备工作 ...

  4. 使用kubeadm部署k8s(2、k8s集群部署)

    1.kube-proxy开启ipvs的前置条件 默认情况下,Kube-proxy将在kubeadm部署的集群中以iptables模式运行,需要注意的是,当内核版本大于4.19时,移除了nf_connt ...

  5. Linux服务集群部署实战--MySQL、Redis、ES、RocketMQ、Zookeeper

    部署架构 部署计划 MySQL服务部署 架构 规划 部署pxc集群 部署MySQL主从架构 部署mycat集群 创建表以及测试 部署HAProxy redis集群部署 redis集群采用3主3从的架构 ...

  6. 《Linux运维实战:Centos7.6一键离线部署mongodb4.2.23副本集群》

    一.部署背景 由于业务系统的特殊性,我们需要面向不通的客户安装我们的业务系统,而作为基础组件中的mongodb针对不同的客户环境需要多次部署,作为一个运维工程师,提升工作效率也是工作中的重要一环.所以 ...

  7. ActiveMQ 集群部署

    ActiveMQ 集群部署 本章演示 ActiveMQ 集群部署,默认您已经安装了 zookeeper 集群,并在各服务器上成功安装了 ActiveMQ 单节点实例如果您的环境还不满足条件请参考前面的 ...

  8. KingbaseES集群部署工具安装

    目录 1 安装前准备 1.1 软件环境要求 1.2 安装包准备 1.3 注意事项 1.3.1 安装用户 1.3.2 安装目录 2 执行定制安装 3 测试集群部署工具 3.1 执行集群部署工具的可执行文 ...

  9. 二进制安装kubernetes v1.11.2 (第十章 kube-scheduler集群部署)

    继续前一章的部署. 十.kube-scheduler集群部署 该集群包含2个节点,启动后通过竞争选举机制产生一个leader节点,其他节点为阻塞状态.当leader节点不可用后,剩余的节点将再次进行选 ...

  10. 云堡垒机分布式集群部署优缺点简单说明

    目前云堡垒机安装部署模式主要分为单机部署.高可用集群部署以及分布式集群部署等.其中分布式集群部署就是将核心功能模块(如门户服务.会话中转服务.数据库服务等),分别部署在多个计算节点上.那采取布式集群部 ...

最新文章

  1. MyCollection 程序 F&Q
  2. springboot 整合mybatis_SpringBoot整合Mybatis、MybatisPuls
  3. PullToRefresh
  4. 深度学习笔记--单层感知机原理及代码实现
  5. 收藏!目标检测优质综述论文总结!
  6. SlideSwitch仿iphone滑动开关组件,仿百度魔图滑动开关组件Android
  7. OSI/RM体系结构
  8. 【2016年第1期】关于我国农业大数据中心建设的设想
  9. 微信小程序图标变形、微信小程序放大镜图标、图片设置为圆形——微信小程序(1)
  10. Excel技能培训之十五 函数使用rank,Frequency,subtotal超级表,切片器,iferor,常用错误代码
  11. tkinter运行时出现无响应问题
  12. 关于使用群晖系统创建音乐外链的研究
  13. ICC 图文学习——LAB2:Design Planning 设计规划
  14. Elasticsearch 查询时 判断不为null或不为空字符串
  15. 逻辑右移和算术右移有什么区别?
  16. 使用PayPal补习注册(2/3):PayPal项目的真实注册
  17. php handle 用用法,PHP_关于php fread()使用技巧,说明 string fread ( int handle, int le - phpStudy...
  18. 日常中一些好用的小软件
  19. LeetCode题解 - 动态规划-股票买卖
  20. 科普知识普及 - 桥接VS中继

热门文章

  1. 数据中台应用实战50篇(一)-企业级数据中台的建设方法架构和技术栈
  2. Java 动态调试技术原理及实践
  3. 用Tableau画延展条形图(Extended Bar Chart)
  4. 分布式计算Hadoop系列之如何Eclipse中构建Hadoop项目
  5. 放授权代码的php文件夹,自己的项目如果包含别人的开源代码,licence文件应放在哪里...
  6. Python入门100题 | 第079题
  7. 【Linux】2_文件和用户管理
  8. 五分钟学会悲观乐观锁-java vs mysql vs redis三种实现
  9. 数据库新秀 postgresql vs mongo 性能PK
  10. 使用 Spring Boot 快速构建 Spring 框架应用