EventstoreDb——AppendToStreamAsync“挂起”为什么?

问题描述

我正在尝试实现基于 eventstore eventstore.com 的存储库。 Eventstore 正在运行 - 尝试 - 从我的 docker for windows 中使用普通香草。 我正在粗略地关注这里的视频:https://www.youtube.com/watch?v=Sopi-gI5qKU

现在,我对 AppendToStreamAsync 的调用挂了。我不明白为什么。 我做错了什么?

码头工人:

[ 1,12,10:25:43.886,INF] Connection '"external-normal"""' ["172.18.0.1:49020",{508e83cf-f221-4627-84a0-7c32265ee51d}] closed: Success.

[ 1,58,DBG] Persistent subscription lost connection from "172.18.0.1:49020"

[ 1,10:25:44.083,INF] External TCP connection accepted: [normal,"172.18.0.1:49024",L"172.18.0.3:1113",{9b21e221-ea26-43a0-889b-a01f8ee14929}].

[ 1,10:25:45.254,INF] ES "TcpConnection" closed [10:25:45.254: N"172.18.0.1:49024",{9b21e221-ea26-43a0-889b-a01f8ee14929}]:Received bytes: 153,Sent bytes: 0

[ 1,{9b21e221-ea26-43a0-889b-a01f8ee14929}]:Send calls: 0,callbacks: 0

[ 1,{9b21e221-ea26-43a0-889b-a01f8ee14929}]:Receive calls: 2,callbacks: 2

[ 1,{9b21e221-ea26-43a0-889b-a01f8ee14929}]:Close reason: [Success] "Socket closed"

[ 1,10:25:45.255,INF] Connection '"external-normal"""' ["172.18.0.1:49024",{9b21e221-ea26-43a0-889b-a01f8ee14929}] closed: Success.

[ 1,DBG] Persistent subscription lost connection from "172.18.0.1:49024"

https://github.com/AndersJuul/GameHall/blob/main/GameHall.SharedKernel.Tests/IntegrationTests/DataStorage/EventStoreRepositoryTests.cs

[Fact(Timeout = 20000)]
public async Task ThatStoredEventsCanBeRehydrated()
{
    var settings = ConnectionSettings.Create()
        .Keepreconnecting()
        .SetGossipTimeout(TimeSpan.FromMilliseconds(500))
        .SetGossipSeedEndPoints(
            new IPEndPoint(IPAddress.Loopback,2113)
        )
        .SetDefaultUserCredentials(new UserCredentials("admin","changeit"));
    var connection = EventStoreConnection.Create(settings,new IPEndPoint(IPAddress.Loopback,1113));
    await connection.ConnectAsync();

    var aggregateId = Guid.NewGuid();
    var list = new List<IEvent>()
    {
        new AccountCreatedEvent(aggregateId,"Eric"),new FundsDepositedEvent(aggregateId,150),100),new FundsWithdrawnEvent(aggregateId,25),};

    foreach (var ev in list)
    {
        var json = JsonConvert.SerializeObject(ev,new JsonSerializerSettings {TypeNameHandling = TypeNameHandling.None});
        var payload = Encoding.UTF8.GetBytes(json);
        var eventStoreDataType = new EventData(Guid.NewGuid(),ev.GetType().Name,true,payload,null);
        await connection.AppendToStreamAsync(Infrastructure.DataStorage.EventStore.StreamId(aggregateId),ExpectedVersion.Any,eventStoreDataType);
    }

解决方法

尽管您在不安全模式下运行 ESDB,但默认情况下客户端尝试通过 TCP 使用 TLS 连接,但失败了。

你可以简单地使用这条线连接,它会工作:

var connection = 
    EventStoreConnection.Create(
        "ConnectTo=tcp://localhost:1113; UseSslConnection=false;"
    );

请记住,TCP 协议是旧协议,将在某个时候逐步淘汰。我强烈建议只使用 gRPC 客户端。