Axonframework, कैसे का उपयोग करने के लिए MessageDispatchInterceptor के साथ प्रतिक्रियाशील भंडार

0

सवाल

मैंने पढ़ा है के सेट-आधारित स्थिरता सत्यापन ब्लॉग और मैं चाहते हैं कि मान्य करने के लिए के माध्यम से एक प्रेषण इंटरसेप्टर. मैं उदाहरण का अनुसरण करें, लेकिन मैं का उपयोग करें प्रतिक्रियाशील भंडार नहीं है और यह वास्तव में मेरे लिए काम करते हैं. मैं दोनों की कोशिश की ब्लॉक और ब्लॉक नहीं. ब्लॉक के साथ यह त्रुटि फेंकता है, लेकिन बिना यह ब्लॉक अमल नहीं करता । यहाँ है मेरे कोड.

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

सलाह के लिए धन्यवाद, btw मैं देख नहीं है किसी भी ReactorCommandBus विस्तार में मैं का उपयोग करना चाहिए ReactroCommandGateway के बजाय?
Patrick

हाँ, वहाँ रहे हैं केवल प्रतिक्रियाशील द्वार समर्थित
schananas

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................