Akka-如何配置以确保消息到达另一个参与者?

Akka-如何配置以确保消息到达另一个参与者?,akka,Akka,Akka参与者基于火与忘的机制来交换消息,我如何配置Akka以保证消息传递给另一个参与者?普通Akka参与者根据其设计原则不保证。但是,如果您使用Akka,Akka会提供至少一次交付选项 至少一次传递基本上确保持久发送方参与者将以可配置的频率向接收方发送消息,直到它从接收方(或从用于取消正在进行的传递尝试的某个终止例程)收到确认为止 对于至少一次传递,将重新发送保留的邮件,直到收到确认。Akka提供了方法deliver来发送带有连续单调递增的deliveryId标记的每条消息,并且在从接收方收到

Akka参与者基于火与忘的机制来交换消息,我如何配置Akka以保证消息传递给另一个参与者?

普通Akka参与者根据其设计原则不保证。但是,如果您使用Akka,Akka会提供至少一次交付选项

至少一次传递基本上确保持久发送方参与者将以可配置的频率向接收方发送消息,直到它从接收方(或从用于取消正在进行的传递尝试的某个终止例程)收到确认为止

对于至少一次传递,将重新发送保留的邮件,直到收到确认。Akka提供了方法
deliver
来发送带有连续单调递增的
deliveryId
标记的每条消息,并且在从接收方收到带有相应
deliveryId
的确认后,使用方法
confirmDelivery
来表示消息成功交付

下面的Scala代码段是的示例代码的一部分,它至少突出显示了sender actor类中的键传递逻辑一次(该类
扩展了PersistentActor,至少提供了OnceDelivery
):

override def receiveCommand:Receive={
案例s:String=>
persist(MsgSent(s))(updateState)
案例确认(deliveryId)=>
持久化(MsgConfirmed(deliveryId))(updateState)
}
覆盖def receiveRecover:Receive={
案例evt:evt=>UpdateEstate(evt)
}
def updateState(evt:evt):单位=evt匹配{
案例MsgSent=>
交货(目的地)(交货ID=>Msg(交货ID,s))
案例MsgConfirmed(deliveryId)=>
确认交付(交付ID)
}
请注意,相同的持久化处理程序
updateState
用于持久化与
deliver
confirmDelivery
相对应的事件,以实现一致的状态恢复