Example usage for org.springframework.integration.aggregator MessageCountReleaseStrategy MessageCountReleaseStrategy

List of usage examples for org.springframework.integration.aggregator MessageCountReleaseStrategy MessageCountReleaseStrategy

Introduction

In this page you can find the example usage for org.springframework.integration.aggregator MessageCountReleaseStrategy MessageCountReleaseStrategy.

Prototype

public MessageCountReleaseStrategy(int threshold) 

Source Link

Usage

From source file:org.springframework.cloud.stream.app.hdfs.dataset.sink.HdfsDatasetSinkConfiguration.java

@Bean
@Primary// w w w. ja va2  s.  c om
@ServiceActivator(inputChannel = Sink.INPUT)
FactoryBean<MessageHandler> aggregatorFactoryBean(MessageChannel toSink, MessageGroupStore messageGroupStore) {
    AggregatorFactoryBean aggregatorFactoryBean = new AggregatorFactoryBean();
    aggregatorFactoryBean
            .setCorrelationStrategy(new ExpressionEvaluatingCorrelationStrategy("payload.getClass().name"));
    aggregatorFactoryBean.setReleaseStrategy(new MessageCountReleaseStrategy(properties.getBatchSize()));
    aggregatorFactoryBean.setMessageStore(messageGroupStore);
    aggregatorFactoryBean.setProcessorBean(new DefaultAggregatingMessageGroupProcessor());
    aggregatorFactoryBean.setExpireGroupsUponCompletion(true);
    aggregatorFactoryBean.setSendPartialResultOnExpiry(true);
    aggregatorFactoryBean.setOutputChannel(toSink);
    return aggregatorFactoryBean;
}

From source file:org.springframework.integration.aggregator.AggregatorTests.java

@Test
public void testAggPerf() throws InterruptedException, ExecutionException, TimeoutException {
    AggregatingMessageHandler handler = new AggregatingMessageHandler(
            new DefaultAggregatingMessageGroupProcessor());
    handler.setCorrelationStrategy(message -> "foo");
    handler.setReleaseStrategy(new MessageCountReleaseStrategy(60000));
    handler.setExpireGroupsUponCompletion(true);
    handler.setSendPartialResultOnExpiry(true);
    DirectChannel outputChannel = new DirectChannel();
    handler.setOutputChannel(outputChannel);

    final CompletableFuture<Collection<?>> resultFuture = new CompletableFuture<>();
    outputChannel.subscribe(message -> {
        Collection<?> payload = (Collection<?>) message.getPayload();
        logger.warn("Received " + payload.size());
        resultFuture.complete(payload);/* w ww .jav a2  s  .co m*/
    });

    SimpleMessageStore store = new SimpleMessageStore();

    SimpleMessageGroupFactory messageGroupFactory = new SimpleMessageGroupFactory(
            SimpleMessageGroupFactory.GroupType.BLOCKING_QUEUE);

    store.setMessageGroupFactory(messageGroupFactory);

    handler.setMessageStore(store);

    Message<?> message = new GenericMessage<String>("foo");
    StopWatch stopwatch = new StopWatch();
    stopwatch.start();
    for (int i = 0; i < 120000; i++) {
        if (i % 10000 == 0) {
            stopwatch.stop();
            logger.warn("Sent " + i + " in " + stopwatch.getTotalTimeSeconds() + " (10k in "
                    + stopwatch.getLastTaskTimeMillis() + "ms)");
            stopwatch.start();
        }
        handler.handleMessage(message);
    }
    stopwatch.stop();
    logger.warn("Sent " + 120000 + " in " + stopwatch.getTotalTimeSeconds() + " (10k in "
            + stopwatch.getLastTaskTimeMillis() + "ms)");

    Collection<?> result = resultFuture.get(10, TimeUnit.SECONDS);
    assertNotNull(result);
    assertEquals(60000, result.size());
}