rabbitmq - 在 Axon 中按顺序处理两个事件
问题描述
我可以在轴突中顺序处理的两个事件之间(或以一定的时间间隔执行)放置一个序列吗?这两个事件是同时创建的。以下是示例事件。
因为我的第二个事件取决于第一个事件的执行结果。我正在使用 RabbitMq 发布消息。
@EventHandler
public void handleEvent1(Event1 event) {
LOG.debug("An event of type {}, occured.", event.getClass().getName());
}
@EventHandler
public void handleEvent2(Event2 event) {
LOG.debug("An event of type {}, occured.", event.getClass().getName());
}
解决方案
您介意详细说明您需要它的用例吗?我已经为您的问题准备好了答案,但也许我可以根据您需要的情况提出不同的行动方案。
事件将按照它们被提供给您使用的消息源的顺序进行处理。
从EventStore
,这意味着您将按照每个事件的全局索引顺序接收事件。globalIndex
是每个字段上的一个字段,用于EventMessage
表示它在整个事件存储中的顺序。
当使用 AMQP/RabbitMQ 作为消息源时,类似的排序成立。队列中较早的事件将首先在消费端处理。
如果您因此希望Event1
在 之前被处理Event2
,那么它需要在另一个之前发布。因此,如果您需要有保证的顺序,那么控制发布顺序是关键。Axon 不提供句柄来调整事件的处理顺序,因为如果您的系统不直接依赖事件顺序,它会更加理想。处理组件应该独立存在,而不是对此事做出假设。
希望这可以帮助您解决阿米特!
推荐阅读
- mysql - 尝试创建检查数据的函数时出现 MySQL 错误代码?
- reactjs - React webpack 生产构建失败
- swift - TableView 行不会将数据携带到新部分
- sql - 模式中的天数
- ruby-on-rails-5 - Rails 5 I18n default_locale 和后备语言环境
- angular - Angular 6 的自定义排序管道
- c# - 如何使用 SqlCommand 在查询中获得一些结果
- grails - 将文件的内容显示到 grails 页面?
- javascript - CSS - 如果元素用于事件功能,则无法在 CSS 中调用元素
- eclipse - 防止 Eclipse 自动完成在导入末尾添加星号、星号、通配符