asp.net-core - 到事件存储问题的 TCP 连接/配置
问题描述
继 Alexey Zimarev 这本关于 DDD 和事件溯源的好书之后,我将浏览代码示例,并在不同的域中编写相同的概念。尝试使用一个 .NET Core API 和 Event Store 数据库运行dockerized 示例,我能够正确启动一切,我转到 Event Store UI 应用程序,在那里我可以看到我的 API 设法初始化了与事件的连接店铺:
但是,当我尝试从控制器/服务代码连接到事件存储,尝试读取事件流时,我得到一个"error": "Item Operation ReadEventOperation... reached retries limit : 10 ... "stackTrace": " at EventStore.ClientAPI.Internal.EventStoreNodeConnection.ReadEventAsync ...
我的应用设置:
"eventStore": {
"connectionString": "ConnectTo=tcp://admin:changeit@host.docker.internal:1113; DefaultUserCredentials=admin:changeit; HeartBeatTimeout=500"
docker-compose.yml 事件存储服务:
services:
eventstore:
container_name: esskipass-eventstore
image: eventstore/eventstore
command: --dev --enable-external-tcp --ext-ip=0.0.0.0 --int-ip=0.0.0.0 --disable-external-tcp-tls
environment:
- EVENTSTORE_CLUSTER_SIZE=1
- EVENTSTORE_INT_TCP_PORT=1112
- EVENTSTORE_EXT_TCP_PORT=1113
- EVENTSTORE_INT_HTTP_PORT=2112
- EVENTSTORE_EXT_HTTP_PORT=2113
- EVENTSTORE_DEV=true
ports:
- "1112:1112"
- "1113:1113"
- "2112:2112"
- "2113:2113"
...
和事件存储日志:
...
[ 1,17,20:59:11.046,INF] External TCP connection accepted: [Normal, "172.20.0.1:54850", L"172.20.0.2:1113", {81629828-c448-49a0-8e99-6fb8803f3928}].
[ 1,21,20:59:12.509,INF] ES "TcpConnection" closed [20:59:12.508: N"172.20.0.1:54850", L"172.20.0.2:1113", {81629828-c448-49a0-8e99-6fb8803f3928}]:Received bytes: 312, Sent bytes: 0
[ 1,21,20:59:12.509,INF] ES "TcpConnection" closed [20:59:12.509: N"172.20.0.1:54850", L"172.20.0.2:1113", {81629828-c448-49a0-8e99-6fb8803f3928}]:Send calls: 0, callbacks: 0
[ 1,21,20:59:12.509,INF] ES "TcpConnection" closed [20:59:12.509: N"172.20.0.1:54850", L"172.20.0.2:1113", {81629828-c448-49a0-8e99-6fb8803f3928}]:Receive calls: 2, callbacks: 2
[ 1,21,20:59:12.509,INF] ES "TcpConnection" closed [20:59:12.509: N"172.20.0.1:54850", L"172.20.0.2:1113", {81629828-c448-49a0-8e99-6fb8803f3928}]:Close reason: [Success] "Socket closed"
[ 1,21,20:59:12.510,INF] Connection '"external-normal"""' ["172.20.0.1:54850", {81629828-c448-49a0-8e99-6fb8803f3928}] closed: Success.
[ 1, 6,20:59:12.511,DBG] Persistent subscription lost connection from "172.20.0.1:54850"
[ 1,21,20:59:12.718,INF] External TCP connection accepted: [Normal, "172.20.0.1:54870", L"172.20.0.2:1113", {45da7e67-2f2b-422b-a1eb-28339c685205}].
[ 1,10,20:59:17.735,DBG] Closing connection '"external-normal"""' ["172.20.0.1:54870", L"172.20.0.2:1113", {45da7e67-2f2b-422b-a1eb-28339c685205}] cleanly." Reason: HEARTBEAT TIMEOUT at msgNum 1"
[ 1,10,20:59:17.735,INF] ES "TcpConnection" closed [20:59:17.735: N"172.20.0.1:54870", L"172.20.0.2:1113", {45da7e67-2f2b-422b-a1eb-28339c685205}]:Received bytes: 312, Sent bytes: 22
[ 1,10,20:59:17.735,INF] ES "TcpConnection" closed [20:59:17.735: N"172.20.0.1:54870", L"172.20.0.2:1113", {45da7e67-2f2b-422b-a1eb-28339c685205}]:Send calls: 1, callbacks: 1
[ 1,10,20:59:17.735,INF] ES "TcpConnection" closed [20:59:17.735: N"172.20.0.1:54870", L"172.20.0.2:1113", {45da7e67-2f2b-422b-a1eb-28339c685205}]:Receive calls: 2, callbacks: 1
[ 1,10,20:59:17.735,INF] ES "TcpConnection" closed [20:59:17.735: N"172.20.0.1:54870", L"172.20.0.2:1113", {45da7e67-2f2b-422b-a1eb-28339c685205}]:Close reason: [Success] "HEARTBEAT TIMEOUT at msgNum 1"
[ 1,10,20:59:17.736,INF] Connection '"external-normal"""' ["172.20.0.1:54870", {45da7e67-2f2b-422b-a1eb-28339c685205}] closed: Success.
[ 1,21,20:59:17.736,DBG] Persistent subscription lost connection from "172.20.0.1:54870"
[ 1, 6,20:59:17.912,INF] External TCP connection accepted: [Normal, "172.20.0.1:54878", L"172.20.0.2:1113", {5c21a809-26be-42b7-b979-b2e6532d508d}].
[ 1,10,20:59:22.926,DBG] Closing connection '"external-normal"""' ["172.20.0.1:54878", L"172.20.0.2:1113", {5c21a809-26be-42b7-b979-b2e6532d508d}] cleanly." Reason: HEARTBEAT TIMEOUT at msgNum 1"
[ 1,10,20:59:22.927,INF] ES "TcpConnection" closed [20:59:22.926: N"172.20.0.1:54878", L"172.20.0.2:1113", {5c21a809-26be-42b7-b979-b2e6532d508d}]:Received bytes: 312, Sent bytes: 22
...
首先,我发现如果没有command: --dev --enable-external-tcp --ext-ip=0.0.0.0 --int-ip=0.0.0.0 --disable-external-tcp-tls
我的 Event Store 将无法启动,TCP 端口将开始禁用。然后我尝试设置不同的端口、HeartbeatTimeout、HeartbeatInterval ...以及其他一些连接设置自定义。事件存储和事件溯源对我来说是一个新领域,所以我可能在这里缺少一些基本的自定义。
感谢任何帮助或建议。
解决方案
本书代码使用 TCP 协议并以 EventStoreDB 5 为目标,因此您有两种选择。最简单的方法是更改撰写文件使用的图像:
image: eventstore/eventstore:release-5.0.8
如果您想使用 v20.6,最简单的方法是在不安全模式下使用 20.6.1 预览版:
version: '3.4'
services:
eventstore.db:
image: docker.pkg.github.com/eventstore/eventstore/eventstore:20.6.1-alpha.0.40-buster-slim
environment:
- EVENTSTORE_CLUSTER_SIZE=1
- EVENTSTORE_RUN_PROJECTIONS=All
- EVENTSTORE_START_STANDARD_PROJECTIONS=true
- EVENTSTORE_EXT_TCP_PORT=1113
- EVENTSTORE_EXT_HTTP_PORT=2113
- EVENTSTORE_INSECURE=true
- EVENTSTORE_ENABLE_ATOM_PUB_OVER_HTTP=true
ports:
- "1113:1113"
- "2113:2113"
volumes:
- type: volume
source: eventstore-volume-data
target: /var/lib/eventstore
- type: volume
source: eventstore-volume-logs
target: /var/log/eventstore
volumes:
eventstore-volume-data:
eventstore-volume-logs:
在开始撰写之前,您需要登录 GitHub 注册表一次。您需要在 GitHub 中获取个人访问令牌,然后将其用作docker login
. 用户名是您的 GitHub 帐户电子邮件。
docker login docker.pkg.github.com -u my@email.org -p mytoken
推荐阅读
- javascript - 如何在 Chart.js 中正确显示大量信息而不会过于拥挤
- javascript - momentjs 如何使时区数据保持最新
- spring - 包 org.apache.commons.lang 不存在 - Spring
- reactjs - 反应菜单切换类型错误(gsap,对象不可扩展)
- elasticsearch - Elasticsearch curl error Connection aborted.', RemoteDisconnected('远程端关闭连接无响应')
- c++ - jupyter的Xplot:“命名空间std中没有名为decay_t的模板”
- regex - Dart,正则表达式只允许#-_ *.?
- c++ - QChart 和使用 QGradients 加速 OpenGL 渲染
- amazon-web-services - 将域链接到 ALB,保持 https
- python - 我们应该在 ItemPipeline 中还是在蜘蛛本身中处理抓取的数据?