0
私は春の雲に新しいですし、これが最初の私が今やろうとしています何で言った、マイクロサービスへの私たちのモノ構造を変更するために探して、次の集約メッセージ
- は、呼び出すための要求を受信で異なるソースからのWebサービス(外部システム)。いつでも、これは1回の要求または100,000回までの要求になります。
- 外部システムは一括処理をサポートしているので、メッセージを集約して一括送信することができます。たとえば、数値のしきい値に達するか(100メッセージ)、または時間のしきい値が2秒に達するまで集約し続けます。私はエラーを受信した場合
- はまた、私はバックオフにしたい指数関数的に
私の最初のアイデアは、上記の集計を行い、私のシンクの前にプロセッサを作成することです。
これはクラウドコンピューティングの正しい考え方ですか、それとも別の道でしょうか?
作業溶液
@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;
}
}