1

我有一个简单的 micronaut 应用程序。

我有两个单独的端点,其中执行的方法将使用客户端调用 API(我已经尝试了来自“java.net.http.HttpClient”和“io.micronaut.http.client.RxHttpClient”的 http 客户端,但是发生同样的问题)。

当您在启动应用程序后点击任何端点时,该函数将按预期执行,其中客户端调用外部 API 并将响应作为字符串检索。如果您尝试再次访问相同的端点,它将抛出:

“javax.net.ssl.SSLHandshakeException:收到致命警报:handshake_failure。”

我认为这不是 API 服务器端的问题,原因如下:

  1. 当我使用两个单独的外部 API 访问两个单独的端点时会发生此问题
  2. 请求第一次通过没问题
  3. 我可以在邮递员中毫无错误地使用相同的 API - 只是当我与客户端调用它们时才会出现问题。

我的控制器:

import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;
import io.micronaut.http.HttpResponse;


import javax.inject.Inject;
import java.io.IOException;

import static io.micronaut.http.HttpRequest.GET;

@Controller("/api")
public class DeckController {

    @Inject
    private DeckService deckService;

    @Get(value = "/drawRx")
    public  HttpResponse<Card> drawCardRx(){
        deckService.drawCardRx("ijhhxvxwn63g",1);
        return HttpResponse.ok();
    }
}

我的客户端调用 API 的服务之一:

public void drawCardRx(String deckId, int amount){

    final String newDeckUrl = "/deck/"+deckId+"/draw/?count="+amount;
    Disposable result = this.httpClient
            .retrieve( GET(newDeckUrl))
            .subscribe(data -> System.out.println(data));
    
    return;
}

就像我说的,当我第一次点击端点时,响应从服务器返回,没有问题。

我已经尝试了以下文章并遵循了这些步骤,但没有任何改进。

https://www.baeldung.com/java-ssl-handshake-failures

如何解决 javax.net.ssl.SSLHandshakeException 错误?

有什么我想念的吗?

4

0 回答 0