获取第三方接口的EventStream返回给前端,SpringBoot+Vue+WebFlux+SseEmitter

这篇具有很好参考价值的文章主要介绍了获取第三方接口的EventStream返回给前端,SpringBoot+Vue+WebFlux+SseEmitter。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

后端:

    private static SseEmitter sendEventStreamPost(String url, String jsonData){
        SseEmitter emitter = new SseEmitter();
        Mono.fromCallable(() -> {
                    WebClient.create(url)
                            .post()
                            .contentType(MediaType.APPLICATION_JSON)
                            .accept(MediaType.TEXT_EVENT_STREAM)
                            .body(BodyInserters.fromValue(jsonData))
                            .retrieve()
                            .bodyToFlux(byte[].class)
                            .doOnNext(data -> {
                                try {
                                    emitter.send(data);
                                } catch (IOException e) {
                                    log.error("Event Stream Exception:" + e);
                                }
                            })
                            .doOnError(error -> {
                                log.error("Event Stream Error:" + error);
                            })
                            .doOnComplete(() -> {
                                emitter.complete();
                            })
                            .subscribe();

                    return emitter;
                })
                .subscribeOn(Schedulers.boundedElastic())
                .subscribe();
        return emitter;
    }

其中曾踩了一些坑:
1.原本是bodyToFlux(String.class),结果没有返回也没有报错,排查了许久,最终改成bodyToFlux(byte[].class)
2.原本未使用Mono.fromCallable进行异步请求,结果其实是一次获取到完整的流再给前端,与长连接实时输出信息相悖。实际应该把SseEmitter返回给前端,异步调用接口对SseEmitter进行写入并且在完成后emitter.complete()关闭流。

前端,vue框架:

import { fetchEventSource } from '@microsoft/fetch-event-source'

methods: {
    test() {
      var data = {
        sendContent: "你好,你能帮我做些什么"
      }
      if ('EventSource' in window) {
        const url = 'http://xxx/api/help/chat/sendMsgStream'
        var _this = this
        fetchEventSource(url, {
          method: 'POST',
          headers: {
            "Content-Type": 'application/json',
            "Accept": "*/*"
          },
          body: JSON.stringify(data),
          onmessage(event) {
            console.info("event.data:", event.data);
            const eventData = event.data
            _this.msg += eventData
          },
          onerror(err) {
            console.log('err:',err)
          }
        })
      } else {
        console.log("error")
      }
    }
  }

其中msg绑定的是聊天窗口的机器人答复,目前前端代码并不完善,在eroor时并未断开连接,等解决了再编辑文章来源地址https://www.toymoban.com/news/detail-841628.html

到了这里,关于获取第三方接口的EventStream返回给前端,SpringBoot+Vue+WebFlux+SseEmitter的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • php第三方阿里云接口

    阿里云 OpenAPI 开发者门户

    2024年02月15日
    浏览(36)
  • Java记录第三方返回类型是image/webp后端如何接收并处理

    Java 调用第三方接口返回类型是 content-type: image/webp 导入的包 第一步 首先编写好请求 String url=\\\'接口地址\\\' //第三方接口 如果是http HttpURLConnection //https请求用下面这个 HttpsURLConnection connection=null; //URL 里面放接口地址 URL uri= new URL(url(接口地址)) //如果请求是GET url+\\\"?请求参数\\\'

    2024年02月15日
    浏览(47)
  • 如何获取第三方maven依赖信息?

     依赖信息查询方式:       1. maven仓库信息官网 https://mvnrepository.com/       2. mavensearch插件搜索 访问可能会比较慢  搜索你想要查找的依赖  点击你想要查找的依赖  打开是这个界面,点击对应版本号  复制底部的maven依赖即可 file-settings  settings-plugins(插件)  下载mave

    2024年02月09日
    浏览(43)
  • 【黑马头条之内容安全第三方接口】

    本笔记内容为黑马头条项目的文本-图片内容审核接口部分 目录 一、概述 二、准备工作 三、文本内容审核接口 四、图片审核接口 五、项目集成 内容安全是识别服务,支持对图片、视频、文本、语音等对象进行多样化场景检测,有效降低内容违规风险。 目前很多平台都支持

    2024年02月15日
    浏览(61)
  • 对接 Web Service第三方接口

    这次也是头一次接触对接第三方WebService接口,这技术都很老了,使用postman测试的时候还找了半天资料🤣。 一般来说第三方都会限制ip这些,需要注意的是,给到的接口地址是能用公网进行访问的哦。 1、拿到接口路径 http://111.111.11.1:111/services/infoWebService?wsdl 这个当然是不可

    2023年04月11日
    浏览(45)
  • SpringBoot案例 调用第三方接口传输数据

    最近再写调用三方接口传输数据的项目,这篇博客记录项目完成的过程,方便后续再碰到类似的项目可以快速上手 项目结构: 这里主要介绍HttpClient发送POST请求工具类和定时器的使用,mvc三层架构编码不做探究 pom.xml application-dev.yml Constast utils scheduled 该定时任务每10秒执行一

    2024年02月12日
    浏览(57)
  • 仅仅是调用第三方接口那么简单吗?

    最近有个项目需要本地处理之后,然后调用第三方接口,本来开始觉得很简单得事情,不就是调用第三方接口吗?但是却一波三折。 首先有了下面的第一版的设计。 这个设计很简单,也是最容易想到的。主要有下面几步 1、本地处理; 2、调用第三方接口; 3、本地日志打印

    2024年02月06日
    浏览(63)
  • 我调用第三方接口遇到的13大坑

    在实际工作中,我们经常需要在项目中调用第三方API接口,获取数据,或者上报数据,进行数据交换和通信。 那么,调用第三方API接口会遇到哪些问题?如何解决这些问题呢? 这篇文章就跟大家一起聊聊第三方API接口的话题,希望对你会有所帮助。   一般我们在第一次对接

    2023年04月16日
    浏览(56)
  • OpenAI 接口API的第三方代理

    OpenAI推出了针对开发者的API接口,这是供程序代码去调用的,不是面向普通人的。我们经常看到的国内版ChatGPT,就是对API接口的界面包装再出售会员。 目前,公开对外使用的是GPT-3.5模型的API接口,GPT-4模型的接口处于测试阶段,开发者需要申请权限加入等待列表,审核通过

    2024年02月07日
    浏览(42)
  • Java调用第三方http接口的常用方式

    前言 一、通过JDK网络类Java.net.HttpURLConnection 二、通过apache common封装好的HttpClient 三、通过Spring的RestTemplate 总结 今天项目需要接口互相调用,就看了一下这几个调用的方式 通过java.net包下的原生java.api提供的http请求 使用步骤: 通过统一的资源定位器(java.net.URL)获取连接器(java.

    2024年02月08日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包