英文:
Akka two receiveBuilder in same class
问题
在处理遗留代码时,位于扩展到BaseActor的类内部,有两个处理消息的入口点,如下所示:
private Receive active = receiveBuilder().matchAny((message) -> {
if(message instanceof String){
// 一些代码
} else if(...) {
// 一些代码
} else {
// 一些代码
}
});
以及这个接收器:
@Override
public Receive createReceive() {
return receiveBuilder().matchAny((message) -> {
if(message instanceof String){
// 一些代码
} else if(...) {
// 一些代码
} else {
// 一些代码
}
});
}
我知道有类型化和非类型化的Actor,但在进入active
和createReceive
时感到困惑;在本地测试时总是进入createReceive
,在服务器上进入active
。如果只声明了createReceive
而没有active
,则使用createReceive
。
在这里有什么逻辑,或者我在哪里可以找到相关文档。我已经查阅了doc.akka.io
,但仍不太清楚。
英文:
Working with legacy code, inside class which is extended to BaseActor, there two entry points for process messages like that:
private Receive active = receiveBuilder().matchAny((message) -> {
if(message instanceof String){
some code
} else if(...) {
//some code} else {
//some code}
}
and this receiver:
@Override
public Receive createReceive() {
return receiveBuilder().matchAny((message) -> {
if(message instanceof String){
some code
} else if(...) {
//some code} else {
//some code}
}
}
i know that there are typed and untyped actors, but its confusing when enters into active and when into createReceive;
When testing locally always enters into createReceive, on server it enters into active.
if there is only createReceive declared and not active it uses createReceive.
what logic works here, or where i can find docs for it. checked doc.akka.io but still not clear
答案1
得分: 1
Receive本身不执行任何操作:它只是围绕类模式匹配的Java粘合剂。您可以从createReceive()方法(演员初始模式匹配消息循环)中返回Receive,或者在getContext.become()调用中返回,这将使用新的消息循环替换当前活动的模式匹配消息循环。
上述内容在https://doc.akka.io/docs/akka/current/actors.html中有描述。
英文:
Receive by itself doesn't do anything : Its just Java glue around class pattern matching. You either return Receive from the createReceive() method (the actors initial pattern matching message loop), or in a getContext.become() call, which then replaces the current active pattern matching message loop with a new one.
The above is described https://doc.akka.io/docs/akka/current/actors.html
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论