Axon框架-从非聚合(eventGateway)发起saga



我对轴突很陌生。我有以下查询。我正在运行2个微服务,即使用Cassandra作为事件存储和Kafka的支付和订单。从付款微观服务。我正在从eventGateway调度一个事件

@Component
@ProcessingGroup("OrderProcessor")
public class OrderEventHandler {
@Inject
private EventGateway eventGateway;
public void createOrder() {
OrderCreatedEvent orderCreatedEvent = new OrderCreatedEvent("orderId",
100,
"CREATED");
eventGateway.publish(orderCreatedEvent);
}

另外,我已经配置了sagaStore和存储库组件SagaViewRepository

@Repository
public interface SagaViewRepository extends CassandraRepository<SagaView, String> {
}

SagaStore

public CassandraSagaStore sagaStoreStore() {
return  CassandraSagaStore(...);
}

如何在Order微服务中存在的SagaEvent Listener中侦听上述事件(OrderCreatedEvent)。下面是

的实现
@Saga(sagaStore = "sagaStoreStore")
public class OrderManagementSaga {
@Inject
private transient CommandGateway commandGateway;
@StartSaga
@SagaEventHandler(associationProperty = "orderId")
public void handle(OrderCreatedEvent orderCreatedEvent){
//Saga invoked;
}

任何提示都是非常感激的谢谢你。

在几乎任何项目中,我都不会立即选择微服务路线。如果你走那条路,这意味着你被困在基础设施工作中,比如如何将消息从一个服务发送到另一个服务,而不是提供业务功能。

这并不意味着我不会在你的应用程序中使用消息传递。命令、事件和查询的用法允许您将消息总线的距离更改为任意长度。

无论如何,这与其说是对你问题的回答,不如说是一种建议。老实说,我不确定你在找什么。你已经说过你正在使用Cassandra(顺便说一下,Axon不支持)和Kafka。这使得Kafka成为你在服务之间发布事件的方式,对吗?例如,这就是Axon提供Kafka扩展的目的。

请注意,采用这种方式将要求您为命令、事件和查询调度以及事件存储定义不同的基础设施。此外,正如已经简短指出的那样,Axon并不认为Cassandra是一个最佳的事件存储。如果你想知道为什么我建议你看一下这个演示。

而不是去"隔离的基础设施定制"我建议您尝试一下Axon Server。它是分发命令、事件和查询的一站式服务,也是一个完全优化的事件存储。有一件事是肯定的,您不需要真正考虑如何将事件从Payment服务分派到Order服务。只要您的Axon应用程序连接到Axon服务器(这也是一件轻而易举的事情),它就会这样做。如果你想了解更多关于Axon服务器的信息,Axon的参考指南有一个专门的部分,你可以在这里阅读。

如果你觉得Kafka是最好的选择,当然也可以。这意味着你或你的团队要做更多的工作。所以你必须考虑到这些工时。关于如何设置Axon的Kafka扩展用于事件分发的更多信息,您可以查看参考指南页面。注意,Kafka只会给你带来事件分发。因此,您仍然需要解决命令分发、查询分发和事件存储的问题。

最新更新