0
我是新來春雲,展望我們的單聲道結構,改變微服務,這在第一次我試圖盡現說的是以下骨料消息
- 接收請求調用來自不同來源的網絡服務(外部系統)。在任何特定時間,這可以是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;
}
}