java - Java net URL 无法正常工作,弄乱了 HTTP
问题描述
我将 Kafka 与 Avro 和 Schema Registry 一起使用。在向 Kafka 发布消息时,avro 序列化程序使用 java.net.URL 并执行 POST 以在模式注册表中注册 Avro 模式。当模式很大时,HTTP 请求会中断,套接字内容就会变得混乱。我不确定这是否与Mac有关。
在一个终端中,我使用了 NC 并执行了:
nc -lv 8102
在我的 ide (IntelliJ) 和命令行上,我执行了:
public class Main {
public static void main(String[] args) throws Exception {
var url = new URL("http://localhost:8102/subjects/local.something-something/versions");
var connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setDoInput(true);
connection.setRequestProperty("Content-Type", "application/vnd.schemaregistry.v1+json");
connection.setRequestProperty("Cache-Control", "no-cache");
connection.setRequestProperty("Pragma", "no-cache");
connection.setRequestProperty("User-Agent", "Java/11.0.11");
connection.setRequestProperty("Accept", "text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2");
connection.setRequestProperty("Content-Length", "67193");
connection.setUseCaches(false);
connection.setDoOutput(true);
var os = connection.getOutputStream();
var body = new byte[67193];
Arrays.fill(body, (byte) 'a');
os.write(body);
os.flush();
os.close();
connection.getResponseCode();
}
}
并且NC的输出有(我删除了一些'a'以便于可视化):
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPOST /subjects/local.something-something/versions HTTP/1.1
Content-Type: application/vnd.schemaregistry.v1+json
Cache-Control: no-cache
Pragma: no-cache
User-Agent: Java/11.0.11
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Host: localhost:8102
Connection: keep-alive
Content-Length: 67193
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
这是无效的,并且架构注册表返回 400
我正在使用Java 11采用 OpenJdk,也尝试过使用oracle JDK 和Correto,但没有成功。
有任何想法吗?
- 我不能扔掉 URL,它嵌入在 kafka-schema-registry-client 中
- 我使用curl来复制请求,那里没有问题。
解决方案
我找到了一个快速的解决方法,我将 jvm 设置为使用 ipv4,问题就消失了。
在 Gradle 上看起来像:
jvmArgs '-Djava.net.preferIPv4Stack=true'
推荐阅读
- python - Watson 字幕转换器 IndexError:列表超出范围
- mysql - NetSuite 保存的搜索:显示与子项匹配的行项,但也显示没有子项的行项?
- reactjs - 当 Url Typed 我需要在调用 api 时获取 react js 中的单个数据
- python - 使用 TypeScript 解析 Python 时如何仅获取 INDENT 和 DEDENT 标记?
- go - 如何将字段作为参数传递
- amazon-web-services - 将现有的 NBL 与 Nginx 控制器连接
- python-3.x - 尝试从 .yaml 文件安装 conda 环境时出现意外错误
- sql - Grafana:连接变量,从 sql 查询中检索
- react-native - Android软键盘取代绝对放置的组件或标题
- filepond - FilePond A11Y 问题