scala – 在actor系统中隐式传递请求上下文
发布时间:2020-12-16 18:37:13 所属栏目:安全 来源:网络整理
导读:我想在协作actor的系统中隐式地传播请求上下文. 为了简化和呈现这种情况,我的系统有多个actor,传递给这些actor的消息需要包含这个RequestContext对象. ActorA接收MessageA类型的消息 ActorB接收MessageB类型的消息 当ActorA需要向ActorB发送消息时,作为Messa
我想在协作actor的系统中隐式地传播请求上下文.
为了简化和呈现这种情况,我的系统有多个actor,传递给这些actor的消息需要包含这个RequestContext对象. ActorA接收MessageA类型的消息 当ActorA需要向ActorB发送消息时,作为MessageA处理的一部分,它执行业务逻辑,然后根据逻辑结果以及MessageA中可用的RequestContext构造MessageB,然后将其发送给ActorB def handle(ma:MessageA) { val intermediateResult = businessLogic(ma) actorB ! MessageB(intermediateResult,ma.requestContext) } 我们有一大堆要处理的消息,并且明确地传递requestContext是很麻烦的. 我正在尝试使用Scala的implicits功能创建方法,以避免将传入消息中嵌入的RequestContext显式注入传出消息. 消息是案例类(它们需要).我已经阅读了有关implicits规则的内容,但是将对象的属性带入当前的隐式范围似乎很牵强. 我相信这应该是一个共同的要求. 谢谢. 解决方法
在我看来,最简单的方法是使你的val隐含在case类中.
case class MessageA(req: RequestA)(implicit val ctx: RequestContext) case class MessageB(req: RequestB)(implicit val ctx: RequestContext) def businessLogic(req:RequestA):RequestB def handle(ma: MessageA): Unit = { // import all the members of ma so that there is a legal implicit RequestContext in scope import ma._ val intermediateResult = businessLogic(req) actorB ! MessageB(intermediateResult) } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |