PHP+Actors==Dapr

7425 단어 actorsdaprtutorialphp

Disclosure: I'm the PHP SDK maintainer


PHP와 배우?

Dapr is a portable, event-driven runtime that makes it easy for any developer to build resilient, stateless and stateful applications that run on the cloud and edge and embraces the diversity of languages and developer frameworks.


Dapr(분산 응용 프로그램이 실행될 때)은 PHP를 지원합니다. 제가 보기에 참여자는 Dapr의 가장 멋진 부분입니다.Dapr은 virtual actor pattern를 구현했습니다.가상 배우 모델은 본질적으로 (이것은 매우 간략하다!)이것은 참여자의 어떤 실례도 '단일 라인'이 될 것이며, 호출되기 전에는 존재하지 않는다는 것을 의미한다.단선 비트는 내가 PHP에서 습관적으로 들은 것과 똑같다. 그러나'호출하기 전에는 존재하지 않는다'는 것은 내가 PHP 문서에서 읽은 것처럼 들린다.🤣
좋습니다. 이 뿐만 아니라, 더 좋은 개술을 얻기 위해 Daprdocumentation에 관한 글을 읽는 것을 강력히 권장합니다.이 캐릭터들이 PHP에서 어떤 모습인지 알고 싶으면 남겨주세요.

프로젝트 작성


php-sdk를 사용하면 composer init로 새 프로젝트를 만들고 composer require dapr/php-sdk를 실행하여 설치할 수 있습니다.
이 항목에 대해 간단한 actor를 만들어서 계산하고 호출합니다. Count 두 가지 방법이 있습니다. 하나는 현재 계수를 가져오고, 주어진 수량에 따라 계수를 늘리는 것입니다.

국가 따위


배우의 컨디션은 매우 간단하다.이리 와봐:

보시다시피state는 키가 하나뿐입니다. $count 기본값은 0의 정수입니다.추상 클래스를 확장하기만 하면 actor에서 사용할 수 있습니다.이것이 바로 당신이 필요로 하는 것입니다


인터페이스 생성


PHP 클라이언트를 사용하려면 참여자에게 인터페이스를 정의해야 합니다:





이 두 가지 방법과 속성을 볼 수 있습니다.ActorState 속성은 Dapr에 따라 참여자의 이름을 지정하므로 코드에 명시된 것과 일치할 필요가 없습니다


Implementing the interface


이제 이 인터페이스를 실현하려면 원하는 대로 간단합니다:





여기서 익숙한 #[DaprType()] 속성을 볼 수 있습니다. 이것은 참여자 id와 개인 상태를 받아들이는 구조 함수입니다.여기서부터 우리가 상태 및/또는 점증 상태로 돌아갈 때 실제적인 실현은 매우 간단하다


Testing


물론 코드는 간단해 보입니다.우리는 어떤 악작극도 없다는 것을 확인해야 한다. 그것의 작업 원리는 너의 기대에 완전히 부합된다.이를 위해 #[DaprType()]로 설치phpunit를 하고 단원 테스트를 작성합니다:





단원 테스트를 위한 기본 프레임워크가 없습니다. 따라서 시작 상태를 정하면 결과 상태가 원하는


현재 당신은 composer require --dev phpunit/phpunit를 사용하여 테스트를 진행할 수 있으며, 테스트를 phpunit와 같이 간단하게 하기 위해 스크립트로 추가할 수 있습니다


Tying it all together


이때actor가 실행되었습니다. 실행할 때 설정하고 초기화해야 합니다.런타임을 구성하려면 composer test 파일을 만듭니다.





지원하는 모든 키를 찾을 수 있습니다in the docs too


는 상대적으로 간단하고 자신의 의견을 고집하는 실시간 실행 라이브러리가 있습니다PHP-DI.하지만 DI 컨테이너, 라우터 또는 전체 프레임워크를 자체로 가져올 수 있습니다


실행 시간 초기화:





여기서 현재 URI를 출력하는 간단한 config.php를 볼 수 있습니다. 그 다음에 error_log() 호출을 볼 수 있습니다. DI 용기를 설정합니다


마지막 호출App::create(), 내장 루트 처리


Making a client


물론, 만약 당신이 원격 호출 서비스를 할 수 없다면, 이것은 재미없습니다.따라서, 사용$app->start(),repl:

제공 가능



Running it


The server





The client





Errata


이 게시물의 코드는 바로 여기에 있습니다:





Simple Dapr Actor Example


추적 계수의 간단한 배우


Running the server


$ PHP_CLI_SERVER_WORKERS=10 dapr run --app-id example --app-port 3000 --dapr-http-port 3500 -- php -S 0.0.0.0:3000 src/index.php

Running the repl

$ composer repl
>>>  $counter = $app->run(fn(Dapr\Actors\ActorProxy $proxy) => $proxy->get(Example\Interfaces\CountInterface::class, 'an id'))
=> Dapr\Proxies\dapr_proxy_Count {#2770
     +id: "an id",
     +DAPR_TYPE: "Count",
   }
>>> $counter->getCount()
=> 0
>>> $counter->incrementAndGet(13)
=> 13
>>> $counter->incrementAndGet(13)
=> 26
>>> $counter->incrementAndGet(13)
=> 39
>>> $counter->getCount();
=> 39










당신은 php sandbox에서 단원 테스트를 진행할 수 있습니다

좋은 웹페이지 즐겨찾기