sql-server - Akka.NET 与 SQL Server 的持久性不起作用

标签 sql-server akka.net

我一直在尝试实现简单的示例 here .

我已按照 GitHub 存储库和 HOCON 配置中的说明在 SQL Server 中创建了所需的表。应用程序运行时没有错误,但没有任何内容被保留。我确实看到了早期的讨论,其中其他人也遇到了同样的问题,解决方案据说是调用 SqlServerPersistence.Init() 函数,并指出很快将不再需要此函数。事实上这个方法已经不存在了。

class Program
{
    private static void Main(string[] args)
    {
        try
        {
            using (var actorSystem = ActorSystem.Create("PersistenceActorSystem"))
            {
                SqlServerPersistence persistence = SqlServerPersistence.Get(actorSystem);

                var actor = actorSystem.ActorOf(Props.Create<ParentActor>(), "ParentActor");

                actorSystem.WhenTerminated.Wait();
                Console.WriteLine("Actor system shutdown...");
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex);
        }
    }
}


public class ParentActor : ReceiveActor
{
    public ParentActor()
    {
        var actor = Context.ActorOf(Props.Create<PersistentChildActor>(), "PersistentChildActor");

        actor.Tell("Message 1");
        actor.Tell("Message 2");
        actor.Tell(new PersistentChildActor.GetMessages());

        Receive<IReadOnlyList<string>>(messages =>
        {
            Console.WriteLine("Received messages...");

            foreach (var message in messages)
            {
                Console.WriteLine(message);
            }

            Context.System.Terminate();
        });
    }
}


public class PersistentChildActor : ReceivePersistentActor
{
    public class GetMessages {}

    private List<string> _messages = new List<string>(); 

    public override string PersistenceId
    {
        get
        {
            return "HardCoded";
        }
    }

    public PersistentChildActor()
    {
        // recover
        Recover<string>(message => _messages.Add(message));

        // commands
        Command<string>(message => Persist(message, s =>
        {
            _messages.Add(message); //add msg to in-memory event store after persisting
        }));
        Command<GetMessages>(get =>
        {
            IReadOnlyList<string> messages = new List<string>(_messages);
            Sender.Tell(messages);
        });
    }
}

我使用的是 Akka 1.0.8、Persistence 1.0.8.25 和 Persistence.SqlServer 1.0.6.3。

霍康配置

    akka {
      akka.persistence{

          journal {
              plugin = "akka.persistence.journal.sql-server"
              sql-server {

                  class = "Akka.Persistence.SqlServer.Journal.SqlServerJournal, Akka.Persistence.SqlServer"

                  connection-string = "Data Source=USER-PC\\SQLEXPRESS;Initial Catalog=AkkaPersistenceDemo;Integrated Security=True;"

                  schema-name = dbo

                  auto-initialize = on
              }
          }

          snapshot-store {
              plugin = "akka.persistence.snapshot-store.sql-server"
              sql-server {

                  class = "Akka.Persistence.SqlServer.Snapshot.SqlServerSnapshotStore, Akka.Persistence.SqlServer"

                  connection-string = "Data Source=USER-PC\\SQLEXPRESS;Initial Catalog=AkkaPersistenceDemo;Integrated Security=True;"

                  schema-name = dbo

                  auto-initialize = on
              }
          }
      }          
    }

最佳答案

尝试改变

akka {
    akka.persistence{

akka {
    persistence{

看来您的持久性设置未应用,日志默认为 inmem

关于sql-server - Akka.NET 与 SQL Server 的持久性不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37033783/

相关文章:

ssl - Akka.NET TLS 实现

Akka.net 持久化为文本

SQL Server 2000 : how do I return only the number from a phone number column

sql - 如何根据前两列的值计算第三列?

基于 SELECT 的 SQL 条件 UPDATE

sql-server - 存储过程中的 SQL 默认架构解析

f# - 如何使用 Akka.FSharp API 在 Akka.NET 集群中实现故障转移?

c# - 从 Actor 到 Actor 发送流(例如文件)

SQL Server : How to get current date time in YYYYMMDDHHMISSMSS

asp.net - 在 Akka.NET 中同步访问 ActorSystem 外部对象的最佳方法是什么?