SpringBoot流式响应接口
背景:做AI搜索功能, 需要封装AI提供的一个流式接口, 并且同样以流式接口的的形式给到前端
版本
- SpringBoot。2.3.2.RELEASE
依赖
<dependency>
<groupId>io.projectreactor.netty</groupId>
<artifactId>reactor-netty</artifactId>
<version>0.9.10.RELEASE</version>
</dependency>
- 依赖reactor-netty是为了使用reactor.netty.http.client.HttpClient调用AI接口
代码
import com.alibaba.fastjson.JSON;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import reactor.netty.http.client.HttpClient;
import java.io.IOException;
import java.time.Duration;
@RestController
@RequestMapping("stream")
public class StreamController {
@GetMapping(value = "/streamFlux", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<String> streamFlux(Object request) {
return HttpClient.create().post()
.uri("")
.send((req, out) -> out.sendString(Mono.just(JSON.toJSONString(request)))).responseContent().asString()
// 如果 10 秒内没有任何数据,则超时
.timeout(Duration.ofSeconds(1)).doOnNext(next -> {
System.out.println(next);
}).doOnComplete(() -> {
System.out.println("doOnComplete");
});
}
}
- produces = MediaType.TEXT_EVENT_STREAM_VALUE。会自动在返回中加入前缀data: 和 后缀\n\n

浙公网安备 33010602011771号