>백엔드 개발 >PHP 문제 >PHP로 마이크로서비스를 구축하는 방법

PHP로 마이크로서비스를 구축하는 방법

(*-*)浩
(*-*)浩원래의
2019-09-30 14:49:584443검색

PHP로 마이크로서비스를 구축하는 방법

Hyperf (권장 학습: PHP 비디오 튜토리얼)

for Java 개발자의 경우 선택할 수 있는 매우 성숙한 마이크로서비스 프레임워크가 있습니다.

[Dubbo](https://dubbo.apache.org/zh-cn/)
[Spring Cloud](https://www.springcloud.cc/)

PHP 사용자로서 Google에서 "PHP + 마이크로서비스"를 확인하고 유용한 관련 콘텐츠를 찾았습니다. 참조할 가치가 거의 없고 실질적인 내용이 없습니다. , 그리고 무한한 우울함.

다행히 일부 마스터는 고성능 및 유연성이 뛰어난 PHP 코루틴 프레임워크 [Hyperf](Swoole 확장 기반 https://www.hyperf.io) /)를 구현했습니다. 마이크로서비스 아키텍처의 관련 구성요소를 제공합니다.

Hyperf는 'Swoole 4.3+'를 기반으로 하는 고성능 및 유연성이 뛰어난 PHP 코루틴 프레임워크로, 내장된 코루틴 서버와 다수의 일반적으로 사용되는 구성 요소를 갖추고 있습니다. 기존 `PHP 기반 -FPM` 프레임워크보다 성능이 향상되어 매우 유연한 확장성을 유지하면서 초고성능을 제공합니다. 표준 구성 요소는 [PSR 표준](https://www)을 기반으로 합니다. .php-fig.org/psr) 강력한 종속성 주입 설계를 기반으로 한 구현을 통해 대부분의 구성 요소나 클래스가 '교체 가능'하고 '재사용 가능'합니다.

그래서 마이크로서비스 아키텍처와 관련된 기본 지식을 배운 후 Hyperf 프레임워크를 사용하여 PHP 기반 마이크로서비스 클러스터를 구축했습니다. 프로젝트 소스 코드 주소는 입니다.

https://github.com/Jochen-z/php-microservice-demo

이 프로젝트는 Dokcer를 사용하여 빌드되었으며 `docker-compose.yml` 코드는 다음과 같습니다.

version:"3"
services:
consul-server- leader:
image:consul:latest
container_name:consul-server-leader
command:"agent -server -bootstrap -ui -node=consul-server-leader -client=0.0.0.0"
environment:
- CONSUL_BIND_INTERFACE=eth 0
ports:
- "8500:8500"
networks:
- microservice
microservice- 1:
build:
context:.
container_name:"microservice-1"
command:"php bin/hyperf.php start"
depends_on:
- "consul-server-leader"
volumes:
- ./www/microservice- 1:/var/www
networks:
- microservice
tty:true
microservice- 2:
build:
context:.
container_name:"microservice-2"
command:"php bin/hyperf.php start"
depends_on:
- "consul-server-leader"
volumes:
- ./www/microservice- 2:/var/www
networks:
- microservice
tty:true
app:
build:
context:.
container_name:"app"
command:"php bin/hyperf.php start"
depends_on:
- "microservice-1"
volumes:
- ./www/ web:/var/www
ports:
- "9501:9501"
networks:
- microservice
tty:true
networks:
microservice:
driver:bridge
volumes:
microservice:
driver:local

A Consul 컨테이너 `consul 여기에서 시작됩니다. -server-leader` 서비스 등록 및 서비스 검색의 구성 요소로 컨테이너 'microservice-1' 및 'microservice-2'는 각각 추가 및 분할 작업을 제공합니다.

Container `app`은 서비스 호출자로 `consul-server-leader` 컨테이너의 URL로 구성되며 `에 액세스하여 `microservice-1` 및 `microservice-2`를 얻습니다. consul-server-leader` `서비스의 IP 주소와 포트, 그리고 `app`이 RPC 프로토콜을 통해 추가 및 분할 서비스를 호출하여 결과를 얻어 사용자에게 반환합니다.

`app` 컨테이너는 Hyperf 프로젝트를 배포하고 외부 세계에 HTTP 서비스를 제공하는 웹 애플리케이션입니다.

예를 들어 `AppControllerIndexController` 컨트롤러에는 `add` 메소드가 있습니다:

publicfunctionadd(AdditionService $addition)
{
$a = (int) $this->request->input( 'a', 1); # 接受前端用户参数
$b = (int) $this->request->input( 'b', 2);
return[
'a'=> $a,
'b'=> $b,
'add'=> $addition->add($a, $b) # RPC调用
];
}
在 `AppJsonRpcAdditionService` 中 `add` 的实现:
classAdditionServiceextendsAbstractServiceClient
{
/**
* 定义对应服务提供者的服务名称
* @varstring
*/
protected$serviceName = 'AdditionService';
/**
* 定义对应服务提供者的服务协议
* @varstring
*/
protected$protocol = 'jsonrpc-http';
publicfunctionadd(int $a, int $b): int
{
return$this->__request( __FUNCTION__, compact( 'a', 'b'));
}
}

상속된 `AbstractServiceClient`를 사용하여 마이크로 서비스 클라이언트 요청 클래스인 Hyperf는 최하위 수준에서 Consul 및 서비스 공급자와의 상호 작용 세부 정보를 구현하는 데 도움이 됩니다. 'microservice-1' 및 'microservice-2'를 원격으로 호출하려면 'AdditionService' 클래스의 'add' 메서드만 필요합니다. ` 서비스를 제공합니다.

이제 PHP 마이크로서비스 클러스터 구축이 완료되었습니다!

위 내용은 PHP로 마이크로서비스를 구축하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.