scala - 尝试使持久性参与者需要带有 RequiresMessageQueue 的自定义邮箱时出错
问题描述
我尝试以下方法:
class ClientActor (stockActor: ActorSelection, paymentsActor: ActorSelection) extends PersistentActor
with AtLeastOnceDelivery with akka.actor.ActorLogging with RequiresMessageQueue[akka.custom.CustomMailbox]{
//actor implementation
}
我得到错误:
illegal inheritance;
self-type Shopping.ClientActor does not conform to akka.dispatch.RequiresMessageQueue[akka.custom.CustomMailbox]'s selftype akka.dispatch.RequiresMessageQueue[akka.custom.CustomMailbox]
with AtLeastOnceDelivery with akka.actor.ActorLogging with RequiresMessageQueue[akka.custom.CustomMailbox]{
同样适用于非持久性演员:
class PaymentsActor extends Actor with akka.actor.ActorLogging with RequiresMessageQueue[akka.custom.CustomMailbox] {
// actor implementation
}
解决方案
跟踪相关的源代码,PersistentActor
extendsEventsourced
扩展了PersistenceStash,后者又扩展了trait Stash:
trait Stash extends UnrestrictedStash with RequiresMessageQueue[DequeBasedMessageQueueSemantics]
如源代码中所述:
请注意,该
Stash
特征只能与具有基于双端队列的邮箱的参与者一起使用。默认情况下,基于 Stash 的 Actor 请求基于 Deque 的邮箱,因为 stash trait extendsRequiresMessageQueue[DequeBasedMessageQueueSemantics]
。DequeBasedMessageQueueSemantics
您可以覆盖通过配置请求时提供的默认邮箱 ...
一种方法是配置您的自定义邮箱,类似于源代码备注中的建议:
akka.actor.mailbox.requirements {
"akka.dispatch.BoundedDequeBasedMessageQueueSemantics" = your-custom-mailbox
}
推荐阅读
- express - ES6 Router.use() 需要一个中间件函数但得到一个对象
- mongodb - docker-compose mongodb phoenix,[错误] 连接失败:**(Mongo.Error)tcp 连接:连接被拒绝 - :econnrefused
- python - 在同一个控制台中连续多次执行程序
- reactjs - 导出 react-styleguidist 文档
- dart - 如何使用现有的应用程序密钥库获取签名的 apk?
- java - 设置错误:java.lang.UnsupportedOperationException:此功能在 JAXB RI 2.0 中不可用
- r - DescTools::XLGetRange() 失败并出现 sel$Cells() 错误:尝试应用非函数
- java - 无法使用 selenium 在文本框中插入文本
- hibernate - 休眠后无法关闭或重新启动甚至再次休眠(ubuntu 18.04 LTS)
- php - 如何在 Laravel 5.6 中将第三方 API 数据转换为集合资源?