event-engine/php-engine-skeleton

Docker化的Event Engine PHP骨架


README

Docker化的Event Engine PHP骨架

安装

请确保已安装 DockerDocker Compose.

$ docker run --rm -it -v $(pwd):/app prooph/composer:7.4 create-project event-engine/php-engine-skeleton <your_project_name>
$ cd <your_project_name>
$ sudo chown $(id -u -n):$(id -g -n) . -R
$ docker-compose up -d
$ docker-compose run php php scripts/create_event_stream.php

访问 https://localhost 检查容器是否正在运行。接受自签名的证书,你应该会看到一个 "It works" 信息。

自定义

将所有文件中的 MyService 替换为你适当的服务命名空间。

@TODO: 添加功能性和面向对象风格的分支

教程

https://event-engine.io/tutorial/

数据库

骨架使用单个Postgres数据库作为写入和读取模型。

您可以使用以下凭证连接到Postgres DB(也列在 app.env 中)

PDO_DSN=pgsql:host=postgres port=5432 dbname=event_engine
PDO_USER=postgres
PDO_PWD=dev

注意:数据库运行在docker容器内。如果您想从主机系统连接,请使用 localhost 作为主机名!

Event Engine Cockpit

Cockpit 是Event Engine的管理UI。您可以在端口 4444 上访问它:https://localhost:4444。骨架已预配置了 cockpit-php-backend处理器

注意:为了避免CORS问题,Cockpit服务器的Nginx配置被修改,以作为从Cockpit到后端请求的代理。

您可以通过执行内置的 HealthCheck 查询来验证Cockpit是否可以访问Event Engine后端。

HealthCheck

RabbitMQ

骨架使用RabbitMQ作为消息代理,使用预配置的交换机 ui-exchange 和对应的队列 ui-queue。您可以在浏览器中打开Rabbit Mgmt UI: http://localhost:8081,并使用 user: proophpassword: prooph 登录。

骨架还包含一个示例JS客户端,该客户端连接到websocket并从 ui-queue 消费消息。在您的浏览器中打开 http://localhost:8080/ws.html,并使用 $eventEngine->on(Event::MY_EVENT, UiExchange::class) 在队列上转发事件。检查 src/Domain/Api/Listener 以获取示例。

单元和集成测试

我们在 tests 目录中准备了一个 BaseTestCase。从该类扩展您的测试用例,以获取一些非常有用的测试助手。请参阅教程以获取详细说明。

您可以使用docker运行测试

docker-compose run php php vendor/bin/phpunit

故障排除

使用命令 docker-compose ps 您可以列出正在运行的容器。它应该看起来像以下列表

                    Name                                   Command               State                             Ports                           
---------------------------------------------------------------------------------------------------------------------------------------------------
eebuildings_event_engine_projection_1    docker-php-entrypoint php  ...   Up                                                                
eebuildings_nginx_1                      nginx -g daemon off;             Up      0.0.0.0:443->443/tcp, 0.0.0.0:8080->80/tcp                
eebuildings_php_1                        docker-php-entrypoint php-fpm    Up      9000/tcp                                                  
eebuildings_postgres_1                   docker-entrypoint.sh postgres    Up      0.0.0.0:5432->5432/tcp                                    
eebuildings_rabbit_1                     docker-entrypoint.sh rabbi ...   Up      0.0.0.0:8081->15671/tcp, 15672/tcp,                       
                                                                                         0.0.0.0:15691->15691/tcp, 25672/tcp, 4369/tcp, 5671/tcp,  
                                                                                         5672/tcp 

确保您的机器上所有必需的端口都可用。如果不是,您可以在 docker-compose.yml 中修改端口映射。

您尝试过重新启动吗?

如果某些内容按预期不起作用,请首先尝试重新启动容器

$ docker-compose down
$ docker-compose up -d

投影重置

Event Engine Skeleton 使用单个投影进程(有关prooph投影的更多信息,请参阅 prooph文档)。您可以在Event Engine中注册自己的投影,这些投影都由自动启动的脚本 bin/event_engine_projection.php 管理的一个后台进程处理。也可以参见 docker-compose.yml。默认情况下,投影容器未激活。在 docker-compose.yml 中取消注释以使用它。

Docker已配置为在出现故障时重新启动投影容器。在开发模式下,投影过程有时会中断以同步您的最新代码更改。

如果您发现您的读取模型不是最新的或需要重置读取模型,可以使用此命令

$ docker-compose run php php bin/reset.php

如果您仍然有困难,请尝试逐步方法

$ docker-compose stop event_engine_projection
$ docker-compose run php php bin/reset.php
$ docker-compose up -d

您还可以使用以下命令检查投影日志

$ docker-compose logs -f event_engine_projection

事件引擎控制台未更新

当您在事件引擎中添加新命令或查询时,控制台UI不会自动从后端重新读取模式。使用顶部菜单中的刷新按钮重新加载模式。

一应俱全

您知道Docker的口号,对吧?事件引擎的骨架遵循相同的原则。它包含默认设置,以便您可以在不进行配置的情况下开始使用。默认设置可能不是您在生产环境中想要使用的。骨架可以被修改,并且应该被修改。

骨架的焦点是提供一个易于使用的开发环境,因此它使用Postgres和RabbitMQ容器的默认设置。在将容器部署到任何地方之前,请确保对它们进行安全加固!您在生产环境中应该构建并使用自己的Docker容器。如果您不能或不想使用Docker,则提供您需要的以您喜欢的任何方式的基础设施,并通过调整配置将事件引擎指向它。

由prooph软件提供支持

prooph software

事件引擎由prooph软件团队维护。事件引擎的源代码以及API文档和入门演示均已开源。Prooph软件为Event Engine以及prooph组件提供商业支持和研讨会。

如果您对此项服务感兴趣或需要项目支持,请与我们联系