Gemfire 的 Http 响应无效?
Invalid Http Response for Gemfire?
enter image description here public class GemfireTest 扩展了 SecurityManager {
public static void main(String[] args) throws NameResolutionException, TypeMismatchException, QueryInvocationTargetException, FunctionDomainException, IOException {
System.setProperty("gemfire.locators", "localhost[8091]");
Properties properties = new Properties();
ServerLauncher serverLauncher = new ServerLauncher.Builder()
.setMemberName("server1")
.setServerPort(40404)
.set("start-locator", "localhost[8091]")
.build();
serverLauncher.start();
System.out.println(serverLauncher.status());
String restapi ="http://localhost:8091/gemfire-api/v1/";
// URLConnection urlConnection = new URL(restapi).openConnection();
try {
URL obj = new URL(restapi);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("accept","application/json");
int responseCode = con.getResponseCode();
System.out.println(responseCode);
// if (responseCode == HttpURLConnection.HTTP_OK) { // success
BufferedReader in = new BufferedReader(new InputStreamReader(
con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// print result
System.out.println("reason"+response.toString());
Server in C:\Users\xxx\IdeaProjects\Gemfire on DESKTOP-MRCV2EH[40404] as server1 is currently online.
Process ID: 2640
Uptime: 7 seconds
Geode Version: 9.5.1
Java Version: 1.8.0_171
Log File: C:\Users\xxx\IdeaProjects\Gemfire\server1.log
JVM Arguments: -Dgemfire.enable-cluster-configuration=true -Dgemfire.load-cluster-configuration-from-dir=false -Dgemfire.jmx-manager-bind-address=localhost -Djava.rmi.server.hostname=localhost -Dgemfire.launcher.registerSignalHandlers=true -Djava.awt.headless=true -javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.3.2\lib\idea_rt.jar=54053:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.3.2\bin -Dfile.encoding=UTF-8
获取响应代码:-1,无效的 Http 响应。
我该如何解决这个问题?
您的源代码中似乎缺少 GEODE_HOME
环境变量,服务器在启动期间需要它来找到启动 REST 所需的库 API ,特别是 install-dir/tools/Extensions/geode-web-api-n.n.n.war
。您可以在 Setup and Configuration.
中找到更多详细信息
希望这对您有所帮助。干杯。
我已经在本地测试了您的源代码(加上 one/two 小的修改),一切似乎都运行良好:
public static void main(String[] args) throws IOException {
Integer httpServicePort = 8080;
ServerLauncher serverLauncher =
new ServerLauncher.Builder()
.set("log-file", "")
.set("http-service-port", httpServicePort.toString())
.set("start-dev-rest-api", "true")
.set("http-service-bind-address", "localhost")
.setPdxReadSerialized(true)
.build();
serverLauncher.start();
System.out.println("REST server successfully started, press any key to stop it...");
String restapi ="http://localhost:" + httpServicePort + "/gemfire-api/v1/";
try {
URL obj = new URL(restapi);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("accept","application/json");
int responseCode = con.getResponseCode();
System.out.println("Response Code: " + responseCode);
if (responseCode == HttpURLConnection.HTTP_OK) { // success
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println("Response: " + response.toString());
}
} catch (Exception exception) {
exception.printStackTrace();
}
System.in.read();
serverLauncher.stop();
System.exit(0);
}
运行 上面的程序打印如下:
REST server successfully started, press any key to stop it...
Response Code: 200
Response: { "regions" : [ ]}
你是否正确设置了GEODE_HOME
环境变量?,执行curl
命令时使用的port
呢?,与你通过[=配置的数字相同吗? 15=] 属性?。
干杯。
enter image description here public class GemfireTest 扩展了 SecurityManager {
public static void main(String[] args) throws NameResolutionException, TypeMismatchException, QueryInvocationTargetException, FunctionDomainException, IOException {
System.setProperty("gemfire.locators", "localhost[8091]");
Properties properties = new Properties();
ServerLauncher serverLauncher = new ServerLauncher.Builder()
.setMemberName("server1")
.setServerPort(40404)
.set("start-locator", "localhost[8091]")
.build();
serverLauncher.start();
System.out.println(serverLauncher.status());
String restapi ="http://localhost:8091/gemfire-api/v1/";
// URLConnection urlConnection = new URL(restapi).openConnection();
try {
URL obj = new URL(restapi);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("accept","application/json");
int responseCode = con.getResponseCode();
System.out.println(responseCode);
// if (responseCode == HttpURLConnection.HTTP_OK) { // success
BufferedReader in = new BufferedReader(new InputStreamReader(
con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// print result
System.out.println("reason"+response.toString());
Server in C:\Users\xxx\IdeaProjects\Gemfire on DESKTOP-MRCV2EH[40404] as server1 is currently online. Process ID: 2640 Uptime: 7 seconds Geode Version: 9.5.1 Java Version: 1.8.0_171 Log File: C:\Users\xxx\IdeaProjects\Gemfire\server1.log JVM Arguments: -Dgemfire.enable-cluster-configuration=true -Dgemfire.load-cluster-configuration-from-dir=false -Dgemfire.jmx-manager-bind-address=localhost -Djava.rmi.server.hostname=localhost -Dgemfire.launcher.registerSignalHandlers=true -Djava.awt.headless=true -javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.3.2\lib\idea_rt.jar=54053:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.3.2\bin -Dfile.encoding=UTF-8
获取响应代码:-1,无效的 Http 响应。
我该如何解决这个问题?
您的源代码中似乎缺少 GEODE_HOME
环境变量,服务器在启动期间需要它来找到启动 REST 所需的库 API ,特别是 install-dir/tools/Extensions/geode-web-api-n.n.n.war
。您可以在 Setup and Configuration.
希望这对您有所帮助。干杯。
我已经在本地测试了您的源代码(加上 one/two 小的修改),一切似乎都运行良好:
public static void main(String[] args) throws IOException {
Integer httpServicePort = 8080;
ServerLauncher serverLauncher =
new ServerLauncher.Builder()
.set("log-file", "")
.set("http-service-port", httpServicePort.toString())
.set("start-dev-rest-api", "true")
.set("http-service-bind-address", "localhost")
.setPdxReadSerialized(true)
.build();
serverLauncher.start();
System.out.println("REST server successfully started, press any key to stop it...");
String restapi ="http://localhost:" + httpServicePort + "/gemfire-api/v1/";
try {
URL obj = new URL(restapi);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("accept","application/json");
int responseCode = con.getResponseCode();
System.out.println("Response Code: " + responseCode);
if (responseCode == HttpURLConnection.HTTP_OK) { // success
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println("Response: " + response.toString());
}
} catch (Exception exception) {
exception.printStackTrace();
}
System.in.read();
serverLauncher.stop();
System.exit(0);
}
运行 上面的程序打印如下:
REST server successfully started, press any key to stop it...
Response Code: 200
Response: { "regions" : [ ]}
你是否正确设置了GEODE_HOME
环境变量?,执行curl
命令时使用的port
呢?,与你通过[=配置的数字相同吗? 15=] 属性?。
干杯。