ResequencerSpec() { super(new ResequencingMessageHandler(new ResequencingMessageGroupProcessor())); }
public Object processMessageGroup(MessageGroup group) { Collection<Message<?>> messages = group.getMessages(); if (messages.size() > 0) { List<Message<?>> sorted = new ArrayList<Message<?>>(messages); Collections.sort(sorted, this.comparator); ArrayList<Message<?>> partialSequence = new ArrayList<Message<?>>(); int previousSequence = extractSequenceNumber(sorted.get(0)); int currentSequence = previousSequence; for (Message<?> message : sorted) { previousSequence = currentSequence; currentSequence = extractSequenceNumber(message); if (currentSequence - 1 > previousSequence) { //there is a gap in the sequence here break; } partialSequence.add(message); } return partialSequence; } return null; }
@SuppressWarnings({ "rawtypes", "unchecked" }) @Test public void shouldPartiallProcessIncompleteSequence() { Message prototypeMessage = MessageBuilder.withPayload("foo").setCorrelationId("x").setSequenceNumber(1).setSequenceSize(4).build(); List<Message<?>> messages = new ArrayList<Message<?>>(); Message message2 = MessageBuilder.fromMessage(prototypeMessage).setSequenceNumber(4).build(); Message message1 = MessageBuilder.fromMessage(prototypeMessage).setSequenceNumber(1).build(); Message message3 = MessageBuilder.fromMessage(prototypeMessage).setSequenceNumber(3).build(); messages.add(message1); messages.add(message2); messages.add(message3); SimpleMessageGroup group = new SimpleMessageGroup(messages, "x"); List<Message> processedMessages = (List<Message>) processor.processMessageGroup(group); assertThat(processedMessages, hasItems(message1)); assertThat(processedMessages.size(), is(1)); }
@SuppressWarnings({ "rawtypes", "unchecked" }) @Test public void shouldProcessSequence() { Message prototypeMessage = MessageBuilder.withPayload("foo").setCorrelationId("x").setSequenceNumber(1).setSequenceSize(3).build(); List<Message<?>> messages = new ArrayList<Message<?>>(); Message message1 = MessageBuilder.fromMessage(prototypeMessage).setSequenceNumber(1).build(); Message message2 = MessageBuilder.fromMessage(prototypeMessage).setSequenceNumber(2).build(); Message message3 = MessageBuilder.fromMessage(prototypeMessage).setSequenceNumber(3).build(); messages.add(message1); messages.add(message2); messages.add(message3); SimpleMessageGroup group = new SimpleMessageGroup(messages, "x"); List<Message> processedMessages = (List<Message>) processor.processMessageGroup(group); assertThat(processedMessages, hasItems(message1, message2, message3)); }
ResequencerSpec() { super(new ResequencingMessageHandler(new ResequencingMessageGroupProcessor())); }
public Object processMessageGroup(MessageGroup group) { Collection<Message<?>> messages = group.getMessages(); if (messages.size() > 0) { List<Message<?>> sorted = new ArrayList<Message<?>>(messages); Collections.sort(sorted, this.comparator); ArrayList<Message<?>> partialSequence = new ArrayList<Message<?>>(); int previousSequence = extractSequenceNumber(sorted.get(0)); int currentSequence = previousSequence; for (Message<?> message : sorted) { previousSequence = currentSequence; currentSequence = extractSequenceNumber(message); if (currentSequence - 1 > previousSequence) { //there is a gap in the sequence here break; } partialSequence.add(message); } return partialSequence; } return null; }
ResequencerSpec() { super(new ResequencingMessageHandler(new ResequencingMessageGroupProcessor())); }
ResequencerSpec() { super(new ResequencingMessageHandler(new ResequencingMessageGroupProcessor())); }