@Test public void testShouldNotSendPartialResultOnTimeoutByDefaultUnlockB4Send() { QueueChannel discardChannel = new QueueChannel(); this.aggregator.setDiscardChannel((m, to) -> { checkLock(this.aggregator, "ABC", false); discardChannel.send(m); return true; }); this.aggregator.setReleaseLockBeforeSend(true); QueueChannel replyChannel = new QueueChannel(); Message<?> message = createMessage(3, "ABC", 2, 1, replyChannel, null); this.aggregator.handleMessage(message); this.store.expireMessageGroups(-10000); Message<?> reply = replyChannel.receive(0); assertNull("No message should have been sent normally", reply); Message<?> discardedMessage = discardChannel.receive(1000); assertNotNull("A message should have been discarded", discardedMessage); assertEquals(message, discardedMessage); assertEquals(1, expiryEvents.size()); assertSame(this.aggregator, expiryEvents.get(0).getSource()); assertEquals("ABC", this.expiryEvents.get(0).getGroupId()); assertEquals(1, this.expiryEvents.get(0).getMessageCount()); assertTrue(this.expiryEvents.get(0).isDiscarded()); }
@Test public void testCompleteGroupWithinTimeoutUnlockB4Send() { QueueChannel replyChannel = new QueueChannel(); MessageChannel lockCheckingChannel = (m, to) -> { checkLock(this.aggregator, "ABC", false); replyChannel.send(m); return true; }; Message<?> message1 = createMessage(3, "ABC", 3, 1, lockCheckingChannel, null); Message<?> message2 = createMessage(5, "ABC", 3, 2, lockCheckingChannel, null); Message<?> message3 = createMessage(7, "ABC", 3, 3, lockCheckingChannel, null); this.aggregator.setReleaseLockBeforeSend(true); this.aggregator.handleMessage(message1); this.aggregator.handleMessage(message2); this.aggregator.handleMessage(message3); Message<?> reply = replyChannel.receive(10000); assertNotNull(reply); assertEquals(reply.getPayload(), 105); }
aggregator.setReleaseLockBeforeSend(this.releaseLockBeforeSend);
this.aggregator.setSendPartialResultOnExpiry(true); this.aggregator.setExpireGroupsUponTimeout(false); this.aggregator.setReleaseLockBeforeSend(true); QueueChannel replyChannel = new QueueChannel(); MessageChannel lockCheckingChannel = (m, to) -> {
aggregator.setReleaseLockBeforeSend(this.releaseLockBeforeSend);