proophsoftware/event-machine-skeleton

Docker化的prooph软件Event Machine骨架

v0.16.0 2018-11-27 20:59 UTC

README

Docker化的prooph软件Event Machine骨架

安装

请确保您已安装DockerDocker 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: proophpassword: 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 software

事件机由prooph 软件团队维护。事件机的源代码是开源的,包括 API 文档和入门演示。Prooph 软件还为 Event Machine 以及prooph 组件提供商业支持和研讨会。

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