diff --git a/redisson/src/main/java/org/redisson/cluster/ClusterConnectionManager.java b/redisson/src/main/java/org/redisson/cluster/ClusterConnectionManager.java index ff3778150..71c9a02ae 100644 --- a/redisson/src/main/java/org/redisson/cluster/ClusterConnectionManager.java +++ b/redisson/src/main/java/org/redisson/cluster/ClusterConnectionManager.java @@ -169,7 +169,11 @@ public class ClusterConnectionManager extends MasterSlaveConnectionManager { } } - subscribeService.detectSharding(); + if (cfg.getShardedSubscriptionMode() == ShardedSubscriptionMode.AUTO) { + subscribeService.detectSharding(); + } else if (cfg.getShardedSubscriptionMode() == ShardedSubscriptionMode.ON) { + subscribeService.setShardingSupported(true); + } scheduleClusterChangeCheck(cfg); } diff --git a/redisson/src/main/java/org/redisson/config/ClusterServersConfig.java b/redisson/src/main/java/org/redisson/config/ClusterServersConfig.java index fdc7a32f8..831d893cd 100644 --- a/redisson/src/main/java/org/redisson/config/ClusterServersConfig.java +++ b/redisson/src/main/java/org/redisson/config/ClusterServersConfig.java @@ -45,6 +45,8 @@ public class ClusterServersConfig extends BaseMasterSlaveServersConfig * Default is true * - * @param checkSlotsCoverage - boolean value + * @param checkSlotsCoverage boolean value * @return config */ public ClusterServersConfig setCheckSlotsCoverage(boolean checkSlotsCoverage) { @@ -128,13 +131,28 @@ public class ClusterServersConfig extends BaseMasterSlaveServersConfig + * Default is AUTO + * + * @param shardedSubscriptionMode param + * @return config + */ + public ClusterServersConfig setShardedSubscriptionMode(ShardedSubscriptionMode shardedSubscriptionMode) { + this.shardedSubscriptionMode = shardedSubscriptionMode; + return this; + } } diff --git a/redisson/src/main/java/org/redisson/config/ShardedSubscriptionMode.java b/redisson/src/main/java/org/redisson/config/ShardedSubscriptionMode.java new file mode 100644 index 000000000..a7f79c494 --- /dev/null +++ b/redisson/src/main/java/org/redisson/config/ShardedSubscriptionMode.java @@ -0,0 +1,37 @@ +/** + * Copyright (c) 2013-2024 Nikita Koksharov + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.redisson.config; + +/** + * + * @author Nikita Koksharov + * + */ +public enum ShardedSubscriptionMode { + + /** + * Subscribe to slave nodes + */ + AUTO, + + /** + * Subscribe to master node + */ + ON, + + OFF + +} diff --git a/redisson/src/main/java/org/redisson/pubsub/PublishSubscribeService.java b/redisson/src/main/java/org/redisson/pubsub/PublishSubscribeService.java index 5a2011054..2fd8a1b7e 100644 --- a/redisson/src/main/java/org/redisson/pubsub/PublishSubscribeService.java +++ b/redisson/src/main/java/org/redisson/pubsub/PublishSubscribeService.java @@ -1015,7 +1015,7 @@ public class PublishSubscribeService { RedisConnection c = entry.connectionWriteOp(null).join(); try { c.sync(RedisCommands.PUBSUB_SHARDNUMSUB); - shardingSupported = true; + setShardingSupported(true); } catch (Exception e) { // skip } finally { @@ -1023,6 +1023,10 @@ public class PublishSubscribeService { } } + public void setShardingSupported(boolean shardingSupported) { + this.shardingSupported = shardingSupported; + } + public boolean isShardingSupported() { return shardingSupported; }