Axonframework,사용하는 방법 MessageDispatchInterceptor 와 함께 민감하는 저장소

0

질문

I have read set-기반으로 일관성 검증을 블로그에 내가 원하는 검증을 통해 파견 interceptor. 나의 예를 따라,그러나 내가 사용하는 저장소 및 반응성 그것은 작동하지 않습니다. 가 두 블록고지 않습니다. 블록 오류가 발생하지만,없이 그것을 차단하지 않는 실행할 아무것도. 여기에는 나의 코드입니다.

class SubnetCommandInterceptor : MessageDispatchInterceptor<CommandMessage<*>> {

  @Autowired
  private lateinit var privateNetworkRepository: PrivateNetworkRepository

  override fun handle(messages: List<CommandMessage<*>?>): BiFunction<Int, CommandMessage<*>, CommandMessage<*>> {
    return BiFunction<Int, CommandMessage<*>, CommandMessage<*>> { index: Int?, command: CommandMessage<*> ->
      if (CreateSubnetCommand::class.simpleName == (command.payloadType.simpleName)){
        val interceptCommand = command.payload as CreateSubnetCommand
        privateNetworkRepository
          .findById(interceptCommand.privateNetworkId)
          // ..some validation logic here ex.
          // .filter { network -> network.isSubnetOverlap() }
          .switchIfEmpty(Mono.error(IllegalArgumentException("Requested subnet is overlap with the previous subnet.")))
          // .block() also doesn't work here it throws error
         // block()/blockFirst()/blockLast() are blocking, which is not supported in thread reactor-
      }
      command
    }
  }
}
axon axon-framework kotlin
2021-11-24 06:18:54
1

최고의 응답

3

가입 반응성소 안에 메시지를 발송자가 정말 좋고로 이어질 수 있습 이상한 행동을 부하 ThreadLocal(에 의해 사용 Axox) 이 적응하지 않는 것에 사용되는 반응성 프로그램

대신에,체크아웃 축삭의 반응이 확장 및 반응성터 섹션입니다.

예를 들어 무엇을 할 수 있습니다:

reactiveCommandGateway.registerDispatchInterceptor(
        cmdMono -> cmdMono.flatMap(cmd->privateNetworkRepository
      .findById(cmd.privateNetworkId))
.switchIfEmpty(
Mono.error(IllegalArgumentException("Requested subnet is overlap with the previous subnet."))
.then(cmdMono)));
2021-11-24 13:26:24

감사에 대한 조언,그런데 보이지 않는데 ReactorCommandBus 에서 확장자를 사용해야 하 ReactroCommandGateway 까요?
Patrick

yes,거기 반응이 게이트웨이서 지원
schananas

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................