我有一个简单的 micronaut 应用程序。
我有两个单独的端点,其中执行的方法将使用客户端调用 API(我已经尝试了来自“java.net.http.HttpClient”和“io.micronaut.http.client.RxHttpClient”的 http 客户端,但是发生同样的问题)。
当您在启动应用程序后点击任何端点时,该函数将按预期执行,其中客户端调用外部 API 并将响应作为字符串检索。如果您尝试再次访问相同的端点,它将抛出:
“javax.net.ssl.SSLHandshakeException:收到致命警报:handshake_failure。”
我认为这不是 API 服务器端的问题,原因如下:
- 当我使用两个单独的外部 API 访问两个单独的端点时会发生此问题
- 请求第一次通过没问题
- 我可以在邮递员中毫无错误地使用相同的 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 错误?
有什么我想念的吗?