/** Add a Message to the group with the provided group ID. */ public MessageGroup addMessageToGroup(Object groupId, Message<?> message) { Assert.notNull(groupId, "'groupId' must not be null"); Assert.notNull(message, "'message' must not be null"); // add message as is to the MG accessible by the caller SimpleMessageGroup messageGroup = this.getSimpleMessageGroup(this.getMessageGroup(groupId)); messageGroup.add(message); // enrich Message with additional headers and add it to MS Message<?> enrichedMessage = this.enrichMessage(message); this.addMessage(enrichedMessage); // build raw MessageGroup and add enriched Message to it SimpleMessageGroup rawGroup = this.buildMessageGroup(groupId, true); rawGroup.add(enrichedMessage); // store MessageGroupMetadata built from enriched MG this.doStore(MESSAGE_GROUP_KEY_PREFIX + groupId, new MessageGroupMetadata(rawGroup)); // return clean MG return messageGroup; }
private SimpleMessageGroup buildMessageGroup(Object groupId, boolean raw) { Assert.notNull(groupId, "'groupId' must not be null"); Object mgm = this.doRetrieve(MESSAGE_GROUP_KEY_PREFIX + groupId); if (mgm != null) { Assert.isInstanceOf(MessageGroupMetadata.class, mgm); MessageGroupMetadata messageGroupMetadata = (MessageGroupMetadata) mgm; ArrayList<Message<?>> messages = new ArrayList<Message<?>>(); Iterator<UUID> messageIds = messageGroupMetadata.messageIdIterator(); while (messageIds.hasNext()) { if (raw) { messages.add(this.getRawMessage(messageIds.next())); } else { messages.add(this.getMessage(messageIds.next())); } } SimpleMessageGroup messageGroup = new SimpleMessageGroup( messages, groupId, messageGroupMetadata.getTimestamp(), messageGroupMetadata.isComplete()); messageGroup.setLastReleasedMessageSequenceNumber( messageGroupMetadata.getLastReleasedMessageSequenceNumber()); return messageGroup; } else { return new SimpleMessageGroup(groupId); } }
private SimpleMessageGroup normalizeSimpleMessageGroup(SimpleMessageGroup messageGroup) { SimpleMessageGroup normalizedGroup = new SimpleMessageGroup(messageGroup.getGroupId()); for (Message<?> message : messageGroup.getMessages()) { Message<?> normailizedMessage = this.normalizeMessage(message); normalizedGroup.add(normailizedMessage); } return normalizedGroup; }
public MessageGroup addMessageToGroup(Object groupId, Message<?> message) { if (!groupUpperBound.tryAcquire(0)) { throw new MessagingException( this.getClass().getSimpleName() + " was out of capacity at, try constructing it with a larger capacity."); } SimpleMessageGroup group = getMessageGroupInternal(groupId); group.add(message); return group; }
/** Remove a Message from the group with the provided group ID. */ public MessageGroup removeMessageFromGroup(Object groupId, Message<?> messageToRemove) { Assert.notNull(groupId, "'groupId' must not be null"); Assert.notNull(messageToRemove, "'messageToRemove' must not be null"); // build raw MG SimpleMessageGroup rawGroup = this.buildMessageGroup(groupId, true); // create a clean instance of SimpleMessageGroup messageGroup = this.normalizeSimpleMessageGroup(rawGroup); for (Message<?> message : rawGroup.getMessages()) { if (message.getHeaders().getId().equals(messageToRemove.getHeaders().getId())) { rawGroup.remove(message); } } this.removeMessage(messageToRemove.getHeaders().getId()); this.doStore(MESSAGE_GROUP_KEY_PREFIX + groupId, new MessageGroupMetadata(rawGroup)); messageGroup = this.getSimpleMessageGroup(this.getMessageGroup(groupId)); return messageGroup; }
public void setLastReleasedSequenceNumberForGroup(Object groupId, int sequenceNumber) { Assert.notNull(groupId, "'groupId' must not be null"); SimpleMessageGroup messageGroup = this.buildMessageGroup(groupId, true); messageGroup.setLastReleasedMessageSequenceNumber(sequenceNumber); this.doStore(MESSAGE_GROUP_KEY_PREFIX + groupId, new MessageGroupMetadata(messageGroup)); }
public void completeGroup(Object groupId) { Assert.notNull(groupId, "'groupId' must not be null"); SimpleMessageGroup messageGroup = this.buildMessageGroup(groupId, true); messageGroup.complete(); this.doStore(MESSAGE_GROUP_KEY_PREFIX + groupId, new MessageGroupMetadata(messageGroup)); }
public void completeGroup(Object groupId) { SimpleMessageGroup group = getMessageGroupInternal(groupId); group.complete(); }
public void setLastReleasedSequenceNumberForGroup(Object groupId, int sequenceNumber) { SimpleMessageGroup group = getMessageGroupInternal(groupId); group.setLastReleasedMessageSequenceNumber(sequenceNumber); }
public MessageGroup removeMessageFromGroup(Object key, Message<?> messageToRemove) { SimpleMessageGroup group = getMessageGroupInternal(key); group.remove(messageToRemove); return group; }