我一直在尝试实现简单的示例 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/