【发布时间】:2021-08-10 09:09:33
【问题描述】:
这是原样代码。
public void send() throws IOException {
CloseableHttpResponse httpResponse = null;
CloseableHttpClient httpClient = null;
try {
HttpPost post = new HttpPost(url);
httpResponse = httpClient.execute(post);
} finally
{
closeapi(httpClient);
closeapi(httpResponse);
}
}
public static void closeapi(Closeable obj)
{
if (obj != null)
{
try
{
obj.close();
} catch (IOException e)
{
logger.error(LP.EXCEPTION, e);
}
}
}
我使用 feign 客户端更改了该代码。像这样。
**[MessageFeignClient.class]**
@FeignClient(
contextId = "messageClient",
url = "${url}",
name = "messageclient",
configuration = {FeignConfiguration.class, FeignRetryConfiguration.class},
primary = false
)
public interface MessageClient {
@PostMapping("write")
PushMessageResultRdo write(
@RequestHeader("Key1") String key1,
@RequestHeader("Key2") String key2,
@RequestBody PushMessage pushMessage);
@PostMapping("end")
PushMessageResultRdo end(
@RequestHeader("Key1") String key1,
@RequestHeader("Key2") String key2,
@RequestBody PushMessage pushMessage);
}
**[MessageService.java]**
@Slf4j
@Component
@RequiredArgsConstructor
public class MessageService {
private final MessageClient messageClient;
@Override
public PushResultRdo apply(PushMessage pushMessage) {
try {
return messageClient.write(pushMessage.getKey1(), pushMessage.getKey2(), pushMessage);
} catch (HystrixRuntimeException e) {
log.error(e);
}
return PushResultRdo.defaultError();
}
}
功能上没有问题。
但是使用feign调用是没有关闭httpclient的。
响应状态为 200。但请求处于活动状态。
我通过wireshark程序检查了tcp流。
当 messageClient.write 被调用时,之后我期望 TCP [FIN, ACK] 序列。
但是如果使用feign客户端,就没有关闭连接。
我想关闭请求连接。
请大家帮忙。 谢谢!
【问题讨论】:
-
Feign 使用持久连接。尝试更改其配置docs.spring.io/spring-cloud-openfeign/docs/current/reference/…
-
埃德加·多明格斯,谢谢~!我会尝试更改配置。
标签: java spring feign openfeign