首页 > 解决方案 > 到事件存储问题的 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 ...以及其他一些连接设置自定义。事件存储和事件溯源对我来说是一个新领域,所以我可能在这里缺少一些基本的自定义。

感谢任何帮助或建议。

标签: asp.net-coreevent-sourcingeventstoredb

解决方案


本书代码使用 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

推荐阅读