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 중국어 웹사이트의 기타 관련 기사를 참조하세요!