0

我是新來春雲,展望我們的單聲道結構,改變微服務,這在第一次我試圖盡現說的是以下骨料消息

  1. 接收請求調用來自不同來源的網絡服務(外部系統)。在任何特定時間,這可以是1個請求或高達100K的請求。
  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