首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >轴突投射还是事件丰富了她?

轴突投射还是事件丰富了她?
EN

Stack Overflow用户
提问于 2019-03-01 10:52:29
回答 1查看 912关注 0票数 2

我有以下设置:

  1. HTTP请求到达REST端点,我在应用程序服务中接收它。
  2. 应用程序服务映射命令C1的请求,并使用commandGateway.sendAndWait(new C1(restPostBody));将其转发到聚合。
  3. 从repo加载聚合,应用新命令并生成新事件--保存为存储。
  4. 此时,我需要丰富此事件,并将其用作REST调用的响应。

到目前为止,我可以看到这样的选择:

  1. 使用视图投影仪和项目新事件创建视图模型,该模型可以在REST调用中作为响应转发。在这里,我需要使用queryGateway.subscriptionQuery(...sqr.updates().blockFirst()来等待由投影仪处理的事件,然后创建响应。另外,我想这应该是同步的,因为如果系统在将事件存储到DB和将投影存储到DB之间失败,那么投影可能会失去同步吗?
  2. 在从聚合中发布事件并向其添加所需的属性并将响应添加到REST调用之后,使用某些事件丰富器。这类似于投影,但在这种情况下,我不会将其保存到DB,因为我只需要在发出命令时作为REST端点的响应。这应该是绝对同步的,因为如果有什么失败,我会失去响应。在出现异步的情况下,我需要有聚合句柄重复的事件,并且仍然将事件发送给事件丰富者,但不需要存储到db。这似乎使事情变得复杂多了。

是否有任何与此有关的最佳做法?

更新

我现在拥有的是:

代码语言:javascript
复制
@Autowired
    public void configure(EventProcessingConfigurer configurer){
        configurer.usingSubscribingEventProcessors();
    }

用于聚合和视图模型中的同步事件处理。然后我可以使用(看起来有点难看)来查询视图模型--有更好的方法吗?

代码语言:javascript
复制
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上的响应返回。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-05 13:52:49

因此,@bojanv55 55,您试图欺骗您的应用程序成为一个同步设置,而使用Axon框架的命令-事件查询方法则迫使您采取相反的方式。

理想情况下,您的前端应该符合这种情况.因此,如果您到达一个发布命令的端点,那么您就会触发并忘记。更新查询模型的事件将以更新的形式推送到前端。因此,很快地,接受它是异步的这一事实,最终会使一切感觉更加无缝。

然而,说起来容易做起来容易,你问这个问题当然是有原因的。我个人喜欢使用订阅查询(您也指向它)来欺骗操作,使其成为同步操作。

Frans的存储库展示了如何使用Axon很好地完成这个任务,我认为。

他所做的就是处理REST操作,并首先为您所知道的将很快更新的内容发送一个订阅查询。其次,命令被分派到聚合,聚合做出发布事件的决定,事件更新查询模型。然后,在向订阅查询发出的更新中包含查询模型更新,允许您只在查询模型实际调整后才返回结果。

最后,我总是推荐我的第一个建议来接受您所处的异步环境。其次,我认为我刚才分享的订阅查询解决方案也可以解决问题。

希望这能帮到你!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54943123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档