我有以下设置:
commandGateway.sendAndWait(new C1(restPostBody));将其转发到聚合。到目前为止,我可以看到这样的选择:
queryGateway.subscriptionQuery(...和sqr.updates().blockFirst()来等待由投影仪处理的事件,然后创建响应。另外,我想这应该是同步的,因为如果系统在将事件存储到DB和将投影存储到DB之间失败,那么投影可能会失去同步吗?是否有任何与此有关的最佳做法?
更新
我现在拥有的是:
@Autowired
public void configure(EventProcessingConfigurer configurer){
configurer.usingSubscribingEventProcessors();
}用于聚合和视图模型中的同步事件处理。然后我可以使用(看起来有点难看)来查询视图模型--有更好的方法吗?
try {
sc = queryGateway.query(new MyQuery("123", "123),
ResponseTypes.instanceOf(SomeView.class)).get();
}
catch (InterruptedException e) {
e.printStackTrace();
}
catch (ExecutionException e) {
e.printStackTrace();
}我可以将这个SomeView作为REST上的响应返回。
发布于 2019-03-05 13:52:49
因此,@bojanv55 55,您试图欺骗您的应用程序成为一个同步设置,而使用Axon框架的命令-事件查询方法则迫使您采取相反的方式。
理想情况下,您的前端应该符合这种情况.因此,如果您到达一个发布命令的端点,那么您就会触发并忘记。更新查询模型的事件将以更新的形式推送到前端。因此,很快地,接受它是异步的这一事实,最终会使一切感觉更加无缝。
然而,说起来容易做起来容易,你问这个问题当然是有原因的。我个人喜欢使用订阅查询(您也指向它)来欺骗操作,使其成为同步操作。
Frans的这存储库展示了如何使用Axon很好地完成这个任务,我认为。
他所做的就是处理REST操作,并首先为您所知道的将很快更新的内容发送一个订阅查询。其次,命令被分派到聚合,聚合做出发布事件的决定,事件更新查询模型。然后,在向订阅查询发出的更新中包含查询模型更新,允许您只在查询模型实际调整后才返回结果。
最后,我总是推荐我的第一个建议来接受您所处的异步环境。其次,我认为我刚才分享的订阅查询解决方案也可以解决问题。
希望这能帮到你!
https://stackoverflow.com/questions/54943123
复制相似问题