Akka.NETを使用して新しいシステムを作成し、シャーディングと永続性を備えた基本的なクラスタセットアップを行います。Akka .NET接続プールのタイムアウトに関する問題
シャーディングが正しく機能するように、公式のドキュメントとPetBridgeブログの記事を使用しました。ただし、シャードがSQL Server接続プールで許可されている最大接続数を超えているという問題が発生しました。 04::そのため、我々は...
2017年4月20日14を次のメッセージを取得している31.433 01:00 [警告]「タイムアウトが期限切れ前に接続を取得する経過 タイムアウト時間。 プールされた接続がすべて使用されており、 の最大プールサイズに達したために発生している可能性があります。
シャードがシャーディングジャーナルを更新しているときに、これが起こっていると思われます。
どのようにシャーディングモジュールがSQL接続を適切に管理しないのですか?ここに設定上の問題はありますか?
この種のエラーが発生した場合に再試行することはできますか?現状のまま、このエラーが発生するたびにメッセージが失われます。
ここでは、関連するHOCON
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
}
}
}
現時点の主な懸念は、私たちが効果的にこれらのメッセージを一度で配信することです。 SQLタイムアウトが発生するたびに、実行されたはずのアクションが失われます。 私たちはAkka.Persistenceを使用することで、少なくとも一度の配信を実現できることを期待していました。これはこれまでのところそうではないようです。タイムアウトが発生したときにアクションが再試行されるように/メッセージが失われないように、これを達成する方法についてアドバイスできますか? – Aaron
[このスニペット](https://gist.github.com/Horusiath/64d829720b66df16bc59dbf106a8008e)は、少なくとも一度の配信ゲートウェイとして機能するプロキシアクタを構築する方法の多かれ少なかれです。しかし、それはあなたの俳優が偶像崇拝の方法で着信メッセージを処理するように制限することを忘れないでください。また、少なくとも一度は配信セマンティクを得たい場合は、キュー(つまりRabbitMQまたはKafka)を通信チェーンの前に置くことをお勧めします。失敗した場合は、処理されていないメッセージのプロセスを再開するだけです。 – Horusiath