JAVA设计模式-监听者模式

什么是监听者模式

监听器模式是一种观察者模式的扩展,也被称为发布-订阅模式。在监听器模式中,存在两类角色:事件源(Event Source)和监听器(Listener)。事件源负责产生事件,而监听器负责监听事件的发生并采取相应的行动。当事件源触发事件时,所有注册了对应类型监听器的对象都会得到通知,然后执行相应的操作。

应用背景

1.封装一个AI-GPT工具包,集成国内大模型,实现流式聊天
2.作为工具包不能依赖springboot-web,也就是不能把HttpServletResponse当做参数传递

方案

把监听者当做一个参数传入工具包,监听整个流的输出

调用方

public Text2TextStreamObserver streamOutputResposeOberverBuild(ResponseBodyEmitter emitter,AiChatDto aiChatDto) {StringBuffer sb = new StringBuffer();return new Text2TextStreamObserver() {@Overridepublic void onBegin() {}@Overridepublic void onNext(String data) {try {emitter.send(data);sb.append(data);} catch (IOException e) {throw new RuntimeException(e);}}@Overridepublic void onEnd() {try {emitter.complete();createLog(aiChatDto, sb.toString());LOGGER.info("问题:{},答案:{}",JSONUtil.toJsonStr(aiChatDto),sb);} catch (Exception e) {throw new RuntimeException(e);}}@Overridepublic void onFailure(Throwable throwable) {try {emitter.completeWithError(throwable);} catch (Exception e) {throw new RuntimeException(e);}}};}

工具包

public List<String> text2TextStream(MoonshotText2TextInput input, Text2TextStreamObserver streamObserver) {ArrayList dataList = new ArrayList();try {Request request = this.buildRequest(input, true);SSEListener sseListener = new SSEListener(dataList, streamObserver);ExecuteSSEUtil.executeSSE(request, sseListener, this.httpclient);return dataList;} catch (Exception var6) {throw new RuntimeException("流式请求异常:", var6);}}SSEListener extends EventSourceListener

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/41412.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YOLOV++ 详解 | 网络结构、代码解析、YOLOV 论文阅读、初识 VID

前言 代码地址&#xff1a;https://github.com/YuHengsss/YOLOV 本文网络结构按 YOLOV SwinTiny 绘制&#xff0c;不同的模型主要差异在于 Backbone&#xff0c;VID 相关的部分基本相同。 Predict Input 代码基于 vid_demo。首先会读取视频中的所有帧&#xff08;只能用短视频…

c++ 构造,析构,拷贝,移动构造函数

文章目录 概述1.构造函数2. 拷贝构造函数3.移动构造函数4.析构函数 例子QTUE4/5 c 小结 概述 对于c来说&#xff0c;最基础的是类。对于一个类来说&#xff0c;主要由以下函数构成。如下&#xff1a; 构造函数拷贝构造函数移动构造函数析构函数 当然&#xff0c;还有一个操作…

【简历】郑州某二本学院:JAVA实习简历指导,基本没有面试机会

注&#xff1a;为保证用户信息安全&#xff0c;姓名和学校等信息已经进行同层次变更&#xff0c;内容部分细节也进行了部分隐藏 简历说明 这份简历是一个25届二本同学找JAVA实习的简历&#xff0c;从整体来看&#xff0c;简历版式没有问题&#xff0c;非常清晰。 但是内容特…

动态规划题解

文章目录 1、题汇总2、关键字3、思路4、总结 1、题汇总 1.1、最大字段和 dp[i] nums[i] max(dp[i - 1], 0) 1.2、买卖股票最佳时机_只买卖一次 &多次 1.3、股票最多两次 & 最多K次 & 含冷冻期 & 有手续费 1.101、按摩师_隔天接订单 dp[i] max(dp[i - 1], …

数据操作10-15题(30 天 Pandas 挑战)

数据操作 1. 相关知识点1.12 分组与连表1.13 排名 2. 题目2.10 第N高的薪水2.11 第二高的薪水2.12 部门工资最高的员工2.13 分数排名2.14 删除重复的电子邮箱2.15 每个产品在不同商店的价格 1. 相关知识点 1.12 分组与连表 分组max_salaryemployee.groupby(departmentId)[sal…

搜索+动态规划

刷题刷题刷题刷题 ​​​​​​​​​​​​​​Forgery - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路&#xff1a; 需要两个数组&#xff0c;一个数组全部初始化为".",另一个数组输入数据&#xff0c;每碰到一个“.”就进行染色操作&#xff0c;将其周围的…

Java后端每日面试题(day3)

目录 Spring中Bean的作用域有哪些&#xff1f;Spring中Bean的生命周期Bean 是线程安全的吗&#xff1f;了解Spring Boot中的日志组件吗&#xff1f; Spring中Bean的作用域有哪些&#xff1f; Bean的作用域&#xff1a; singleton&#xff1a;单例&#xff0c;Spring中的bean默…

使用 express 搭建最基本服务器程序

在使用 Express.js 框架搭建 web 应用时&#xff0c;通常会设置一个文件夹来存放静态资源&#xff0c;如图片、JavaScript 文件、CSS 文件等。默认情况下&#xff0c;这个文件夹经常被命名为 public。 安装 Express 如果你还没有安装 Express&#xff0c;可以通过 npm 来安装…

已经安装deveco-studio-4.1.3.500的基础上安装deveco-studio-3.1.0.501

目录标题 1、执行exe文件后安装即可2、双击devecostudio64_3.1.0.501.exe2.1、安装Note (注意和4.1的Note放不同目录)2.2、安装ohpm (注意和4.1版本的ohpm放不同目录)2.3、安装SDK (注意和4.1版本的SDK放不同目录) 1、执行exe文件后安装即可 2、双击devecostudio64_3.1.0.501.e…

JLMPack:您的高效文件管理利器

在信息爆炸的时代&#xff0c;文件管理已经成为我们日常工作中不可或缺的一部分。面对日益增长的数据量&#xff0c;如何高效地存储、管理和保护文件&#xff0c;成为每个人都需要面对的问题。为此&#xff0c;我们隆重推出JLMPack——一款强大而高效的文件管理工具&#xff0c…

Ubuntu 22.04.4 LTS 安装 php apache LAMP 环境nginx

1 安装php-fpm apt update apt-get install php-fpm #配置php-fpm服务启动 systemctl enable php8.1-fpm systemctl start php8.1-fpm #查看服务 systemctl status php8.1-fpm #查看版本 rootiZbp1g7fmjea77vsqc5hmmZ:~# php -v PHP 8.1.2-1ubuntu2.18 (cli) (built: J…

HTML内容爬取:使用Objective-C进行网页数据提取

网页爬取简介 网页爬取&#xff0c;通常被称为网络爬虫或爬虫&#xff0c;是一种自动浏览网页并提取所需数据的技术。这些数据可以是文本、图片、链接或任何网页上的元素。爬虫通常遵循一定的规则&#xff0c;访问网页&#xff0c;解析页面内容&#xff0c;并存储所需信息。 …

揭秘社会工程学:信息安全的无形杀手

前言 在当今数字化和高度互联的世界中&#xff0c;信息安全不仅仅依赖于技术防御措施&#xff0c;如防火墙、加密和防病毒软件等。随着技术的进步&#xff0c;攻击者的手段也在不断进化&#xff0c;社会工程学&#xff08;Social Engineering&#xff09;作为一种基于人类心理…

网安实验大全

一、网络拓扑环境搭建 网安实验一网络拓扑环境的搭建-CSDN博客 二、PGP 网络安全PGP加解密签名实验_pgp加密和解密过程-CSDN博客 三、CA部署 网络安全 基于Windows系统部署CA_构建基于windows的ca系统-CSDN博客 四、扫描工具 网络安全实验 网络扫描工具的使用_攻击机端…

mars3d加载wms服务或者wmts服务注意事项

1.wms只支持4326、3857、4490的标准切片&#xff0c;其他坐标系不支持 Mars3D三维可视化平台 | 火星科技 2.wmts同理&#xff0c;Mars3D三维可视化平台 | 火星科技 3.对应级别tilematrix找到的瓦片tilerow&tilecol这两个参数使用常见报错无效参考&#xff1a; 【Mars3d】…

护航端侧大模型平稳健康发展,百度大模型内容安全Lite版正式发布

6月28日&#xff0c;WAVE SUMMIT深度学习开发者大会 2024 “智变应用、码动产业”平行论坛在北京召开。与会&#xff0c;百度大模型内容安全Lite版正式发布&#xff0c;可面向低算力和超低算力的终端大模型提供离线场景下的一站式安全解决方案&#xff0c;为各类终端大模型平稳…

国际工业巨头遭勒索,亚信安全《勒索家族和勒索事件监控报告》

本周态势快速感知 本周全球共监测到勒索事件94起&#xff0c;事件数量有小幅下降。从整体上看&#xff0c;Lockbit3.0仍然是影响最严重的勒索家族&#xff1b;本周RansomHub是影响最严重的勒索家族&#xff1b;Akira和Dragonforce恶意家族紧随其后&#xff0c;需要注意防范。拉…

Java中的单点登录(SSO)解决方案

Java中的单点登录&#xff08;SSO&#xff09;解决方案 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 1. 什么是单点登录&#xff08;SSO&#xff09;&#…

ython 使用 cx_Freeze 打包,不想要打包文件中能直接看到依赖的代码,如何处理

背景&#xff1a;因为使用 cx_Freeze 打包时&#xff0c;添加需要依赖的文件 cx_Freeze 是一个用于将 Python 程序打包成独立可执行文件的工具&#xff0c;支持多个平台。当你需要打包包含多个 .py 文件的项目时&#xff0c;你可以通过编写一个 setup.py 文件来指定哪些模块应…

Java中的CountDownLatch原理使用注意事项

CountDownLatch是Java并发工具包java.util.concurrent中的一个类&#xff0c;主要用于解决一个或多个线程等待一组操作完成的问题。它的核心原理是基于一个内部的计数器&#xff0c;当计数器的值减至0时&#xff0c;所有因调用await()方法而阻塞的线程将会被唤醒&#xff0c;从…