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

相关推荐
Chan1614 小时前
【 Java八股文面试 | Redis篇 缓存问题、持久化、分布式锁 】
java·数据库·redis·后端·spring·缓存·面试
q***471814 小时前
Spring Boot 整合 Druid 并开启监控
java·spring boot·后端
Propeller14 小时前
【Android】模板化解决复杂场景的滑动冲突问题
android·java
渡我白衣14 小时前
深入 Linux 内核启动:从按下电源到用户登录的全景解剖
java·linux·运维·服务器·开发语言·c++·人工智能
七夜zippoe14 小时前
Java 9+模块化系统(JPMS)详解:设计与迁移实践
java·开发语言·maven·模块化·jmm
techzhi14 小时前
Intellij idea 注释模版
java·python·intellij-idea
bagadesu14 小时前
MySQL----case的用法
java·后端
what_201815 小时前
idea启动项目配置环境变量(nacos 命名空间)
java·开发语言
Slow菜鸟15 小时前
Java 开发环境安装指南(三) | Maven 安装
java
Fantasydg15 小时前
JSP学习
java·开发语言·学习