@Aggregator(inputChannel = "inputChannel") public Message<?> aggregatingMethod(List<Message<?>> messages) { List<Message<?>> sortableList = new ArrayList<>(messages); Collections.sort(sortableList, new MessageSequenceComparator()); StringBuffer buffer = new StringBuffer(); Object correlationId = null; for (Message<?> message : sortableList) { buffer.append(message.getPayload().toString()); if (null == correlationId) { correlationId = new IntegrationMessageHeaderAccessor(message).getCorrelationId(); } } Message<?> returnedMessage = new GenericMessage<>(buffer.toString()); this.aggregatedMessages.put(correlationId, returnedMessage); return returnedMessage; }
@Aggregator(inputChannel = "inputChannel") public Message<?> aggregatingMethod(List<Message<?>> messages) { List<Message<?>> sortableList = new ArrayList<>(messages); Collections.sort(sortableList, new MessageSequenceComparator()); StringBuffer buffer = new StringBuffer(); Object correlationId = null; for (Message<?> message : sortableList) { buffer.append(message.getPayload().toString()); if (null == correlationId) { correlationId = new IntegrationMessageHeaderAccessor(message).getCorrelationId(); } } Message<?> returnedMessage = new GenericMessage<>(buffer.toString()); this.aggregatedMessages.put(correlationId, returnedMessage); return returnedMessage; }
@Aggregator public Message<?> createSingleMessageFromGroup(List<Message<?>> messages) { List<Message<?>> sortableList = new ArrayList<>(messages); Collections.sort(sortableList, new MessageSequenceComparator()); StringBuffer buffer = new StringBuffer(); Object correlationId = null; for (Message<?> message : sortableList) { buffer.append(message.getPayload().toString()); if (null == correlationId) { correlationId = new IntegrationMessageHeaderAccessor(message).getCorrelationId(); } } Message<?> returnedMessage = new GenericMessage<>(buffer.toString()); if (correlationId != null) { this.aggregatedMessages.put(correlationId, returnedMessage); } return returnedMessage; }
@Aggregator( inputChannel = "inputChannel", outputChannel = "outputChannel", discardChannel = "discardChannel", sendPartialResultsOnExpiry = "true", sendTimeout = "98765432") public Message<?> aggregatingMethod(List<Message<?>> messages) { List<Message<?>> sortableList = new ArrayList<>(messages); Collections.sort(sortableList, new MessageSequenceComparator()); StringBuffer buffer = new StringBuffer(); Object correlationId = null; for (Message<?> message : sortableList) { buffer.append(message.getPayload().toString()); if (null == correlationId) { correlationId = new IntegrationMessageHeaderAccessor(message).getCorrelationId(); } } Message<?> returnedMessage = new GenericMessage<>(buffer.toString()); aggregatedMessages.put(correlationId, returnedMessage); return returnedMessage; }
implements DiscardingMessageHandler, DisposableBean, ApplicationEventPublisherAware, Lifecycle { private final Comparator<Message<?>> sequenceNumberComparator = new MessageSequenceComparator();
@Test public void testEqualWithDefaultValues() { Comparator<Message<?>> comparator = new MessageSequenceComparator(); Message<String> message1 = MessageBuilder.withPayload("test1").build(); Message<String> message2 = MessageBuilder.withPayload("test2").build(); assertEquals(0, comparator.compare(message1, message2)); }
@Test public void testEqual() { Comparator<Message<?>> comparator = new MessageSequenceComparator(); Message<String> message1 = MessageBuilder.withPayload("test1") .setSequenceNumber(3).build(); Message<String> message2 = MessageBuilder.withPayload("test2") .setSequenceNumber(3).build(); assertEquals(0, comparator.compare(message1, message2)); }
@Test public void testGreaterThan() { Comparator<Message<?>> comparator = new MessageSequenceComparator(); Message<String> message1 = MessageBuilder.withPayload("test1") .setSequenceNumber(5).build(); Message<String> message2 = MessageBuilder.withPayload("test2") .setSequenceNumber(3).build(); assertEquals(1, comparator.compare(message1, message2)); }
@Test public void testLessThan() { Comparator<Message<?>> comparator = new MessageSequenceComparator(); Message<String> message1 = MessageBuilder.withPayload("test1") .setSequenceNumber(1).build(); Message<String> message2 = MessageBuilder.withPayload("test2") .setSequenceNumber(2).build(); assertEquals(-1, comparator.compare(message1, message2)); }
@Override protected MessageBarrier<SortedSet<Message<?>>> createMessageBarrier(Object correlationKey) { MessageBarrier<SortedSet<Message<?>>> messageBarrier = new MessageBarrier<SortedSet<Message<?>>>(new TreeSet<Message<?>>(new MessageSequenceComparator()), correlationKey); messageBarrier.setAttribute(LAST_RELEASED_SEQUENCE_NUMBER, 0); return messageBarrier; }
private final Comparator<Message<?>> sequenceNumberComparator = new MessageSequenceComparator();