我们正在使用Akka.NET创建一个新的系统,并且有一个基本的集群设置,包括切分和持久化。
我们已经使用了正式的文档和一些Petabridge文章来使切分工作正常。但是,我们遇到了一个问题,即碎片超出了Server连接池允许的最大连接数。因此,我们得到了以下信息..。
2017-04-20 14:04: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
}
}
}发布于 2017-04-21 07:46:25
这可能是一个迹象,表明SQL日志被大量传入的事件淹没,从而触发连接超时,而事件正在等待池中的下一个连接被释放。
从您的配置中,我怀疑,如果您已经开始持久化一个事件并创建高比率的碎片/实体,那么这种情况可能会发生。在不久的将来,现有的SQL日志将获得显著的速度提升(请参阅分批期刊)。希望这能帮助解决你的问题。
https://stackoverflow.com/questions/43521235
复制相似问题