加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Akka的事件总线是否保证消息顺序?

发布时间:2020-12-15 00:52:51 所属栏目:Java 来源:网络整理
导读:我想保留事件进入公交车的顺序. 例如,如果event1然后event2输入到总线,那么订阅的actor将按顺序获取它们. 问题是,如果这种顺序是保证的,那么无论是在集群节点还是在单节点actor系统上. 解决方法 如果您在actor系统(system.eventStream)上使用事件流,并且如果
我想保留事件进入公交车的顺序.
例如,如果event1然后event2输入到总线,那么订阅的actor将按顺序获取它们.

问题是,如果这种顺序是保证的,那么无论是在集群节点还是在单节点actor系统上.

解决方法

如果您在actor系统(system.eventStream)上使用事件流,并且如果您可以保证单个线程正在发布,那么是,将保留该顺序.事件总线的子通道分类风格(与system.eventStream绑定的类型)非常简单.有一个基本类类型的Map到订阅者的列表.发布事件时,它会从Map(如果有)获取匹配的订户列表,然后将消息发送给每个订阅者.因此,如果只有一个线程正在调用publish,那么它需要完成发布event1(从而将其传递给所有订阅者的邮箱),然后再转到event2. Actors按照收到邮件的顺序处理邮箱(除非您使用自定义的PriorityMailbox impl),所以先进先出.

当然,如果你有多个线程,我不能保证这个顺序处理,因为thread1可能首先启动发布,但是线程2可能首先完成它,导致你不按顺序考虑.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读