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);
}
}
}
}
}