我正在使用如下的Eventbus,并使用vert.x调用HttpClient.postAbs()
public void start(Future<Void> fut) {
EventBus eb1 = MainAdminVx.serviceBack.getEventBus();
eb1.consumer("local-message-receiver", message -> {
HttpClient client = vertx.createHttpClient();
client.postAbs("http://external-server-address/test@xyz.com/activityIn?activityId=5", r -> {
r.bodyHandler(b -> System.out.println(b.toString() + r.statusCode() )
).exceptionHandler(t -> System.err.println(t.getMessage()));
})
.putHeader("content-length", "1000")
.putHeader("userId", "test@xyz.com")
.putHeader("Content-Type", "application/json")
.putHeader("Accept", "application/json")
.write("some text")
.exceptionHandler(System.err::println)
.end();
});
}
有什么我想念的吗?或者还有另一种方法可以做到这一点...因为我在postAbs中2分钟后得到了回复,同样的POST请求在邮递员中很快就会有效。
提前致谢!!!
答案 0 :(得分:0)
我们只需要设置
setChunked(真)
它就像一个魅力!!!
由于我已将内容长度设置为“1000”,因此服务器将等到收到1000个字节,即使您没有发送任何内容并在之后回复。它表示HTTP正文的确切字节长度。通常它用于HTTP 1.1,以便接收方知道当前响应/请求何时完成,因此连接可以重用于另一个请求。
那么什么是Chunked transfer:
分块传输编码是超文本传输协议(HTTP)1.1版中的数据传输机制,其中数据以一系列“块”发送。它使用Transfer-Encoding HTTP标头代替Content-Length标头,而协议的早期版本则需要该标头。由于未使用Content-Length标头,因此发送方在开始向接收方发送响应之前不需要知道内容的长度。发件人可以在知道该内容的总大小之前开始传输动态生成的内容。
或者,可以省略内容长度并且可以使用分块编码,或者如果两者都丢失,则在响应结束时必须关闭连接。
我希望这能帮助你理解Http块概念。