springboot整合webflux访问openai接口报错

报错信息:

复制代码
org.springframework.web.reactive.function.client.WebClientRequestException: 远程主机强迫关闭了一个现有的连接。; nested exception is java.io.IOException: 远程主机强迫关闭了一个现有的连接。
	at org.springframework.web.reactive.function.client.ExchangeFunctions$DefaultExchangeFunction.lambda$wrapException$9(ExchangeFunctions.java:141)
	Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
Error has been observed at the following site(s):
	*__checkpoint ⇢ Request to POST https://api.openai.com/v1/chat/completions [DefaultWebClient]
Original Stack Trace:
		at org.springframework.web.reactive.function.client.ExchangeFunctions$DefaultExchangeFunction.lambda$wrapException$9(ExchangeFunctions.java:141)
		at org.springframework.web.reactive.function.client.ExchangeFunctions$DefaultExchangeFunction$$Lambda$1634/1256286891.get(Unknown Source)
		at reactor.core.publisher.MonoErrorSupplied.subscribe(MonoErrorSupplied.java:55)
		at reactor.core.publisher.Mono.subscribe(Mono.java:4400)
		at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:103)
		at reactor.core.publisher.FluxPeek$PeekSubscriber.onError(FluxPeek.java:222)
		at reactor.core.publisher.FluxPeek$PeekSubscriber.onError(FluxPeek.java:222)
		at reactor.core.publisher.FluxPeek$PeekSubscriber.onError(FluxPeek.java:222)
		at reactor.core.publisher.MonoNext$NextSubscriber.onError(MonoNext.java:93)
		at reactor.core.publisher.MonoFlatMapMany$FlatMapManyMain.onError(MonoFlatMapMany.java:204)
		at reactor.core.publisher.SerializedSubscriber.onError(SerializedSubscriber.java:124)
		at reactor.core.publisher.FluxRetryWhen$RetryWhenMainSubscriber.whenError(FluxRetryWhen.java:225)
		at reactor.core.publisher.FluxRetryWhen$RetryWhenOtherSubscriber.onError(FluxRetryWhen.java:274)
		at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.drain(FluxConcatMap.java:415)
		at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.onNext(FluxConcatMap.java:251)
		at reactor.core.publisher.EmitterProcessor.

当你的应用程序在使用 HTTPS(SSL)时遇到 "远程主机强迫关闭了一个现有的连接" 的错误时,可能有多个原因导致这个问题。

解决方法(配置SSL证书)

  1. 生成证书和密钥存储库文件。您可以使用keytool命令生成证书和密钥存储库文件。例如,以下命令将生成一个名为keystore.p12的密钥存储库文件():

    keytool -genkeypair -alias mydomain -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore keystore.p12 -validity 3650 -ext SAN=DNS:api.openai.com

这里的 -ext SAN=DNS:api.openai.com 将 api.openai.com 添加到证书的 Subject Alternative Name。

如果你的服务需要支持多个子域名,可以考虑使用通配符证书,它能够匹配多个子域名。例如,*.openai.com 将匹配 api.openai.comwww.openai.com 等。

  1. 将keystore.p12文件拷贝到项目resources
  1. 在application.yml文件中配置ssl属性。例如,以下是一个application.properties文件的示例:

    server:
    port: 8009
    ssl:
    key-store: classpath:keystore.p12
    key-store-password: 你的密钥
    key-store-type: PKCS12
    key-alias: mydomain(这里是上面命令设置的别名)
    enabled-protocols: TLSv1.2
    ciphers: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

  2. 测试访问 https://localhost:8009/openai

相关推荐
Predestination王瀞潞1 天前
Java EE开发技术(Servlet整合JDBC银行管理系统-上)
java·servlet·java-ee·jdbc
寻星探路1 天前
Java EE初阶启程记13---JUC(java.util.concurrent) 的常见类
java·开发语言·java-ee
怪兽20141 天前
什么是 Redis?
java·数据库·redis·缓存·面试
Gu_yyqx1 天前
Java 队列
java
落日漫游1 天前
数据结构笔试核心考点
java·开发语言·算法
疯狂吧小飞牛1 天前
Lua C API 中的注册表介绍
java·c语言·lua
kyle~1 天前
C++--- override 关键字 强制编译器验证当前函数是否重写基类的虚函数
java·前端·c++
Hello.Reader1 天前
Flink 受管状态的自定义序列化原理、实践与可演进设计
java·网络·flink
让我上个超影吧1 天前
设计模式【工厂模式和策略模式】
java·设计模式·策略模式
fs哆哆1 天前
在VB.NET中,有没有 ?.这个运算符
java·开发语言·.net