proophsoftware / event-machine-skeleton
Docker化的prooph软件Event Machine骨架
Requires
- php: ^7.1
- monolog/monolog: ^1.21
- nikic/fast-route: ^1.0
- prooph/humus-amqp-producer: ^2.0
- prooph/pdo-event-store: ^1.0
- proophsoftware/event-machine: ^v0.21
- proophsoftware/postgres-document-store: ^0.3
- psr/http-server-middleware: ^1.0
- psr/log: ^1.0
- roave/security-advisories: dev-master
- zendframework/zend-config-aggregator: ^0.2.0
- zendframework/zend-expressive-helpers: ^5.0
- zendframework/zend-problem-details: ^1.0
- zendframework/zend-stdlib: ^3.1.0
- zendframework/zend-stratigility: ^3.0
Requires (Dev)
- phpunit/phpunit: ^6.0
README
Docker化的prooph软件Event Machine骨架
安装
请确保您已安装Docker和Docker Compose。
$ docker run --rm -it -v $(pwd):/app prooph/composer:7.1 create-project proophsoftware/event-machine-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://proophsoftware.github.io/event-machine/tutorial/
演示
我们准备了一个名为demo
的分支,其中包含一个名为BuildingMgmt
的小型服务。它将向您展示事件机的基本知识和骨架结构。要运行演示,您必须克隆骨架而不是使用composer create-project
,这样您的本地副本仍然连接到github仓库。
*注意:事件机在组织代码的方式上非常灵活。骨架只是给出了一个可能的结构的示例。默认方式是使用静态聚合方法作为纯函数。然而,也可以使用有状态的OOP聚合。请参阅教程以获取更多信息。
$ git clone https://github.com/proophsoftware/event-machine-skeleton.git prooph-building-mgmt $ cd prooph-building-mgmt $ git checkout demo $ docker run --rm -it -v $(pwd):/app prooph/composer:7.1 install $ docker-compose up -d $ docker-compose run php php scripts/create_event_stream.php
转到http://localhost:8080
以检查容器是否正在运行。您应该看到一条“它工作”的消息。
数据库
该骨架使用单个Postgres数据库进行读写模型。写模型是事件驱动的,并将所有事件写入到prooph/event-store。读模型通过投影(参见src/Api/Projection
)创建,并存储在Postgres DB中。读模型表的前缀为em_ds_
,后缀为版本号,默认为0_1_0
。
您可以使用以下凭据(也在app.env
中列出)连接到Postgres DB
PDO_DSN=pgsql:host=postgres port=5432 dbname=event_machine PDO_USER=postgres PDO_PWD=
注意:数据库在docker容器中运行。如果您想从您的宿主系统连接,请使用localhost
作为主机名!
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
,使用$eventMachine->on(Event::MY_EVENT, UiExchange::class)
将事件推送到队列。请查看src/Api/Listener
以获取示例。
单元和集成测试
我们在tests
中准备了一个BaseTestCase
。从该类扩展您的测试用例以访问一些非常有用的测试助手。请参阅教程以获取详细说明。
您可以使用docker运行测试
docker-compose run php php vendor/bin/phpunit
故障排除
使用docker-compose ps
命令,您可以列出正在运行的容器。这应该看起来像以下列表
Name Command State Ports --------------------------------------------------------------------------------------------------------------------------------------------------- proophbuildingmgmt_event_machine_projection_1 docker-php-entrypoint php ... Up proophbuildingmgmt_nginx_1 nginx -g daemon off; Up 0.0.0.0:443->443/tcp, 0.0.0.0:8080->80/tcp proophbuildingmgmt_php_1 docker-php-entrypoint php-fpm Up 9000/tcp proophbuildingmgmt_postgres_1 docker-entrypoint.sh postgres Up 0.0.0.0:5432->5432/tcp proophbuildingmgmt_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
投影重置
事件机使用单一投影过程(了解更多关于 prooph 投影的信息,请参阅prooph 文档)。您可以在事件机中注册自己的投影,这些投影都由一个自动与脚本 bin/event_machine_projection.php
一起启动的后台进程处理。也请参阅 docker-compose.yml
。投影过程在其自己的 Docker 容器中运行,如果发生故障,Docker 会将其重新启动。投影过程有时会死亡以赶上您的最新代码更改。
如果您发现您的读取模型不是最新的或者您需要重置读取模型,可以使用此命令
$ docker-compose run php php bin/reset.php
如果您仍然遇到问题,请尝试逐步方法
$ docker-compose stop event_machine_projection $ docker-compose run php php bin/reset.php $ docker-compose up -d
您也可以使用以下方式检查投影日志
$ docker-compose logs -f event_machine_projection
Swagger UI 未更新
当您在事件机中添加新的命令或查询时,Swagger UI 不会自动重新读取后端的模式。只需重新加载 UI 或按 Explore
按钮。
内置功能
您知道 Docker 的口号吗?事件机骨架遵循相同的原理。它包含默认设置,以便您可以无需配置即可开始。默认设置可能不是您在生产中想要使用的。骨架可以,并且应该被修改。
骨架的焦点是提供易于使用的开发环境,因此它使用 Postgres 和 RabbitMQ 容器的默认设置。在将容器部署到任何地方之前,请确保保护容器!无论如何,您都应该在生产中使用并构建自己的 Docker 容器。如果您不能或不想使用 Docker,则可以按照您喜欢的任何方式提供所需的基础设施,并通过调整配置将事件机指向它。
由 prooph 软件提供支持
事件机由prooph 软件团队维护。事件机的源代码是开源的,包括 API 文档和入门演示。Prooph 软件还为 Event Machine 以及prooph 组件提供商业支持和研讨会。
如果您对此项服务感兴趣或需要项目支持,请联系我们。