Java 当我发送POST请求时,AXON SAGA实现中出现404错误。原因可能是什么?
我使用Axon和Spring Boot实现了SAGA。这是简单的订单和客户服务。一切看起来都很好,但是当我通过邮递员发送post请求时,我发现404未找到。我猜问题与OrderManagementSaga.java有关。请帮助我 OrderManagementSaga.javaJava 当我发送POST请求时,AXON SAGA实现中出现404错误。原因可能是什么?,java,spring-boot,event-handling,axon,saga,Java,Spring Boot,Event Handling,Axon,Saga,我使用Axon和Spring Boot实现了SAGA。这是简单的订单和客户服务。一切看起来都很好,但是当我通过邮递员发送post请求时,我发现404未找到。我猜问题与OrderManagementSaga.java有关。请帮助我 OrderManagementSaga.java @Saga public class OrderManagementSaga { @Inject private transient CommandGateway commandGateway;
@Saga
public class OrderManagementSaga {
@Inject
private transient CommandGateway commandGateway;
@StartSaga
@SagaEventHandler(associationProperty = "orderId")
public void handle(OrderCreatedEvent orderCreatedEvent){
SagaLifecycle.associateWith("customerId", orderCreatedEvent.customerId);
commandGateway.send(new CreateInvoiceCommand(orderCreatedEvent.customerId,orderCreatedEvent.price,orderCreatedEvent.orderId));
}
@SagaEventHandler(associationProperty = "customerId")
public void handle(InvoiceCreatedEvent invoiceCreatedEvent){
SagaLifecycle.associateWith("orderId",invoiceCreatedEvent.orderId);
commandGateway.send(new UpdateOrderStatusCommand(invoiceCreatedEvent.orderId, invoiceCreatedEvent.price, invoiceCreatedEvent.customerId));
}
@SagaEventHandler(associationProperty = "orderId")
public void handle(OrderUpdatedEvent orderUpdatedEvent){
SagaLifecycle.end();
}
}
OrderCommandController.java
@RestController
public class OrderCommandController {
private OrderCommandService orderCommandService;
public OrderCommandController(OrderCommandService orderCommandService) {
this.orderCommandService = orderCommandService;
}
@PostMapping("/orders")
public CompletableFuture<String> createOrder(@RequestBody OrderCreateDTO orderCreateDTO){
return orderCommandService.createOrder(orderCreateDTO);
}
}
CustomerAggregate.java
@Aggregate
public class OrderAggregate {
@AggregateIdentifier
private String orderId;
private BigDecimal price;
private OrderStatus orderStatus;
private String customerId;
public OrderAggregate() {
}
@CommandHandler
public OrderAggregate(CreateOrderCommand createOrderCommand) {
AggregateLifecycle.apply(new OrderCreatedEvent(createOrderCommand.orderId,createOrderCommand.price, createOrderCommand.customerId));
}
@EventSourcingHandler
protected void on(OrderCreatedEvent orderCreatedEvent) {
this.orderId = orderCreatedEvent.orderId;
this.customerId = orderCreatedEvent.customerId;
this.orderStatus = OrderStatus.CREATED;
}
@CommandHandler
protected void on(UpdateOrderStatusCommand updateOrderStatusCommand) {
AggregateLifecycle
.apply(new OrderUpdatedEvent(updateOrderStatusCommand.orderId,updateOrderStatusCommand.customerıd,updateOrderStatusCommand.price,OrderStatus.CREATED));
}
@EventSourcingHandler
protected void on(OrderUpdatedEvent orderUpdatedEvent) {
this.customerId = orderUpdatedEvent.customerId;
this.orderId = orderUpdatedEvent.orderId;
this.orderStatus = OrderStatus.APPROVED;
this.price = orderUpdatedEvent.price;
}
@Aggregate
public class CustomerAggregate {
@AggregateIdentifier
private String customerId;
private BigDecimal budget;
private String orderId;
public CustomerAggregate(String customerId, BigDecimal budget, String orderId) {
super();
this.customerId = customerId;
this.budget = budget;
this.orderId = orderId;
}
@CommandHandler
public CustomerAggregate(CreateInvoiceCommand createInvoiceCommand){
AggregateLifecycle.apply(new InvoiceCreatedEvent(createInvoiceCommand.price, createInvoiceCommand.customerId, createInvoiceCommand.orderId));
}
@EventSourcingHandler
protected void on(InvoiceCreatedEvent invoiceCreatedEvent){
this.customerId = invoiceCreatedEvent.customerId;
this.budget = this.budget.subtract(invoiceCreatedEvent.price);
this.orderId = invoiceCreatedEvent.orderId;
}
public String getCustomerId() {
return customerId;
}
public void setCustomerId(String customerId) {
this.customerId = customerId;
}
public BigDecimal getBudget() {
return budget;
}
public void setBudget(BigDecimal budget) {
this.budget = budget;
}
}
我不认为这个问题与命令和事件类有关,所以我只分享其中一个作为示例;
CreateOrderCommand.java
public class CreateOrderCommand {
@TargetAggregateIdentifier
public final String orderId;
public final String customerId;
public final BigDecimal price;
public CreateOrderCommand(String orderId, String customerId, BigDecimal price) {
super();
this.orderId = orderId;
this.customerId = customerId;
this.price = price;
}
}
404表示您首先无法到达REST控制器。这可以调试和检查吗?如果这是按预期工作的,那么可以更详细地检查此控制器的实现:REST控制器中注入的是什么
orderCommandService
。希望它使用Axon命令网关将命令发送到OrderAggregate
。OrderAggregate
将发布一个类型为OrderCreatedEvent
的事件,该事件将启动整个事件。请注意,orderCommandService
必须声明为SpringBean才能注入REST控制器