Sva*_*kas 5 performance spring resttemplate spring-boot postman
最新编辑
经过对许多不同服务的多次测试后,我怀疑挂起是标题的原因。也许是内容长度标题。但是我不知道为什么它会这样。我非常需要建议。我尝试使用返回较少标头的服务并且它不会挂起。
我有一个奇怪的问题。我正在使用 Resttemplate 通过 GET 请求连接到另一个服务。但是,在发送请求后,如果我使用自定义 POJO 作为 ResponseEntity,则需要大约 30 秒才能看到响应。如果我使用 String 作为 ResponseEntity 发送它,它会快速响应(最多 1 秒)。我想知道这可能是什么原因。响应格式:
{
"data": [
{
"email": "eskaferas@gmail.com",
"firstName": "Seras",
"lastName": "Meras"
},
{
"email": "Soras@gmail.com",
"firstName": "Oras",
"lastName": "Moras"
},
{
"email": "bzbzb@gmail.com",
"firstName": "hello",
"lastName": "bye"
},
{
"email": "lrc@gmail.com",
"firstName": "Seras",
"lastName": "Meras"
}
],
"message": "Success"
}
Run Code Online (Sandbox Code Playgroud)
我的POJO:
public class ArrayResponsePojo {
private User[] data;
private String message;
public User[] getData() {
return data;
}
public void setData(User[] data) {
this.data = data;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public ArrayResponsePojo(){
}
}
Run Code Online (Sandbox Code Playgroud)
用户类:
public class User {
private String email;
private String firstName;
private String lastName;
public User(){
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
Run Code Online (Sandbox Code Playgroud)
获取方法:
@GetMapping("/todos/{toDoNoteId}/users")
public ResponseEntity getNotesUsersTest(@PathVariable int toDoNoteId) {
ToDoNote note = toDoNoteService.getToDoNoteById(toDoNoteId);
if(note==null) {
throw new ToDoNoteNotFoundException("Note with id "+ toDoNoteId + " not found");
}
RestTemplate restTemplate = new RestTemplate();
final String uri = "http://friend:5000/users";
try {
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> entity = new HttpEntity<String>("parameters", requestHeaders);
ResponseEntity<ArrayResponsePojo> result = restTemplate.exchange(uri, HttpMethod.GET,entity, ArrayResponsePojo.class);
return result;
}
catch (HttpClientErrorException ex) {
return ResponseEntity.status(ex.getRawStatusCode()).headers(ex.getResponseHeaders())
.body(ex.getResponseBodyAsString());
}
}
Run Code Online (Sandbox Code Playgroud)
欢迎任何想法。我真的很感激你的帮助。链接到我以前的问题也许它是链接的?如果不是因为速度慢,这个问题就解决了。错误“无法提取响应:找不到适合响应类型的 HttpMessageConverter ... 和内容类型 [application/json]”
编辑 我注意到它在浏览器中响应非常快。但是我正在使用 Postman 并且使用 Postman 速度非常慢。在这一点上我真的很迷茫,因为没有抛出任何错误或任何东西。
编辑 2 我从调试器中唯一能看到的是它在方法 afterExecute(task,throwed); 上挂了很长时间;在类 java.util.concurrent.ThreadPoolExecutor 中。这真的很令人沮丧:(
编辑 3 我认为它与线程有关,但第二次运行调试它挂在 java.util.concurrent.LockSupport 类中的不同方法上,称为
public static void park(Object blocker) {
Thread t = Thread.currentThread();
setBlocker(t, blocker);
UNSAFE.park(false, 0L);
setBlocker(t, null);
}
Run Code Online (Sandbox Code Playgroud)
但我不明白什么可能是错的,大约需要 30 秒......实际上需要一整分钟。如果您在响应实体和 restTemplate 中传递 String 而不是我的自定义 POJO,为什么响应会正常工作。
另一个编辑 我尝试使用 curl 获取响应,它获取标头获取响应,然后挂起一分钟。我不确定那时会发生什么。一分钟后,它退出并显示消息“curl: (18) transfer closed with 79 bytes to read”
已经尝试设置读取和连接超时没有帮助,尝试连接到不同类型的 POJO 响应的不同服务,它仍然相同。
归档时间: |
|
查看次数: |
1151 次 |
最近记录: |