首页 > 解决方案 > 在 Spring Boot 2.3.x 中使用 Jedis 3.6.0 时不支持流

问题描述

今天想用 Jedis 消费流,报这个错误:

java.lang.UnsupportedOperationException: Streams not supported using Jedis!
    at org.springframework.data.redis.connection.jedis.JedisConnection.streamCommands(JedisConnection.java:154) ~[spring-data-redis-2.3.9.RELEASE.jar:2.3.9.RELEASE]
    at org.springframework.data.redis.connection.DefaultedRedisConnection.xReadGroup(DefaultedRedisConnection.java:591) ~[spring-data-redis-2.3.9.RELEASE.jar:2.3.9.RELEASE]
    at org.springframework.data.redis.core.DefaultStreamOperations$4.inRedis(DefaultStreamOperations.java:310) ~[spring-data-redis-2.3.9.RELEASE.jar:2.3.9.RELEASE]
    at org.springframework.data.redis.core.DefaultStreamOperations$RecordDeserializingRedisCallback.doInRedis(DefaultStreamOperations.java:376) ~[spring-data-redis-2.3.9.RELEASE.jar:2.3.9.RELEASE]
    at org.springframework.data.redis.core.DefaultStreamOperations$RecordDeserializingRedisCallback.doInRedis(DefaultStreamOperations.java:371) ~[spring-data-redis-2.3.9.RELEASE.jar:2.3.9.RELEASE]
    at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:228) ~[spring-data-redis-2.3.9.RELEASE.jar:2.3.9.RELEASE]
    at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:188) ~[spring-data-redis-2.3.9.RELEASE.jar:2.3.9.RELEASE]
    at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:96) ~[spring-data-redis-2.3.9.RELEASE.jar:2.3.9.RELEASE]
    at org.springframework.data.redis.core.DefaultStreamOperations.read(DefaultStreamOperations.java:305) ~[spring-data-redis-2.3.9.RELEASE.jar:2.3.9.RELEASE]
    at org.springframework.data.redis.stream.DefaultStreamMessageListenerContainer.lambda$getReadFunction$3(DefaultStreamMessageListenerContainer.java:236) ~[spring-data-redis-2.3.9.RELEASE.jar:2.3.9.RELEASE]
    at org.springframework.data.redis.stream.StreamPollTask.doLoop(StreamPollTask.java:138) ~[spring-data-redis-2.3.9.RELEASE.jar:2.3.9.RELEASE]
    at org.springframework.data.redis.stream.StreamPollTask.run(StreamPollTask.java:123) ~[spring-data-redis-2.3.9.RELEASE.jar:2.3.9.RELEASE]
    at misc.config.async.pool.MdcTaskDecorator.lambda$decorate$0(MdcTaskDecorator.java:29) ~[classes/:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
    at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]

我搜索了我知道 Jedis 支持 Redis 流的文档。为什么这仍然告诉我不支持 Redis Stream?这是我在 Gradle 中定义的依赖项,此代码强制使用 3.6.0 版本的 Jedis:

resolutionStrategy {
            eachDependency { DependencyResolveDetails details ->
              
                if (details.requested.group == 'redis.clients') {
                    details.useVersion "3.6.0"
                }
                
            }
        }

此代码导入 Jedis:

api ("org.springframework.boot:spring-boot-starter-data-redis") {
            exclude group: "io.lettuce", module: "lettuce-core"
            exclude group: "redis.clients", module: "jedis"
        }
        api "redis.clients:jedis:3.6.0"

我应该怎么做才能避免这个问题?我试过这种方式来升级我的spring数据版本,如下所示:

api ("org.springframework.boot:spring-boot-starter-data-redis") {
            exclude group: "io.lettuce", module: "lettuce-core"
            exclude group: "org.springframework.data", module: "spring-data-redis"
        }
        api "org.springframework.data:spring-data-redis:2.5.0"

似乎会导致其他兼容问题。而现在我用2.3.10.RELEASE的已经是最新版的spring boot 2.3.x了。我应该升级到 2.4.x 吗?如果我升级到spring boot 2.4.x,没有兼容的稳定spring cloud版本可以匹配。

标签: javaredis

解决方案


您正在使用 spring-data-redis 2.3.9

流与 Jedis 的支持只能从2.5.0. 所以你必须至少使用2.5.0spring-data-redis 的版​​本。


推荐阅读