java - Akka持久性: Issue starting PersistentActor: java. lang.IllegalArgumentException : Default journal plugin is not configured,参见 'reference.conf'

标签 java akka

我正在尝试在 Akka 中使用 PersistentActor。

我尝试了 Akka 文档中提供的基本示例 https://doc.akka.io/docs/akka/current/persistence.html .

我在 Actor 启动时收到以下错误:

Caused by: java.lang.IllegalArgumentException: Default journal plugin is not configured, see 'reference.conf' at akka.persistence.Persistence$.verifyPluginConfigIsDefined(Persistence.scala:193) at akka.persistence.Persistence.defaultJournalPluginId$lzycompute(Persistence.scala:228) at akka.persistence.Persistence.defaultJournalPluginId(Persistence.scala:226) at akka.persistence.Persistence.journalConfigFor(Persistence.scala:336) at akka.persistence.Eventsourced.$init$(Eventsourced.scala:97) at akka.persistence.AbstractPersistentActor.(PersistentActor.scala:455) at org.spituk.learning.akka.samples.ExamplePersistentActor.(ExamplePersistentActor.java:72)

我尝试过的代码如下:

import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Props;
import akka.persistence.AbstractPersistentActor;
import akka.persistence.SnapshotOffer;

import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;

class Cmd implements Serializable {

    private static final long serialVersionUID = 1L;
    private final String data;

    public Cmd(String data) {
        this.data = data;
    }

    public String getData() {
        return data;
    }
}

class Evt implements Serializable {

    private static final long serialVersionUID = 1L;
    private final String data;

    public Evt(String data) {
        this.data = data;
    }

    public String getData() {
        return data;
    }
}

class ExampleState implements Serializable {

    private static final long serialVersionUID = 1L;
    private final ArrayList<String> events;

    public ExampleState() {
        this(new ArrayList<>());
    }

    public ExampleState(ArrayList<String> events) {
        this.events = events;
    }

    public ExampleState copy() {
        return new ExampleState(new ArrayList<>(events));
    }

    public void update(Evt evt) {
        events.add(evt.getData());
    }

    public int size() {
        return events.size();
    }

    @Override
    public String toString() {
        return events.toString();
    }
}

public class ExamplePersistentActor extends AbstractPersistentActor {

    private int snapShotInterval = 1000;
    private ExampleState state = new ExampleState();

    public static Props props() {
        return Props.create(ExamplePersistentActor.class);
    }

    public int getNumEvents() {
        return state.size();
    }

    @Override
    public String persistenceId() {
        return "sample-id-1";
    }

    @Override
    public Receive createReceiveRecover() {
        return receiveBuilder()
                .match(Evt.class, state::update)
                .match(SnapshotOffer.class, ss -> state = (ExampleState) ss.snapshot())
                .build();
    }

    @Override
    public Receive createReceive() {
        return receiveBuilder()
                .match(
                        Cmd.class,
                        c -> {
                            final String data = c.getData();
                            final Evt evt = new Evt(data + "-" + getNumEvents());
                            System.out.println("Cmd received::" + c);
                            persist(
                                    evt,
                                    (Evt e) -> {
                                        state.update(e);
                                        getContext().getSystem().getEventStream().publish(e);
                                        if (lastSequenceNr() % snapShotInterval == 0 && lastSequenceNr() != 0)
                                            // IMPORTANT: create a copy of snapshot because ExampleState is mutable
                                            saveSnapshot(state.copy());
                                    });
                        })
                .matchEquals("print", s -> System.out.println(state))
                .build();
    }

    public static void main(String[] args) throws IOException {
        ActorSystem persistentSystem = ActorSystem.create("persistent-system");
        ActorRef persistentSystemActor = persistentSystem.actorOf(ExamplePersistentActor.props());
        persistentSystemActor.tell(new Cmd("Hello"), ActorRef.noSender());
        System.in.read();
        persistentSystem.terminate();
    }
}

我没有为持久性定义任何配置,打算使用内置的默认插件。有人可以帮我解决这个问题吗?

最佳答案

我必须将以下内容添加到 application.conf 文件中:

akka.persistence.journal.plugin = "akka.persistence.journal.leveldb"
akka.persistence.snapshot-store.plugin = "akka.persistence.snapshot-store.local"

akka.persistence.journal.leveldb.dir = "target/example/journal"
akka.persistence.snapshot-store.local.dir = "target/example/snapshots"

# DO NOT USE THIS IN PRODUCTION !!!
akka.persistence.journal.leveldb.native = false

关于java - Akka持久性: Issue starting PersistentActor: java. lang.IllegalArgumentException : Default journal plugin is not configured,参见 'reference.conf',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57997249/

相关文章:

java - Android/Java - 覆盖

java - Spring中请求映射没有选择正确的 Controller 方法

java - AlarmManager 在某些设备上不会触发?

scala - Play 2.4 : Schedule a recurring task at app startup with dependency injection

scala - 一次带有文件上传extractRequestContext和案例类的Akka HTTP API服务?

java - 使用 wsimport 解析 Salesforce 合作伙伴 WSDL 时出错

java - AjaxEditableLabel 和 Validator 的行为让我感到困惑

scala - 仅在所有事件持久化后更新 actor 状态

scala - 为什么 Akka Persisence Query Read Journal 无法检索我的事件?

java - Play框架2.7.2迁移,BodyPrasers.parse NoClassDefFoundError