public void removeSubscription()

in mqtt-cs/src/main/java/org/apache/rocketmq/mqtt/cs/session/match/MatchAction.java [129:155]


    public void removeSubscription(Session session, Set<Subscription> subscriptions) {
        String channelId = session.getChannelId();
        if (channelId == null || subscriptions == null || subscriptions.isEmpty()) {
            return;
        }
        for (Subscription subscription : subscriptions) {
            if (subscription.isRetry() || subscription.isP2p()) {
                continue;
            }
            String topicFilter = subscription.getTopicFilter();
            boolean isWildCard = TopicUtils.isWildCard(topicFilter);
            if (isWildCard) {
                trie.deleteNode(topicFilter, channelId);
                continue;
            }

            synchronized (topicCache) {
                Set<String> channelIdSet = topicCache.get(topicFilter);
                if (channelIdSet != null) {
                    channelIdSet.remove(channelId);
                    if (channelIdSet.isEmpty()) {
                        topicCache.remove(topicFilter);
                    }
                }
            }
        }
    }