标签: akka.net-persistence

Akka .NET连接池超时问题

我们正在使用Akka.NET创建一个新系统,并具有基于分片和持久性的基本集群设置.

我们使用官方文档以及一些Petabridge博客文章来使分片正常工作.但是,我们遇到了一个问题,即分片超过了SQL 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 = …
Run Code Online (Sandbox Code Playgroud)

sql-server akka.net akka.net-cluster akka.net-persistence

7
推荐指数
1
解决办法
245
查看次数

当 CPU 处于高压状态时,Akka.NET 具有持久性丢弃消息?

我对我的 PoC 进行了一些性能测试。我看到的是我的演员没有收到发送给他的所有消息,而且表现非常低。我向我的应用程序发送了大约 150k 条消息,这导致我的处理器达到 100% 利用率的峰值。但是当我停止发送请求时,2/3 的消息没有传递给参与者。以下是来自应用洞察的简单指标:

发送的请求数

收到的消息数

为了证明我在 mongo 中持久化的事件数量与我的演员收到的消息数量几乎相同。

蒙戈

其次,处理消息的性能非常令人失望。我每秒收到大约 300 条消息。 每秒消息

我知道默认情况下 Akka.NET 消息传递最多一次,但我没有收到任何错误消息说消息已被丢弃。

这是代码:集群分片注册:

 services.AddSingleton<ValueCoordinatorProvider>(provider =>
 {
   var shardRegion = ClusterSharding.Get(_actorSystem).Start(
                    typeName: "values-actor",
                    entityProps: _actorSystem.DI().Props<ValueActor>(),
                    settings: ClusterShardingSettings.Create(_actorSystem),
                    messageExtractor: new ValueShardMsgRouter());
                   return () => shardRegion;
 });
Run Code Online (Sandbox Code Playgroud)

控制器:

    [ApiController]
    [Route("api/[controller]")]
    public class ValueController : ControllerBase
    {
        private readonly IActorRef _valueCoordinator;

        public ValueController(ValueCoordinatorProvider valueCoordinatorProvider)
        {
            _valueCoordinator = valuenCoordinatorProvider();
        }

        [HttpPost]
        public Task<IActionResult> PostAsync(Message message)
        {
            _valueCoordinator.Tell(message);
            return Task.FromResult((IActionResult)Ok());
        }
    }
Run Code Online (Sandbox Code Playgroud)

演员:

    public class ValueActor : ReceivePersistentActor
    {
        public override …
Run Code Online (Sandbox Code Playgroud)

akka.net akka.net-cluster akka.net-persistence

4
推荐指数
1
解决办法
443
查看次数