Rabbitmq CQR、EventStore和事件源:SaveEvents中的并发异常是否使用RPC?

Rabbitmq CQR、EventStore和事件源:SaveEvents中的并发异常是否使用RPC?,rabbitmq,rpc,cqrs,event-sourcing,Rabbitmq,Rpc,Cqrs,Event Sourcing,我正在实现一个事件存储。我已经定义了一个SaveEventsConsumer,用于处理事件存储中的事件存储。如果我理解正确,CQRS命令应该没有响应。但是,将事件保存到事件存储时可能会出现并发问题。我用兔子。例如,是否应该通知客户机以便它可以通知用户?应该如何实施?使用RPC和错误格式 我的第一个方法是: 客户端使用类似RPC的样式。SaveEventsConsumer通知客户端(成功或失败)。如果发生故障(例如并发),则将异常返回给客户端 此解决方案是否与CQRS模式一致?这是一个好方法吗?还

我正在实现一个事件存储。我已经定义了一个SaveEventsConsumer,用于处理事件存储中的事件存储。如果我理解正确,CQRS命令应该没有响应。但是,将事件保存到事件存储时可能会出现并发问题。我用兔子。例如,是否应该通知客户机以便它可以通知用户?应该如何实施?使用RPC和错误格式

我的第一个方法是:

客户端使用类似RPC的样式。SaveEventsConsumer通知客户端(成功或失败)。如果发生故障(例如并发),则将异常返回给客户端

此解决方案是否与CQRS模式一致?这是一个好方法吗?还有别的办法吗?有什么改进吗?我是否应该使用任何AMQP头或属性来指示错误(模仿HTTP错误代码)


例如,在集群中:


同一应用程序的两个实例修改同一聚合。这些输入应该协调(在事件存储外部),或者是必须检测和通知响应的事件存储

虽然确实没有从命令返回值,但仍然可能发生异常。并发异常就是一个例子。这意味着异常是作为命令处理的一部分抛出的。仔细想想,这是有道理的。您永远不希望发布尚未提交到事件存储的事件。因此,并发冲突检查需要作为整个命令过程的一部分进行


我有一个职位可能会有所帮助。您可以找到它。

您希望出现什么并发问题?来自不同用户的命令试图取消相同的顺序-在这种情况下,抛出并发错误没有意义,因为最终结果是相同的。例如,同一应用程序的两个实例修改相同的聚合。这些入口应协调(在事件存储外部)或者是必须检测并通知响应的事件存储?也许这会有所帮助,并且基于此Greg的事件存储如果给出了错误的版本,则会给出错误的版本异常,但就个人而言,我仍然认为您应该了解哪些命令被拒绝-例如,应该允许重命名项命令成功无论版本如何,ie都要修复一个打字错误谢谢。要将异常返回到客户端,rabbitmq中应该使用什么?RPC?