0

私は春の雲に新しいですし、これが最初の私が今やろうとしています何で言った、マイクロサービスへの私たちのモノ構造を変更するために探して、次の集約メッセージ

  1. は、呼び出すための要求を受信で異なるソースからのWebサービス(外部システム)。いつでも、これは1回の要求または100,000回までの要求になります。
  2. 外部システムは一括処理をサポートしているので、メッセージを集約して一括送信することができます。たとえば、数値のしきい値に達するか(100メッセージ)、または時間のしきい値が2秒に達するまで集約し続けます。私はエラーを受信した場合
  3. はまた、私はバックオフにしたい指数関数的に

私の最初のアイデアは、上記の集計を行い、私のシンクの前にプロセッサを作成することです。

これはクラウドコンピューティングの正しい考え方ですか、それとも別の道でしょうか?


作業溶液

@EnableBinding(Processor.class) 
class Configuration { 

    @Autowired 
    Processor processor; 


    @ServiceActivator(inputChannel = Processor.INPUT) 
    @Bean 
    public MessageHandler aggregator() { 

     AggregatingMessageHandler aggregatingMessageHandler = 
       new AggregatingMessageHandler(new DefaultAggregatingMessageGroupProcessor(), 
         new SimpleMessageStore(10)); 

     //AggregatorFactoryBean aggregatorFactoryBean = new AggregatorFactoryBean(); 
     //aggregatorFactoryBean.setMessageStore(); 
     aggregatingMessageHandler.setOutputChannel(processor.output()); 
     //aggregatorFactoryBean.setDiscardChannel(processor.output()); 
     aggregatingMessageHandler.setSendPartialResultOnExpiry(true); 
     aggregatingMessageHandler.setSendTimeout(1000L); 
     aggregatingMessageHandler.setCorrelationStrategy(new ExpressionEvaluatingCorrelationStrategy("'FOO'")); 
     aggregatingMessageHandler.setReleaseStrategy(new MessageCountReleaseStrategy(3)); //ExpressionEvaluatingReleaseStrategy("size() == 5") 
     aggregatingMessageHandler.setExpireGroupsUponCompletion(true); 
     aggregatingMessageHandler.setGroupTimeoutExpression(new ValueExpression<>(3000L)); //size() ge 2 ? 5000 : -1 
     aggregatingMessageHandler.setExpireGroupsUponTimeout(true); 
     return aggregatingMessageHandler; 
    } 
} 

答えて

0

あなたは、単一のメッセージに複数のメッセージを組み合わせたaggregatorプロセッサアプリケーションを書くことができます。 Spring Integrationアグリゲータの詳細については、here

を参照してください。