我发送命令并期望通过 CommandGateway.sendAndWait(对象命令,长超时,TimeUnit单位)方法获得结果:
Greeting greeting = commandGateway.sendAndWait(new GenericCommandMessage<GetGreetingCommand>(cmd), 1000, TimeUnit.MILLISECONDS);
上述调用有3种可能的结果:
1)返回非空对象。
2)返回一个空对象(通过查询数据库的 @CommandHandler 的业务逻辑,但找不到我想要的内容)
3)返回一个空对象(如果达到超时,则由Axon框架返回)
我需要实现一种区分点2)和3)的方法,以便我可以相应地返回NOT_FOUND或REQUEST_TIMEOUT状态。您对如何建模有任何建议吗?
我的一种方法是在Greeting(我的模型对象)中添加一个状态字段,如果 @CommandHandler 从DB中没有收到任何内容,我将返回一个状态为=的虚拟Greeting对象1(意思是NOT_FOUND),但是这个解决方案意味着只为模型对象添加标志,以区分框架流,我不认为这是推荐的。
答案 0 :(得分:0)
默认的CommandGateway不允许这种区别。但是,可以通过提供GatewayProxyFactory.createGateway()
方法的接口来定义自己的网关。通过传递网关应在构造函数中发送消息的CommandBus
来创建实例。
此机制允许您为每个方法定义所需的行为。如果声明TimeoutException
,则抛出该异常而不是返回null返回值。如果每次调用的超时都相同,则可以使用注释替换超时值参数(int / long和timeunit)。
查看GatewayProxyFactory上的javadoc了解更多详情。