Akka Slick和ThreadLocal

dir*_*ini 3 scala thread-local akka

我使用slick将数据存储在数据库中,然后我使用threadLocalSession来存储会话.

存储库用于执行crud,我有一个访问光滑存储库的Akka服务层.

我找到了这个链接,Adam Gent在这里询问了我在这里要求的东西:使用ThreadLocals的Akka和Java库

我关心的是akka如何处理消息,因为我将数据库会话存储在threadLocal中,我可以在同一个线程中同时处理两条消息吗?

假设:两个添加发送给用户服务的用户消息(A和B),并且消息A被部分处理,并且停止,线程B开始在线程A已经开始处理的同一线程中处理,这将存储会话在它的localSession?

End*_*rga 6

每个参与者按照收到它们的顺序一次处理一个消息*.因此,如果您将消息A,B发送给同一个actor,那么它们永远不会同时处理(当然,如果您将每个消息发送给不同的actor,情况就不同了).

使用ThreadLocals的问题在于,通常不能保证actor在同一线程上处理它的每个消息.

因此,如果您向演员A发送消息M1然后发送消息M2,则保证在M2之前处理M1.什么不能保证M2在与M1相同的线程上处理.

通常,您应该避免使用ThreadLocals,因为actor的重点在于它们是一致性单元,并且您可以通过消息传递修改其内部状态.如果您确实需要对执行消息处理的线程进行更多控制,请查看调度程序的文档:http://doc.akka.io/docs/akka/2.1.0/java/dispatchers.html


*除非您更改其邮箱实现,但这是非默认行为.