Spring Cloud Stream中的聚合消息

时间:2016-11-24 05:58:38

标签: spring-cloud spring-cloud-stream spring-cloud-dataflow

我是Spring的新手,希望将我们的单声道结构改为微服务,这首先说明我现在要做的是以下

  1. 接收来自不同来源的调用Web服务(外部系统)的请求。在任何特定时间,这可以是1个请求或最多100K请求。
  2. 外部系统支持批量,因此如果我可以聚合邮件并批量发送它们会更好。例如,保持聚合,直到达到数量阈值(100消息)或达到时间阈值2秒。
  3. 如果我收到错误,我想以指数方式退出
  4. 我的第一个想法是在我的接收器之前创建一个执行上述聚合的处理器。

    这是云计算的正确思考方式还是另一条经历的途径?

    工作解决方案

    @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;
        }
    }
    

1 个答案:

答案 0 :(得分:0)

您可以编写一个return ( <div> <p>{"I've seen the movie."}</p> </div> ) 处理器应用程序,将多个消息组合到一条消息中。有关Spring Integration聚合器的更多信息,请参阅regex demo