当前位置: 首页 > 知识库问答 >
问题:

如何关闭虚假客户请求?

朱高丽
2023-03-14

这是原样代码。

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);
        }
    }
 }

我用假客户机修改了代码。像这样。

**[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();
    }
}

从功能上来说,没有问题。

有人帮忙吗,拜托。谢谢!

共有1个答案

锺离韬
2023-03-14

这是一个有用的方法,但我认为这不是一个好的解决办法。

我想出了假装的选择。

[HttpClientFeignConfiguration.class]

this.connectionManagerTimer.schedule(new TimerTask() {
    public void run() {
       connectionManager.closeExpiredConnections();
    }
}, 30000L, (long)httpClientProperties.getConnectionTimerRepeat());
if (timeToLive > 0L) {
    long deadline = this.created + timeUnit.toMillis(timeToLive);
    this.validityDeadline = deadline > 0L ? deadline : 9223372036854775807L;
} else {
    this.validityDeadline = 9223372036854775807L;
}
feign:
  httpclient:
    timeToLive: 30
#    timeToLiveUnit : MILLISECONDS
 类似资料:
  • 我启动一个客户端来连接远程服务器。这涉及到大量的计算。则客户端意外断开连接。然而,客户端的计算仍然在远程服务器上运行。有办法关闭它吗?

  • 我试图结合2个或更多的服务,我想检查他们的状态,并返回自定义响应。例如,其中一个返回200,另一个返回500、404、400等。在这种情况下,我想返回空列表。下面的示例仅在返回200的所有服务时有效

  • 冒充客户 客户端的控制器 } 编辑3:我添加了功能区 我的服务应用程序和我的api是使用虚假客户机。不幸的是,我仍然有同样的问题。我已经刷新和重建了一切。 编辑4:我已经为这个问题创建了一个GitHub项目。 输入输入模块使用输入格式和输入解析模块作为假客户机来验证输入字符串的长度和解析/打印项。我一直使用字母表作为输入,所以输入参数的最小长度设置为26。input-format在端口8080上运

  • 我有一个错误,当我注入feignClient接口在我的服务。这是我使用的Spring引导和Spring云版本: 组织。springframework。启动:spring启动程序父级:2.0.6。发布spring云版本:Finchley。SR2 但是当我在我的类服务中创建一个虚假客户端bean时,它就工作了。 创建客户外部客户端: 我把这个假冒的客户注入军队 输出

  • 对于一个有多个feign客户端连接到同一个外部组件的应用程序,我们需要一个共享的断路器。 详细解释: 当提供服务关闭时,所有3个客户端都应该停止发送。因为所有请求都应该失败。是否可能所有3个客户共用同一个断路器?

  • 故事是这样的,我有一个远程服务器和一个防火墙后面的客户端。客户端由netty实现,它将建立一个与远程服务器的保活连接。如果200秒内通道中没有消息传输,防火墙将重置连接到远程服务器端的连接,但客户端没有收到任何tcp数据包(例如RST包),因此客户端认为此连接是活的,而事实并非如此。那么如何在防火墙错误处理此保活连接之前强制关闭不寻常的连接呢?顺便说一句:我无法配置防火墙