diff --git a/redisson/src/main/java/org/redisson/RedissonExecutorService.java b/redisson/src/main/java/org/redisson/RedissonExecutorService.java index cb3499683..6964ab8f3 100644 --- a/redisson/src/main/java/org/redisson/RedissonExecutorService.java +++ b/redisson/src/main/java/org/redisson/RedissonExecutorService.java @@ -474,8 +474,10 @@ public class RedissonExecutorService implements RScheduledExecutorService { public void shutdown() { queueTransferService.remove(getName()); remoteService.deregister(RemoteExecutorService.class); - workersTopic.removeListener(workersGroupListenerId); - + if (workersGroupListenerId > 0) { + workersTopic.removeListener(workersGroupListenerId); + } + commandExecutor.get(commandExecutor.evalWriteAsync(getName(), LongCodec.INSTANCE, RedisCommands.EVAL_VOID, "if redis.call('exists', KEYS[2]) == 0 then " + "if redis.call('get', KEYS[1]) == '0' or redis.call('exists', KEYS[1]) == 0 then " diff --git a/redisson/src/main/java/org/redisson/pubsub/PublishSubscribeService.java b/redisson/src/main/java/org/redisson/pubsub/PublishSubscribeService.java index 625b83798..6e64ebdc7 100644 --- a/redisson/src/main/java/org/redisson/pubsub/PublishSubscribeService.java +++ b/redisson/src/main/java/org/redisson/pubsub/PublishSubscribeService.java @@ -524,7 +524,7 @@ public class PublishSubscribeService { public void remove(MasterSlaveEntry entry) { entry2PubSubConnection.remove(entry); - name2entry.values().remove(entry); + name2entry.values().forEach(v -> v.remove(entry)); } public CompletableFuture unsubscribe(ChannelName channelName, PubSubType topicType) {