@Test public void completesAfterThreshold() throws Exception { defaultHandler.setReleaseStrategy(new MessageCountReleaseStrategy()); MessageChannel discardChannel = mock(MessageChannel.class); when(discardChannel.send(any(Message.class))).thenReturn(true); defaultHandler.setDiscardChannel(discardChannel); Message<?> message1 = correlatedMessage(1, 2, 1); Message<?> message2 = correlatedMessage(1, 2, 2); defaultHandler.handleMessage(message1); verify(outputChannel).send(message1); defaultHandler.handleMessage(message2); verify(outputChannel, never()).send(message2); verify(discardChannel).send(message2); }
@Bean public MessageHandler gatherer2() { return new AggregatingMessageHandler(new DefaultAggregatingMessageGroupProcessor(), new SimpleMessageStore(), new HeaderAttributeCorrelationStrategy(IntegrationMessageHeaderAccessor.CORRELATION_ID), new MessageCountReleaseStrategy(3)); }
@Test public void completesIfNoSequence() throws Exception { defaultHandler.setReleaseStrategy(new MessageCountReleaseStrategy(2)); Message<?> message1 = MessageBuilder.withPayload(1).setCorrelationId("foo").build(); Message<?> message2 = MessageBuilder.withPayload(2).setCorrelationId("foo").build(); Message<?> message3 = MessageBuilder.withPayload(3).setCorrelationId("foo").build(); defaultHandler.handleMessage(message1); verify(outputChannel, never()).send(message3); defaultHandler.handleMessage(message2); verify(outputChannel).send(message2); defaultHandler.handleMessage(message3); verify(outputChannel, never()).send(message3); }
public static ReleaseStrategy messageCountReleaseStrategy(int messageThreshold) { return new MessageCountReleaseStrategy(messageThreshold); }
public static ReleaseStrategy messageCountReleaseStrategy(int messageThreshold) { return new MessageCountReleaseStrategy(messageThreshold); }
AggregatingMessageHandler handler = new AggregatingMessageHandler(new DefaultAggregatingMessageGroupProcessor()); handler.setCorrelationStrategy(message -> "foo"); handler.setReleaseStrategy(new MessageCountReleaseStrategy(60000)); handler.setExpireGroupsUponCompletion(true); handler.setSendPartialResultOnExpiry(true);
@Test public void cglibProxy() { DirectChannel input = new DirectChannel(); QueueChannel output = new QueueChannel(); GreetingService testBean = new GreetingBean(); ProxyFactory proxyFactory = new ProxyFactory(testBean); proxyFactory.setProxyTargetClass(true); testBean = (GreetingService) proxyFactory.getProxy(); MethodInvokingMessageGroupProcessor aggregator = new MethodInvokingMessageGroupProcessor(testBean); AggregatingMessageHandler handler = new AggregatingMessageHandler(aggregator); handler.setReleaseStrategy(new MessageCountReleaseStrategy()); handler.setOutputChannel(output); handler.setBeanFactory(mock(BeanFactory.class)); handler.afterPropertiesSet(); EventDrivenConsumer endpoint = new EventDrivenConsumer(input, handler); endpoint.start(); Message<?> message = MessageBuilder.withPayload("proxy").setCorrelationId("abc").build(); input.send(message); assertEquals("hello proxy", output.receive(0).getPayload()); }
@Test public void jdkProxy() { DirectChannel input = new DirectChannel(); QueueChannel output = new QueueChannel(); GreetingService testBean = new GreetingBean(); ProxyFactory proxyFactory = new ProxyFactory(testBean); proxyFactory.setProxyTargetClass(true); testBean = (GreetingService) proxyFactory.getProxy(); MethodInvokingMessageGroupProcessor aggregator = new MethodInvokingMessageGroupProcessor(testBean); AggregatingMessageHandler handler = new AggregatingMessageHandler(aggregator); handler.setReleaseStrategy(new MessageCountReleaseStrategy()); handler.setOutputChannel(output); handler.setBeanFactory(mock(BeanFactory.class)); handler.afterPropertiesSet(); EventDrivenConsumer endpoint = new EventDrivenConsumer(input, handler); endpoint.start(); Message<?> message = MessageBuilder.withPayload("proxy").setCorrelationId("abc").build(); input.send(message); assertEquals("hello proxy", output.receive(0).getPayload()); }
@Bean @Primary @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; }