Axonframework 事件调度程序不断地重新运行我的事件
Axonframework event scheduler keeps rerunning my event infinitely
所以我想创建一个简单的食品订购服务,但是这个服务需要来自其他服务的一些信息,所以我使用了 saga 模式。如果我点菜,它应该如何工作,首先它会尝试创建订单,但如果有任何错误,它会重试 3 次并发布成功或失败的事件。
这是示例代码。
@Saga
class OrderCreationSaga {
@Transient
@Autowired
private lateinit var commandGateway: CommandGateway
@Transient
@Autowired
private lateinit var eventScheduler: EventScheduler
@Transient
@Autowired
private lateinit var eventBus: EventBus
@Transient
@Autowired
private lateinit var scheduleToken: ScheduleToken
private lateinit var orderId: String
private var retryCounter = 1
@StartSaga
@SagaEventHandler(associationProperty = "orderId")
fun on(event: OrderCreationAttempted) {
this.orderId = event.orderId
eventBus.publish(GenericEventMessage(event.toOrderCreationRequested()))
}
@SagaEventHandler(associationProperty = "orderId")
fun on(event: OrderCreationRequested) {
try {
// send data to another service
orderCreationService.createOrder(event).block()
eventBus.publish(GenericEventMessage(
OrderCreationSuccess(
orderId = event.orderId
))
)
} catch (error: Throwable) {
// catching request error, retry for 3 times
if (this.retryCounter == 3) {
eventBus.publish(GenericEventMessage(
OrderCreationFailed(
orderId = this.orderId,
)
))
} else {
eventBus.publish(GenericEventMessage(
OrderCreationRetry(
orderId = event.orderId,
)
))
this.retryCounter++
}
}
}
@EndSaga
@SagaEventHandler(associationProperty = "orderId")
fun on(event: OrderCreationSuccess) {
// do the success job
}
@EndSaga
@SagaEventHandler(associationProperty = "orderId")
fun on(event: OrderCreationFailed) {
// do the failed job
}
@SagaEventHandler(associationProperty = "orderId")
fun on(event: OrderCreationRetry) {
val duration = Duration.ofSeconds(30)
val scheduleEvent = OrderCreationRequested(orderId = event.orderId)
scheduleToken = eventScheduler.schedule(duration, scheduleEvent)
}
}
但奇怪的事情发生了,所以在它发布成功事件后,它会出于某种原因再次发布 OrderCreationRequested 事件(我知道这一点是因为我检查了 axonserver 中的事件日志)。这一直无限循环,这是因为我的代码或某些配置还是其他原因?
所以问题是我忘记为 MongoDB 设置用户名和密码,然后有人试图删除我的所有数据,包括 axon-server 的跟踪令牌。因此,由于跟踪令牌已被删除,axon-server 开始创建具有 0 值的新令牌,这使得所有事件开始一次又一次地重新运行。我通过为 MongoDB.
添加用户名和密码来解决这个问题
所以我想创建一个简单的食品订购服务,但是这个服务需要来自其他服务的一些信息,所以我使用了 saga 模式。如果我点菜,它应该如何工作,首先它会尝试创建订单,但如果有任何错误,它会重试 3 次并发布成功或失败的事件。
这是示例代码。
@Saga
class OrderCreationSaga {
@Transient
@Autowired
private lateinit var commandGateway: CommandGateway
@Transient
@Autowired
private lateinit var eventScheduler: EventScheduler
@Transient
@Autowired
private lateinit var eventBus: EventBus
@Transient
@Autowired
private lateinit var scheduleToken: ScheduleToken
private lateinit var orderId: String
private var retryCounter = 1
@StartSaga
@SagaEventHandler(associationProperty = "orderId")
fun on(event: OrderCreationAttempted) {
this.orderId = event.orderId
eventBus.publish(GenericEventMessage(event.toOrderCreationRequested()))
}
@SagaEventHandler(associationProperty = "orderId")
fun on(event: OrderCreationRequested) {
try {
// send data to another service
orderCreationService.createOrder(event).block()
eventBus.publish(GenericEventMessage(
OrderCreationSuccess(
orderId = event.orderId
))
)
} catch (error: Throwable) {
// catching request error, retry for 3 times
if (this.retryCounter == 3) {
eventBus.publish(GenericEventMessage(
OrderCreationFailed(
orderId = this.orderId,
)
))
} else {
eventBus.publish(GenericEventMessage(
OrderCreationRetry(
orderId = event.orderId,
)
))
this.retryCounter++
}
}
}
@EndSaga
@SagaEventHandler(associationProperty = "orderId")
fun on(event: OrderCreationSuccess) {
// do the success job
}
@EndSaga
@SagaEventHandler(associationProperty = "orderId")
fun on(event: OrderCreationFailed) {
// do the failed job
}
@SagaEventHandler(associationProperty = "orderId")
fun on(event: OrderCreationRetry) {
val duration = Duration.ofSeconds(30)
val scheduleEvent = OrderCreationRequested(orderId = event.orderId)
scheduleToken = eventScheduler.schedule(duration, scheduleEvent)
}
}
但奇怪的事情发生了,所以在它发布成功事件后,它会出于某种原因再次发布 OrderCreationRequested 事件(我知道这一点是因为我检查了 axonserver 中的事件日志)。这一直无限循环,这是因为我的代码或某些配置还是其他原因?
所以问题是我忘记为 MongoDB 设置用户名和密码,然后有人试图删除我的所有数据,包括 axon-server 的跟踪令牌。因此,由于跟踪令牌已被删除,axon-server 开始创建具有 0 值的新令牌,这使得所有事件开始一次又一次地重新运行。我通过为 MongoDB.
添加用户名和密码来解决这个问题