Comments (10)
grpc-java 1.59.1已发布,使用新版本spring boot时,可以指定grpc-java的版本到最新的,https://github.com/grpc/grpc-java/releases/tag/v1.59.1
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-all</artifactId>
<version>1.59.1</version>
<exclusions>
<exclusion>
<groupId>io.grpc</groupId>
<artifactId>grpc-xds</artifactId>
</exclusion>
</exclusions>
</dependency>
from spring-cloud-tencent.
我从3.1.5升到3.1.6也是同样的错误,退回3.1.5就全部OK。
from spring-cloud-tencent.
我也遇到错误,不过和上面两位的不同。
错误日志
com.tencent.polaris.api.exception.RetriableException: ERR-1007(NETWORK_ERROR): failed to load config file. namespace = herodotus, group = sct-quickstart-caller, file = application-default.yml, cause: UNKNOWN
at com.tencent.polaris.plugins.configuration.connector.polaris.PolarisConfigFileConnector.getConfigFile(PolarisConfigFileConnector.java:85) ~[polaris-configuration-connector-1.14.3.jar:na]
at com.tencent.polaris.configuration.client.internal.RemoteConfigFileRepo.lambda$doPull$0(RemoteConfigFileRepo.java:126) ~[polaris-configuration-client-1.14.3.jar:na]
at com.tencent.polaris.api.plugin.filter.ConfigFileFilterChain.execute(ConfigFileFilterChain.java:49) ~[polaris-plugin-api-1.14.3.jar:na]
at com.tencent.polaris.configuration.client.internal.RemoteConfigFileRepo.doPull(RemoteConfigFileRepo.java:126) ~[polaris-configuration-client-1.14.3.jar:na]
at com.tencent.polaris.configuration.client.internal.AbstractConfigFileRepo.pull(AbstractConfigFileRepo.java:46) ~[polaris-configuration-client-1.14.3.jar:na]
at com.tencent.polaris.configuration.client.internal.RemoteConfigFileRepo.<init>(RemoteConfigFileRepo.java:77) ~[polaris-configuration-client-1.14.3.jar:na]
at com.tencent.polaris.configuration.client.internal.ConfigFileManager.createConfigKVFile(ConfigFileManager.java:147) ~[polaris-configuration-client-1.14.3.jar:na]
at com.tencent.polaris.configuration.client.internal.ConfigFileManager.getConfigKVFile(ConfigFileManager.java:102) ~[polaris-configuration-client-1.14.3.jar:na]
at com.tencent.polaris.configuration.client.flow.DefaultConfigFileFlow.getConfigYamlFile(DefaultConfigFileFlow.java:65) ~[polaris-configuration-client-1.14.3.jar:na]
at com.tencent.polaris.configuration.client.DefaultConfigFileService.getConfigYamlFile(DefaultConfigFileService.java:76) ~[polaris-configuration-client-1.14.3.jar:na]
at com.tencent.polaris.configuration.client.DefaultConfigFileService.getConfigYamlFile(DefaultConfigFileService.java:70) ~[polaris-configuration-client-1.14.3.jar:na]
at com.tencent.cloud.polaris.config.adapter.PolarisConfigFileLocator.loadPolarisPropertySource(PolarisConfigFileLocator.java:223) ~[spring-cloud-starter-tencent-polaris-config-1.12.4-2022.0.4.jar:1.12.4-2022.0.4]
at com.tencent.cloud.polaris.config.adapter.PolarisConfigFileLocator.initInternalConfigFiles(PolarisConfigFileLocator.java:122) ~[spring-cloud-starter-tencent-polaris-config-1.12.4-2022.0.4.jar:1.12.4-2022.0.4]
at com.tencent.cloud.polaris.config.adapter.PolarisConfigFileLocator.locate(PolarisConfigFileLocator.java:88) ~[spring-cloud-starter-tencent-polaris-config-1.12.4-2022.0.4.jar:1.12.4-2022.0.4]
at org.springframework.cloud.bootstrap.config.PropertySourceLocator.locateCollection(PropertySourceLocator.java:50) ~[spring-cloud-context-4.0.4.jar:4.0.4]
at org.springframework.cloud.bootstrap.config.PropertySourceLocator.locateCollection(PropertySourceLocator.java:46) ~[spring-cloud-context-4.0.4.jar:4.0.4]
at org.springframework.cloud.bootstrap.config.PropertySourceBootstrapConfiguration.doInitialize(PropertySourceBootstrapConfiguration.java:121) ~[spring-cloud-context-4.0.4.jar:4.0.4]
at org.springframework.cloud.bootstrap.config.PropertySourceBootstrapConfiguration.initialize(PropertySourceBootstrapConfiguration.java:111) ~[spring-cloud-context-4.0.4.jar:4.0.4]
at org.springframework.boot.SpringApplication.applyInitializers(SpringApplication.java:611) ~[spring-boot-3.1.6.jar:3.1.6]
at org.springframework.boot.SpringApplication.prepareContext(SpringApplication.java:391) ~[spring-boot-3.1.6.jar:3.1.6]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) ~[spring-boot-3.1.6.jar:3.1.6]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306) ~[spring-boot-3.1.6.jar:3.1.6]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1295) ~[spring-boot-3.1.6.jar:3.1.6]
at com.example.SpringCloudTencentTestApplication.main(SpringCloudTencentTestApplication.java:12) ~[classes/:na]
Caused by: io.grpc.StatusRuntimeException: UNKNOWN
at io.grpc.stub.ClientCalls.toStatusRuntimeException(ClientCalls.java:271) ~[grpc-stub-1.50.0.jar:1.50.0]
at io.grpc.stub.ClientCalls.getUnchecked(ClientCalls.java:252) ~[grpc-stub-1.50.0.jar:1.50.0]
at io.grpc.stub.ClientCalls.blockingUnaryCall(ClientCalls.java:165) ~[grpc-stub-1.50.0.jar:1.50.0]
at com.tencent.polaris.specification.api.v1.config.manage.PolarisConfigGRPCGrpc$PolarisConfigGRPCBlockingStub.getConfigFile(PolarisConfigGRPCGrpc.java:461) ~[polaris-specification-1.4.0.jar:na]
at com.tencent.polaris.plugins.configuration.connector.polaris.PolarisConfigFileConnector.getConfigFile(PolarisConfigFileConnector.java:75) ~[polaris-configuration-connector-1.14.3.jar:na]
... 23 common frames omitted
Caused by: java.lang.UnsupportedOperationException: null
at io.grpc.netty.AbstractHttp2Headers.isEmpty(AbstractHttp2Headers.java:40) ~[grpc-netty-1.50.0.jar:1.50.0]
at io.netty.handler.codec.http2.DefaultHttp2ConnectionDecoder$FrameReadListener.onHeadersRead(DefaultHttp2ConnectionDecoder.java:419) ~[netty-codec-http2-4.1.101.Final.jar:4.1.101.Final]
at io.netty.handler.codec.http2.DefaultHttp2ConnectionDecoder$FrameReadListener.onHeadersRead(DefaultHttp2ConnectionDecoder.java:352) ~[netty-codec-http2-4.1.101.Final.jar:4.1.101.Final]
at io.netty.handler.codec.http2.Http2InboundFrameLogger$1.onHeadersRead(Http2InboundFrameLogger.java:56) ~[netty-codec-http2-4.1.101.Final.jar:4.1.101.Final]
at io.netty.handler.codec.http2.DefaultHttp2FrameReader$2.processFragment(DefaultHttp2FrameReader.java:476) ~[netty-codec-http2-4.1.101.Final.jar:4.1.101.Final]
at io.netty.handler.codec.http2.DefaultHttp2FrameReader.readHeadersFrame(DefaultHttp2FrameReader.java:484) ~[netty-codec-http2-4.1.101.Final.jar:4.1.101.Final]
at io.netty.handler.codec.http2.DefaultHttp2FrameReader.processPayloadState(DefaultHttp2FrameReader.java:253) ~[netty-codec-http2-4.1.101.Final.jar:4.1.101.Final]
at io.netty.handler.codec.http2.DefaultHttp2FrameReader.readFrame(DefaultHttp2FrameReader.java:159) ~[netty-codec-http2-4.1.101.Final.jar:4.1.101.Final]
at io.netty.handler.codec.http2.Http2InboundFrameLogger.readFrame(Http2InboundFrameLogger.java:41) ~[netty-codec-http2-4.1.101.Final.jar:4.1.101.Final]
at io.netty.handler.codec.http2.DefaultHttp2ConnectionDecoder.decodeFrame(DefaultHttp2ConnectionDecoder.java:188) ~[netty-codec-http2-4.1.101.Final.jar:4.1.101.Final]
at io.netty.handler.codec.http2.Http2ConnectionHandler$FrameDecoder.decode(Http2ConnectionHandler.java:393) ~[netty-codec-http2-4.1.101.Final.jar:4.1.101.Final]
at io.netty.handler.codec.http2.Http2ConnectionHandler.decode(Http2ConnectionHandler.java:453) ~[netty-codec-http2-4.1.101.Final.jar:4.1.101.Final]
at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:529) ~[netty-codec-4.1.101.Final.jar:4.1.101.Final]
at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:468) ~[netty-codec-4.1.101.Final.jar:4.1.101.Final]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:290) ~[netty-codec-4.1.101.Final.jar:4.1.101.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) ~[netty-transport-4.1.101.Final.jar:4.1.101.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.101.Final.jar:4.1.101.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[netty-transport-4.1.101.Final.jar:4.1.101.Final]
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) ~[netty-transport-4.1.101.Final.jar:4.1.101.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) ~[netty-transport-4.1.101.Final.jar:4.1.101.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.101.Final.jar:4.1.101.Final]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) ~[netty-transport-4.1.101.Final.jar:4.1.101.Final]
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) ~[netty-transport-4.1.101.Final.jar:4.1.101.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788) ~[netty-transport-4.1.101.Final.jar:4.1.101.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) ~[netty-transport-4.1.101.Final.jar:4.1.101.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) ~[netty-transport-4.1.101.Final.jar:4.1.101.Final]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) ~[netty-transport-4.1.101.Final.jar:4.1.101.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[netty-common-4.1.101.Final.jar:4.1.101.Final]
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.101.Final.jar:4.1.101.Final]
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.101.Final.jar:4.1.101.Final]
at java.base/java.lang.Thread.run(Thread.java:840) ~[na:na]
错误分析
最初还是以为是自己的代码没有更新及时,或者哪里配置不对,还参照官网文档,一步一步重新搭建了一个 spring boot 工程验证。这里面有一个需要注意的点。
最初我是各个包独立依赖,如下面所示:
<dependency>
<groupId>com.tencent.cloud</groupId>
<artifactId>spring-cloud-starter-tencent-polaris-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.tencent.cloud</groupId>
<artifactId>spring-cloud-starter-tencent-polaris-config</artifactId>
</dependency>
<dependency>
<groupId>com.tencent.cloud</groupId>
<artifactId>spring-cloud-starter-tencent-polaris-circuitbreaker</artifactId>
</dependency>
<dependency>
<groupId>com.tencent.cloud</groupId>
<artifactId>spring-cloud-starter-tencent-polaris-ratelimit</artifactId>
</dependency>
<dependency>
<groupId>com.tencent.cloud</groupId>
<artifactId>spring-cloud-starter-tencent-metadata-transfer</artifactId>
</dependency>
使用上面的依赖,只要 spring boot 从 3.1.5 改到 3.1.6 就会抛错。
但是官网文档中,建议依赖 spring-cloud-starter-tencent-all
。所以在验证的时候,又尝试改用依赖 spring-cloud-starter-tencent-all
。
经过测试发现使用 spring-cloud-starter-tencent-all
时,即使 spring boot 从 3.1.5 改到 3.1.6 也不会出错。因为 spring-cloud-starter-tencent-all
是 uber.jar,推测是部分 jar 被打入了 spring-cloud-starter-tencent-all
,即使更新 spring boot 版本,其中的依赖的部分 jar 并没有变化导致。
临时解决
按照上面的思路进行了部分跟踪,目前发现,升级 spring boot 版本会导致依赖的 netty 版本,从 4.1.100.Final 升级到 4.1.101.Final。这就导致了出错。
奈何能力有限,具体原因还不清楚,更不知道怎么改。目前能想到的临时解决办法:
- 将 spring cloud tencent 依赖修改为统一使用 依赖
spring-cloud-starter-tencent-all
- 手动降级 netty 版本,降到 4.1.100.Final 版本。
具体怎么解决就得麻烦项目大佬了。
from spring-cloud-tencent.
目前看是netty版本的冲突,可以现在polaris-java项目尝试升级,不过不确定这个netty版本能否兼容旧版本。
from spring-cloud-tencent.
目前看是netty版本的冲突,可以现在polaris-java项目尝试升级,不过不确定这个netty版本能否兼容旧版本。
是的。核心是 grpc 依赖了 netty。升级了 Spring Boot 版本,就将netty 的版本同步给升。之前初步跟了一下代码,是netty的一个类在新版有了一些变化,拿不到 content-type header 出现抛错。后面我也再详细研究研究。
from spring-cloud-tencent.
@herodotus-cloud 看了一下,是netty-codec-http2的4.1.101.Final版本中的
io.netty.handler.codec.http2.DefaultHttp2ConnectionDecoder.FrameReadListener#onHeadersRead(io.netty.channel.ChannelHandlerContext, int, io.netty.handler.codec.http2.Http2Headers, int, short, boolean, int, boolean)
方法多了一个下面这个代码的处理,而headers.isEmpty抛出了UnsupportedOperationException的异常。
} else if (validateHeaders && !headers.isEmpty()) {
// Need to check trailers don't contain pseudo headers. According to RFC 9113
// Trailers MUST NOT include pseudo-header fields (Section 8.3).
for (Iterator<Entry<CharSequence, CharSequence>> iterator =
headers.iterator(); iterator.hasNext();) {
CharSequence name = iterator.next().getKey();
if (Http2Headers.PseudoHeaderName.hasPseudoHeaderFormat(name)) {
throw streamError(stream.id(), PROTOCOL_ERROR,
"Found invalid Pseudo-Header in trailers: %s", name);
}
}
}
from spring-cloud-tencent.
@herodotus-cloud 看了一下,是netty-codec-http2的4.1.101.Final版本中的
io.netty.handler.codec.http2.DefaultHttp2ConnectionDecoder.FrameReadListener#onHeadersRead(io.netty.channel.ChannelHandlerContext, int, io.netty.handler.codec.http2.Http2Headers, int, short, boolean, int, boolean)
方法多了一个下面这个代码的处理,而headers.isEmpty抛出了UnsupportedOperationException的异常。} else if (validateHeaders && !headers.isEmpty()) { // Need to check trailers don't contain pseudo headers. According to RFC 9113 // Trailers MUST NOT include pseudo-header fields (Section 8.3). for (Iterator<Entry<CharSequence, CharSequence>> iterator = headers.iterator(); iterator.hasNext();) { CharSequence name = iterator.next().getKey(); if (Http2Headers.PseudoHeaderName.hasPseudoHeaderFormat(name)) { throw streamError(stream.id(), PROTOCOL_ERROR, "Found invalid Pseudo-Header in trailers: %s", name); } } }
对的,就是这里。4.1.100.Final 是没有 else if 这段代码的。
from spring-cloud-tencent.
@herodotus-cloud 看了一下,是netty-codec-http2的4.1.101.Final版本中的
io.netty.handler.codec.http2.DefaultHttp2ConnectionDecoder.FrameReadListener#onHeadersRead(io.netty.channel.ChannelHandlerContext, int, io.netty.handler.codec.http2.Http2Headers, int, short, boolean, int, boolean)
方法多了一个下面这个代码的处理,而headers.isEmpty抛出了UnsupportedOperationException的异常。} else if (validateHeaders && !headers.isEmpty()) { // Need to check trailers don't contain pseudo headers. According to RFC 9113 // Trailers MUST NOT include pseudo-header fields (Section 8.3). for (Iterator<Entry<CharSequence, CharSequence>> iterator = headers.iterator(); iterator.hasNext();) { CharSequence name = iterator.next().getKey(); if (Http2Headers.PseudoHeaderName.hasPseudoHeaderFormat(name)) { throw streamError(stream.id(), PROTOCOL_ERROR, "Found invalid Pseudo-Header in trailers: %s", name); } } }
应该是 Netty 为了解决这个问题 grpc/grpc-java#13647,所以在 Netty 4.1.101 Final 中增加了 else if 这个判断。
而 grpc 中,目前是不支持 isEmpty 这个操作的。
from spring-cloud-tencent.
看了一下grpc-java的社区,这个问题已经修复了,后面就等发布相应的更新。grpc/grpc-java#10663
from spring-cloud-tencent.
看了一下grpc-java的社区,这个问题已经修复了,后面就等发布相应的更新。grpc/grpc-java#10663
哦,好的。感谢!辛苦啦。
from spring-cloud-tencent.
Related Issues (20)
- 希望能适配springboot3.2.x和springcloud2023.0.x HOT 6
- 关于分布式事务 seata支持polarismesh的pr被关闭了 希望可以加快事务的融合 缺了事务支持也没法很好的迁移到sct体系来
- 升级 Grpc-Java 版本后,启动仍旧报错。ERR-1007(NETWORK_ERROR) HOT 1
- 增加服务间调用鉴权功能 HOT 1
- 动态路由,变量匹配模式不生效 HOT 35
- 加载每个分组的默认配置文件
- spring-cloud-tencent规则路由未匹配上不报错问题 HOT 4
- 应用重启了,没有删除老的ip,可能是De-registering未触发? HOT 2
- spring.cloud.polaris.stat.enabled=false时,Prometheus的httpserver可能存在临时开启的问题
- org.springframework.boot.autoconfigure.AutoConfiguration.imports里面的类无法自动配置了吗? HOT 6
- K8S微服务grpc协议链接问题 HOT 3
- 服务上线下时,心跳检查抛出异常 HOT 3
- 依赖的ploaris-java 1.14.3版本引入的okio 1.7.x版本与spirng-cloud 的okhttp3依赖的okio 2.8.0版本冲突,启动不成功 HOT 3
- 🚀 We start Spring Cloud 2023 support work!!! HOT 1
- restTemplateCustomizer bean 冲突导致服务无法正常启动 HOT 28
- 1.13.0-2022.0.4 与 Spring Cloud 2022.0.5 不兼容 HOT 1
- PolarisFeignCircuitBreakerTargeter 无法注入,Feign 调用抛出 NullPointException HOT 5
- SCG和Zuul支持传递原始HTTP header
- 北极星别名功能支持
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from spring-cloud-tencent.