java - 在 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版本可以匹配。
解决方案
您正在使用 spring-data-redis 2.3.9
。
流与 Jedis 的支持只能从2.5.0
. 所以你必须至少使用2.5.0
spring-data-redis 的版本。
推荐阅读
- c - 为什么我无法读取文件中的文本?
- python - 尝试在 django 管理模型操作中使用 django celery 导出字段但没有得到响应
- sql - 蜂巢阵列
- android - 有没有办法访问 DJI Pilot android 应用程序的源代码?
- sql - Write-SqlTableData 中途出现 ConnectionToServerFailed 失败
- c++ - 如果在 C++ 中为 null,则回退值
- sql-server - 如何计算每组具有特定值的元组数?
- c# - 已向 commandmanager 注册命令,但未触发
- counting-sort - 两个代码有何不同?,当运行 code1 给出 TLE 错误但第二个不给出 . 基于 0(n) 的解决方案
- javascript - 如何用 webpack 和 babel 做 $( document ).ready() ?