Я новичок весны облака и надеюсь изменить нашу моно структуру микро услуг, это сказало в первом, что я пытаюсь сделать теперь это следующиеСовокупных сообщений Спринг Облако поток
- Прием запросов для вызова веб-сервис (внешняя система) из разных источников. В любое время это может быть 1 запрос или запрос до 100K.
- Внешняя система поддерживает объем, поэтому лучше, если я смогу агрегировать сообщения и отправить их навалом. Например, сохраняйте агрегацию до тех пор, пока не будет достигнут порог числа (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;
}
}