{"record":{"id":"471499f951f02796","repo":"redis/jedis","slug":"blocking-pub-sub-operations-are-not-supported-on-t-471499","errorCode":null,"errorMessage":"Blocking pub/sub operations are not supported on token-based authentication enabled connections with RESP2 protocol!","messagePattern":"Blocking pub/sub operations are not supported on token-based authentication enabled connections with RESP2 protocol!","errorType":"exception","errorClass":"JedisException","httpStatus":null,"severity":"error","filePath":"src/main/java/redis/clients/jedis/JedisShardedPubSubBase.java","lineNumber":47,"sourceCode":"  }\n\n  public final void sunsubscribe() {\n    sendAndFlushCommand(Command.SUNSUBSCRIBE);\n  }\n\n  public final void sunsubscribe(T... channels) {\n    sendAndFlushCommand(Command.SUNSUBSCRIBE, channels);\n  }\n\n  public final void ssubscribe(T... channels) {\n    checkConnectionSuitableForPubSub();\n    sendAndFlushCommand(Command.SSUBSCRIBE, channels);\n  }\n\n  private void checkConnectionSuitableForPubSub() {\n    if (authenticator.client.getRedisProtocol() != RedisProtocol.RESP3\n        && authenticator.client.isTokenBasedAuthenticationEnabled()) {\n      throw new JedisException(\n          \"Blocking pub/sub operations are not supported on token-based authentication enabled connections with RESP2 protocol!\");\n    }\n  }\n\n  public final boolean isSubscribed() {\n    return subscribedChannels > 0;\n  }\n\n  public final int getSubscribedChannels() {\n    return subscribedChannels;\n  }\n\n  public final void proceed(Connection client, T... channels) {\n    authenticator.registerForAuthentication(client);\n    authenticator.client.setTimeoutInfinite();\n    authenticator.client.setActiveSubscription(true);\n    try {\n      ssubscribe(channels);","sourceCodeStart":29,"sourceCodeEnd":65,"githubUrl":"https://github.com/redis/jedis/blob/6dac31d4c224fb3257c216f3985340c6f500cdcb/src/main/java/redis/clients/jedis/JedisShardedPubSubBase.java#L29-L65","documentation":"JedisShardedPubSubBase.checkConnectionSuitableForPubSub() rejects blocking sharded pub/sub (SSUBSCRIBE) on connections that use token-based authentication together with the RESP2 protocol. RESP3 is required for the push/notification machinery used with token auth, so blocking on RESP2 + token auth is unsupported and throws this JedisException before subscribing.","triggerScenarios":"Calling ssubscribe() on a client whose connection has isTokenBasedAuthenticationEnabled() == true while getRedisProtocol() is RESP2 (or null, treated as RESP2).","commonSituations":"Clients configured for RESP2 (legacy default or explicit protocol(RedisProtocol.RESP2)) connecting to Redis 7+/managed Redis with token/IAM-based auth enabled.","solutions":["Switch the client to RESP3 via the protocol configuration option.","Disable token-based authentication (use plain password ACL auth) if RESP2 must stay.","Upgrade to a Redis server/client combination where RESP3 + token auth is supported.","Use non-blocking sharded pub/sub alternatives if available in your Jedis version."],"exampleFix":"// before\nRedisClient client = RedisClient.builder()\n    .protocol(RedisProtocol.RESP2)\n    .authTokenConfig(...)   // token auth + RESP2 -> error on ssubscribe\n    .build();\n// after\nRedisClient client = RedisClient.builder()\n    .protocol(RedisProtocol.RESP3)\n    .authTokenConfig(...)\n    .build();","handlingStrategy":"validation","validationCode":"boolean canShardedSubscribe(RedisProtocol proto, boolean tokenAuth) {\n  return proto == RedisProtocol.RESP3 || !tokenAuth;\n}","typeGuard":"boolean supportsBlockingPubSub(Connection c) {\n  return c.getRedisProtocol() == RedisProtocol.RESP3\n      || !c.isTokenBasedAuthenticationEnabled();\n}","tryCatchPattern":"try {\n  pubSub.ssubscribe(jedis, channel);\n} catch (JedisException e) {\n  if (e.getMessage().contains(\"Blocking pub/sub operations are not supported\")) {\n    // rebuild client with RESP3 or disable token auth\n  } else throw e;\n}","preventionTips":["Prefer RESP3 whenever token-based authentication is enabled.","Document the RESP2+tokenAuth incompatibility in team config guides.","Add a startup assertion validating protocol/auth combination.","Check client builder config in CI before deploying pub/sub workloads."],"tags":["pubsub","resp3","token-based-authentication","configuration"],"backgroundTag":"unsupported-operation","analyzedSha":"6dac31d4c224fb3257c216f3985340c6f500cdcb","analyzedAt":"2026-09-08T04:55:01.204Z","contentChangedAt":"2026-09-08T04:55:01.204Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}