对于精细的API命令处理,我有一个很好的主意。
我们的Web API应该提供一个简单的update
端点,但是您可以为其提供多个命令。像这样:
POST /myAggregate/12345/update
[
{ command1Name: "command1Data" },
{ command2Name: "command2Data" },
{ command3Name: "command3Data" }
]
在Axon内部,这似乎很难处理。特别是与@AggregateVersion
。
我的第一个想法是要有一个新的UpdateWrapperCommand
。内部有一个List commands
。然后在Aggregate中,使用反射调用正确的@CommandHandler
方法:
class UpdateWrapperCommand {
List commands;
}
@Aggregate
class MyAggregate {
// id, version, constructor, etc. pp.
@CommandHandler
public void handle(SomeCommand cmd) { ... }
@CommandHandler
public void handle(UpdateWrapperCommand cmd) {
// iterate over cmd.commands
// iterate over this.getClass().getMethods()
// find correct method(s), and invoke it
}
}
但是,当@CommandHandler
s也使用@MetaData
和/或使用Spring Bean注入时,就会变得非常困难。
我的第二个想法是简单地commandGateway.send
循环调用。但这很麻烦,因为@TargetAggragateVersion
必须为每个命令设置,并且您必须等待每个命令完成,然后再发送下一个命令。不好
您对此有什么想法吗?
它应该加载一次聚合,然后运行所有命令。
甚至可能有一些类似于事务的行为:应用所有结果事件,或者不应用任何事件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句