/** 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 MessageGroup removeMessageFromGroup(Object key, Message<?> messageToRemove) {
   SimpleMessageGroup group = getMessageGroupInternal(key);
   group.remove(messageToRemove);
   return group;
 }