ResequencerSpec() { super(new ResequencingMessageHandler(new ResequencingMessageGroupProcessor())); }
/** * @param releasePartialSequences the releasePartialSequences * @return the handler spec. * @see ResequencingMessageHandler#setReleasePartialSequences(boolean) */ public ResequencerSpec releasePartialSequences(boolean releasePartialSequences) { this.handler.setReleasePartialSequences(releasePartialSequences); return _this(); }
@Override protected void afterRelease(MessageGroup messageGroup, Collection<Message<?>> completedMessages) { afterRelease(messageGroup, completedMessages, false); }
@Before public void configureResequencer() { this.resequencer = new ResequencingMessageHandler(processor, store, null, null); this.resequencer.setBeanFactory(mock(BeanFactory.class)); this.resequencer.afterPropertiesSet(); }
@Test public void testBasicResequencingA() throws InterruptedException { SequenceSizeReleaseStrategy releaseStrategy = new SequenceSizeReleaseStrategy(); releaseStrategy.setReleasePartialSequences(true); this.resequencer = new ResequencingMessageHandler(processor, store, null, releaseStrategy); this.resequencer.setBeanFactory(mock(BeanFactory.class)); this.resequencer.afterPropertiesSet(); QueueChannel replyChannel = new QueueChannel(); Message<?> message1 = createMessage("123", "ABC", 3, 1, replyChannel); Message<?> message3 = createMessage("789", "ABC", 3, 3, replyChannel); this.resequencer.handleMessage(message3); assertNull(replyChannel.receive(0)); this.resequencer.handleMessage(message1); assertNotNull(replyChannel.receive(0)); assertNull(replyChannel.receive(0)); }
@Test public void testResequencingWithDifferentSequenceSizes() throws InterruptedException { QueueChannel discardChannel = new QueueChannel(); Message<?> message1 = createMessage("123", "ABC", 4, 2, null); Message<?> message2 = createMessage("456", "ABC", 5, 1, null); this.resequencer.setSendPartialResultOnExpiry(false); this.resequencer.setDiscardChannel(discardChannel); this.resequencer.setReleasePartialSequences(true); // force SequenceSizeReleaseStrategy this.resequencer.handleMessage(message1); this.resequencer.handleMessage(message2); // this.resequencer.discardBarrier(this.resequencer.barriers.get("ABC")); Message<?> discard1 = discardChannel.receive(0); Message<?> discard2 = discardChannel.receive(0); // message2 has been discarded because it came in with the wrong sequence size assertNotNull(discard1); assertEquals(1, new IntegrationMessageHeaderAccessor(discard1).getSequenceNumber()); assertNull(discard2); }
remove(messageGroup); MessageGroupStore messageStore = getMessageStore(); if (completedMessages != null) { int lastReleasedSequenceNumber = findLastReleasedSequenceNumber(groupId, completedMessages); messageStore.setLastReleasedSequenceNumberForGroup(groupId, lastReleasedSequenceNumber); if (messageStore instanceof SimpleMessageStore
public ResequencingMessageHandler(MessageGroupProcessor processor, MessageGroupStore store) { super(processor, store); this.setExpireGroupsUponTimeout(false); }
@Test public void testBasicUnboundedResequencing() throws InterruptedException { SequenceSizeReleaseStrategy releaseStrategy = new SequenceSizeReleaseStrategy(); releaseStrategy.setReleasePartialSequences(true); this.resequencer = new ResequencingMessageHandler(processor, store, null, releaseStrategy); QueueChannel replyChannel = new QueueChannel(); this.resequencer.setCorrelationStrategy(message -> "A"); this.resequencer.setBeanFactory(mock(BeanFactory.class)); this.resequencer.afterPropertiesSet(); //Message<?> message0 = MessageBuilder.withPayload("0").setSequenceNumber(0).build(); Message<?> message1 = MessageBuilder.withPayload("1").setSequenceNumber(1).setReplyChannel(replyChannel).build(); Message<?> message2 = MessageBuilder.withPayload("2").setSequenceNumber(2).setReplyChannel(replyChannel).build(); Message<?> message3 = MessageBuilder.withPayload("3").setSequenceNumber(3).setReplyChannel(replyChannel).build(); Message<?> message4 = MessageBuilder.withPayload("4").setSequenceNumber(4).setReplyChannel(replyChannel).build(); Message<?> message5 = MessageBuilder.withPayload("5").setSequenceNumber(5).setReplyChannel(replyChannel).build(); this.resequencer.handleMessage(message3); assertNull(replyChannel.receive(0)); this.resequencer.handleMessage(message1); assertNotNull(replyChannel.receive(0)); this.resequencer.handleMessage(message2); assertNotNull(replyChannel.receive(0)); assertNotNull(replyChannel.receive(0)); assertNull(replyChannel.receive(0)); this.resequencer.handleMessage(message5); assertNull(replyChannel.receive(0)); this.resequencer.handleMessage(message4); assertNotNull(replyChannel.receive(0)); }
remove(messageGroup); MessageGroupStore messageStore = getMessageStore(); if (completedMessages != null) { int lastReleasedSequenceNumber = findLastReleasedSequenceNumber(groupId, completedMessages); messageStore.setLastReleasedSequenceNumberForGroup(groupId, lastReleasedSequenceNumber); if (messageStore instanceof SimpleMessageStore
public ResequencingMessageHandler(MessageGroupProcessor processor, MessageGroupStore store, CorrelationStrategy correlationStrategy, ReleaseStrategy releaseStrategy) { super(processor, store, correlationStrategy, releaseStrategy); this.setExpireGroupsUponTimeout(false); }
/** * @param releasePartialSequences the releasePartialSequences * @return the handler spec. * @see ResequencingMessageHandler#setReleasePartialSequences(boolean) */ public ResequencerSpec releasePartialSequences(boolean releasePartialSequences) { this.handler.setReleasePartialSequences(releasePartialSequences); return _this(); }
ResequencerSpec() { super(new ResequencingMessageHandler(new ResequencingMessageGroupProcessor())); }
public ResequencingMessageHandler(MessageGroupProcessor processor) { super(processor); this.setExpireGroupsUponTimeout(false); }
@Override protected void afterRelease(MessageGroup messageGroup, Collection<Message<?>> completedMessages) { afterRelease(messageGroup, completedMessages, false); }
/** * @param releasePartialSequences the releasePartialSequences * @return the handler spec. * @see ResequencingMessageHandler#setReleasePartialSequences(boolean) */ public ResequencerSpec releasePartialSequences(boolean releasePartialSequences) { this.handler.setReleasePartialSequences(releasePartialSequences); return _this(); }
ResequencerSpec() { super(new ResequencingMessageHandler(new ResequencingMessageGroupProcessor())); }
public ResequencingMessageHandler(MessageGroupProcessor processor, MessageGroupStore store, CorrelationStrategy correlationStrategy, ReleaseStrategy releaseStrategy) { super(processor, store, correlationStrategy, releaseStrategy); this.setExpireGroupsUponTimeout(false); }
/** * @param releasePartialSequences the releasePartialSequences * @return the handler spec. * @see ResequencingMessageHandler#setReleasePartialSequences(boolean) */ public ResequencerSpec releasePartialSequences(boolean releasePartialSequences) { this.handler.setReleasePartialSequences(releasePartialSequences); return _this(); }
ResequencerSpec() { super(new ResequencingMessageHandler(new ResequencingMessageGroupProcessor())); }