6

우리는 Akka.NET을 사용하여 새 시스템을 만들고 샤딩 및 지속성을 사용하여 기본 클러스터를 설정합니다.Akka .NET 연결 풀 시간 초과 문제

샤딩이 제대로 작동하려면 공식 문서와 PetBridge 블로그 게시물을 사용했습니다. 그러나 파편이 SQL Server 연결 풀에서 허용하는 최대 연결 수를 초과하는 문제가 발생했습니다. 04 : 31.433 +01 : 따라서, 우리는 다음과 같은 메시지 ...

2017년 4월 20일 (14)가 있어요. 00 [주의] "제한 시간이 만료을 제한 시간 전에 연결을 얻기에 경과 풀링 된 모든 연결이 사용 중이므로 최대 풀 크기에 도달했기 때문에이 문제가 발생할 수 있습니다. "

샤드가 샤딩 저널을 업데이트 할 때 이러한 현상이 발생한다고 생각합니다.

어떻게 샤딩 모듈이 SQL 연결을 제대로 관리하지 않습니까? 여기에 구성 문제가 있습니까?

이런 종류의 오류가 발생하면 다시 시도 할 수 있습니까? 우리는이 오류가 발생할 때마다 메시지를 잃어 버리게됩니다. 이벤트가 될 수있는 풀에서 다음 연결을 기다리는 동안

여기서, SQL 저널이 너무 많이 들어오는 이벤트에 해당 연결 타임 아웃 트리거를 침수되고 있다는 신호가 될 수있다

cluster.sharding { 
    journal-plugin-id = "akka.persistence.journal.sharding" 
    snapshot-plugin-id = "akka.persistence.snapshot-store.sharding" 
} 
persistence { 
    journal { 
     plugin = "akka.persistence.journal.sql-server" 
     sql-server { 
      class = "Akka.Persistence.SqlServer.Journal.SqlServerJournal, Akka.Persistence.SqlServer" 
      connection-string = "Server=.;Database=akkasystem;Integrated Security=true" 
      schema-name = dbo 
      auto-initialize = on 
     } 
     # a separate config used by cluster sharding only 
     sharding { 
      connection-string = "Server=.;Database=akkasystem;Integrated Security=true" 
      auto-initialize = on 
      plugin-dispatcher = "akka.actor.default-dispatcher" 
      class = "Akka.Persistence.SqlServer.Journal.SqlServerJournal, Akka.Persistence.SqlServer" 
      connection-timeout = 30s 
      schema-name = dbo 
      table-name = ShardingJournal 
      timestamp-provider = "Akka.Persistence.Sql.Common.Journal.DefaultTimestampProvider, Akka.Persistence.Sql.Common" 
      metadata-table-name = ShardingMetadata 
     } 
    } 
    snapshot-store { 
     sharding { 
      class = "Akka.Persistence.SqlServer.Snapshot.SqlServerSnapshotStore, Akka.Persistence.SqlServer" 
      plugin-dispatcher = "akka.actor.default-dispatcher" 
      connection-string = "Server=.;Database=akkasystem;Integrated Security=true" 
      connection-timeout = 30s 
      schema-name = dbo 
      table-name = ShardingSnapshotStore 
      auto-initialize = on 
     } 
    } 
} 

답변

1

관련 HOCON에게있어 해방.

필자의 설정에서 볼 때 이벤트 지속성이 높고 비율이 높은 조각/엔티티를 만드는 경우 발생할 수 있습니다. 기존 SQL 저널은 가까운 미래에 상당한 속도 향상을 얻을 것입니다 (batching journals 참조). 바라기를 이것은 당신의 문제를 해결하는 데 도움이 될 수 있습니다.

+0

우리가 지금 당면하는 가장 큰 관심사는 우리가 효과적으로 이러한 메시지를 한 번 배달하는 것입니다. SQL 타임 아웃이 발생할 때마다 수행 된 작업이 손실됩니다. 우리는 Akka.Persistence를 사용하여 최소한 한 번 배송을 달성 할 수 있기를 바랍니다. 지금까지는 그렇지 않았던 것 같습니다. 작업을 다시 시도 할 수 있도록이 작업을 수행하는 방법에 대해 조언 해 주시겠습니까?/시간 초과가 발생해도 메시지가 손실되지 않습니다? – Aaron

+0

[This snippet] (https://gist.github.com/Horusiath/64d829720b66df16bc59dbf106a8008e)은 최소한 한 번 배달 게이트웨이로 작동하는 프록시 액터를 만드는 방법에 대한 예입니다. 그러나 그것은 당신의 행위자가 멱등 한 방식으로 들어오는 메시지를 처리하도록 강요 할 것임을 기억하십시오. 또한 적어도 한 번 배달 의미론을 실제로 원한다면, 종종 큐 (예 : RabbitMQ 또는 Kafka)를 통신 체인 앞에 두는 것이 좋습니다. 실패하면 처리되지 않은 메시지의 프로세스를 다시 시작하기 만하면됩니다. . – Horusiath