event-engine / php-engine-skeleton
Docker化的Event Engine PHP骨架
Requires
- php: ^7.4
- ext-json: *
- ext-mbstring: *
- ext-pdo: *
- event-engine/cockpit-php-backend: dev-master
- event-engine/discolight: ^0.2
- event-engine/php-data: ^1.0
- event-engine/php-engine: ^0.15
- event-engine/php-engine-utils: ^0.1
- event-engine/php-json-schema: ^1.0
- event-engine/php-logger: ^0.1
- event-engine/php-messaging: ^0.1
- event-engine/php-persistence: ^0.8
- event-engine/php-postgres-document-store: ^0.11
- event-engine/php-schema: ^0.1
- event-engine/prooph-v7-event-store: ^0.9
- laminas/laminas-config-aggregator: ^0.2.0
- laminas/laminas-diactoros: ^2.2
- laminas/laminas-httphandlerrunner: ^1.1
- laminas/laminas-stdlib: ^3.2
- laminas/laminas-stratigility: ^3.2
- mezzio/mezzio-helpers: ^5.3
- mezzio/mezzio-problem-details: ^1.0
- monolog/monolog: ^1.24
- nikic/fast-route: ^1.3
- opis/json-schema: ^1.0
- prooph/humus-amqp-producer: ^2.1
- prooph/pdo-event-store: ^1.0
- psr/http-server-middleware: ^1.0
- psr/log: ^1.1
- roave/security-advisories: dev-master
Requires (Dev)
- phpunit/phpunit: ^9.0
This package is auto-updated.
Last update: 2024-08-25 01:38:35 UTC
README
Docker化的Event Engine PHP骨架
安装
请确保已安装 Docker 和 Docker 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后端。
RabbitMQ
骨架使用RabbitMQ作为消息代理,使用预配置的交换机 ui-exchange
和对应的队列 ui-queue
。您可以在浏览器中打开Rabbit Mgmt UI: http://localhost:8081
,并使用 user: prooph
和 password: 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软件团队维护。事件引擎的源代码以及API文档和入门演示均已开源。Prooph软件为Event Engine以及prooph组件提供商业支持和研讨会。
如果您对此项服务感兴趣或需要项目支持,请与我们联系。