springboot集成异步调用

异步、同步

同步:在发出一个调用时,在得到调用结果之前,该调用不返回(实时处理)。----不相干的业务逻辑会阻塞一些核心的业务逻辑。
异步:在发出一个调用时,这个调用立刻返回,没有返回结果(分时处理)

示例

需求:发布文章时,需要对文章进行自动审核,然后保存文章基础信息。可以将文章自动审核和保存文章分开,对文章自动审核使用异步调用。

  1. 在文章自动审核的方法上加上@Async注解
/**** 根据文章ID查询文章,并实现文章内容审核* @param id*/@Async  // 方法上添加该注解,表示该方法会异步执行@Overridepublic void autoScanWmNews(Integer id) throws UnsupportedEncodingException {//1)根据文章ID查询文章数据WmNews wmNews = wmNewsMapper.selectById(id);//2)调用阿里云实现文本内容审核//             content->提取文本  +  title   + lablesList<String> textList = parseContent(wmNews.getContent(), "text");String content = StringUtils.join(textList,wmNews.getTitle(),wmNews.getLabels(), ",");Map<String, String> textVerifyResult = greenTextScan.verify(content);    //ElasticSearch->创建索引->创建自定义分词->将数据存入到ES中//一篇文章->匹配数据->匹配到-有敏感词//敏感词很少->100万->存入数据库->加载到程序内存->内存判断//效率很高->DFA算法//3)调用MinIO下载图片List<String> images = parseContent(wmNews.getContent(), "image");  //内容中的图片String[] imageArray = wmNews.getImages().split(",");   //封面图片images.addAll(Arrays.asList(imageArray)); //内容图片+封面图片//去重Set<String> urls = new HashSet<String>();urls.addAll(images);List<byte[]> imageBytes = new ArrayList<byte[]>();for (String url : urls) {byte[] bytes = fileStorageService.downLoadFile(url);imageBytes.add(bytes);}//4)调用阿里云,实现图片审核Map<String, String> imageVerifyResult = greenImageScan.verify(imageBytes);imageVerifyResult.putAll(textVerifyResult);//5)判断审核结果->审核通过->Feign将文章数据同步到article中int status = 9;for (Map.Entry<String, String> entry : imageVerifyResult.entrySet()) {String value = entry.getValue();if(value.equals("block")){//绝对审核不通过status=2;break;}else if(value.equals("review")){//审核不确定status=3;}}//判断->当前时间是否小于发布时间,如果小于,则status=8if(status==9 && wmNews.getPublishTime().getTime()>System.currentTimeMillis()){status=8;}wmNews.setStatus((short) status);//同步数据到article微服务-200毫秒if(status==9){WmChannel wmChannel = wmChannelMapper.selectById(wmNews.getChannelId());ArticleDto dto = new ArticleDto();dto.setContent(wmNews.getContent());dto.setTitle(wmNews.getTitle());dto.setChannelId(wmNews.getChannelId());dto.setLayout(wmNews.getType());dto.setFlag((byte) 0);dto.setImages(wmNews.getImages());dto.setLabels(wmNews.getLabels());dto.setLikes(0);dto.setCollection(0);dto.setViews(0);dto.setComment(0);dto.setCreatedTime(wmNews.getPublishTime());dto.setSyncStatus(true);dto.setChannelName(wmChannel.getName());//识别修改if(wmNews.getArticleId()!=null){dto.setId(wmNews.getArticleId());}//dto.setStaticUrl(???);ResponseResult<Long> saveResult = articleClient.save(dto);if(wmNews.getArticleId()==null){wmNews.setArticleId(saveResult.getData());}}//数据同步到数据库wmNewsMapper.updateById(wmNews);}
  1. 在文章保存成功后调用异步方法
@Overridepublic ResponseResult submit(WmNewsDto dto) throws UnsupportedEncodingException {//1)将WmNewsDto转换成WmNewsWmNews wmNews = new WmNews();BeanUtils.copyProperties(dto,wmNews);//2)需要完善WmNews的数据wmNews.setCreatedTime(new Date());//3)status=自动->从内容中提取图片->作为封面[不要超过3张]if(wmNews.getType()==-1){//3.1)提取图片//3.2)将图片作为封面parseImages(dto);}//4)图片【封面】要转换 以逗号隔开// ["123.jpg","234.jpg"]-->"123.jpg,234.jpg"String images = StringUtils.join(dto.getImages(), ",");wmNews.setImages(images);//5)执行数据更新   status=0 没有发布时间//              status=!0 有发布时间if(dto.getId()==null){Integer userId = RequestContextUtil.get("apUserId");wmNews.setUserId(userId);//新增wmNewsMapper.insert(wmNews);}else{//修改wmNewsMapper.updateById(wmNews);}//文章审核wmNewsAutoScanService.autoScanWmNews(wmNews.getId());return ResponseResult.okResult(null);}
  1. 在启动类上加上@EnableAsync注解

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

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

相关文章

8G防火墙,WAF防火墙,可抵御各种恶意请求、恶意机器人、攻击防御

8G防火墙&#xff0c;WAF防火墙&#xff0c;可抵御各种恶意请求、恶意机器人、攻击防御 经过一年多的 beta 测试&#xff0c;8G 防火墙已准备好在生产现场使用。因此&#xff0c;您可以受益于 nG 防火墙&#xff08;又名 nG 黑名单&#xff09;的最新发展提供的强大保护。8G 防…

源代码防泄露可以通过哪些方法实现?七种有效方法分享

在当今数字化时代&#xff0c;访问安全和数据安全成为企业面临的重要挑战。传统的边界防御已经无法满足日益复杂的内网办公环境&#xff0c;层出不穷的攻击手段已经让市场单一的防御手段黔驴技穷。当企业面临越来越复杂的网络威胁和数据泄密风险时&#xff0c;更需要一种综合的…

iOS审核被拒 无法添加以供审核 要开始审核流程,必须提供以下项目

iOS审核被拒 最近有小伙伴反馈上架被拒&#xff0c;提示如下&#xff1a; 无法添加以供审核 要开始审核流程&#xff0c;必须提供以下项目 提交以供审核时遇到意外错误。如果问题仍然存在&#xff0c;请联系我们 后来小伙伴解决方案是&#xff1a;把备案号大写改为小写。 竟…

Ansible自动化工具模块调用与playbook编写

目录 一、Ansible工作机制与特点 &#xff08;一&#xff09;Ansible工作机制 1. 初始化与配置 2. 编写Playbook 3. 调用模块 4. 加密敏感数据 5. 执行Playbook 6. 收集执行结果 7. 错误处理与回滚 8. 反馈与报告 &#xff08;二&#xff09;Ansible 的主要特点包括…

Java并发编程: Synchronized锁升级

文章目录 一、jdk8 markword实现表二、使用工具来查看锁升级 一、jdk8 markword实现表 new -> 偏向锁 -> 轻量级锁&#xff08;自旋锁、自适应自旋锁&#xff09;-> 重量级锁&#xff1a; 偏向锁和轻量级锁都是用户空间完成的。重量级锁是需要向内核申请的。 synchr…

深度学习之基于Matlab神经网络的活体人脸和视频人脸识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 人脸识别技术作为生物识别技术的一种&#xff0c;近年来得到了广泛的关注和应用。与传统的身份认证方…

高素质高学历婚恋相亲交友平台有哪些?分享我的网上找对象成功脱单经历!

尽管觉得在社交软件上找到真爱的可能性很小&#xff0c;但我却时常看到别人成功的案例&#xff0c;这也让我跃跃欲试了。没想到&#xff0c;我真的成功了&#xff01;以下是我亲身使用过的一些方法&#xff0c;在此与大家分享&#xff0c;仅供参考哦&#xff01; &#x1f449;…

新手做抖音小店多久能出单?新手抖音小店出单秘籍!出单教程必看

大家好&#xff0c;我是电商花花。 现阶段还是有很多朋友加入到抖音电商行业&#xff0c;因为抖音小店上还隐藏很多的红利和市场&#xff0c;很多新手开店后第一个问题就是&#xff0c;店铺开通后&#xff0c;一般多久能出单&#xff1f; 多久能出单&#xff0c;其实更看重的…

解决方案:应对文本数据超限处理的有效策略

在处理大规模文本数据时&#xff0c;经常会遇到数据量超出系统、软件或工具处理能力上限的挑战。这不仅影响处理速度&#xff0c;还可能导致系统崩溃或性能严重下降。为了有效应对这一问题&#xff0c;本文汇总了几种实用的策略&#xff0c;帮助开发者和数据处理专业人员高效管…

深入学习和理解Django视图层:处理请求与响应

title: 深入学习和理解Django视图层&#xff1a;处理请求与响应 date: 2024/5/4 17:47:55 updated: 2024/5/4 17:47:55 categories: 后端开发 tags: Django请求处理响应生成模板渲染表单处理中间件异常处理 第一章&#xff1a;Django框架概述 1.1 什么是Django&#xff1f;…

获取波形极值与间距并显示

获取并显示波形的极值与极值间距 1、流程 1、通过signal.find_peaks获取极大值 2、获取极大值下标 3、获取极大值对应的值 4、获取极大值的下标间距(就是隔多远有一个极大值) 5、获取极大值间距的标准差、方差、均值、最大值 6、图形展示波形图并标记极大值2、效果图 3、示…

进程单元测试题

一、选择题(每题2分&#xff0c;总分30分&#xff09; 1. 下列不是用户进程的组成部分的是( D ) [A] 正文段 [B] 用户数据段 [C] 系统数据段 [D] elf段 根据进程的基本概念&#xff0c;进程是由正文段、用户数据段以及系统数据段共同组成的一个执行环境…

吴恩达深度学习笔记:深度学习的 实践层面 (Practical aspects of Deep Learning)1.13-1.14

目录 第二门课: 改善深层神经网络&#xff1a;超参数调试、正 则 化 以 及 优 化 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)第一周&#xff1a;深度学习的 实践层面 (Practical aspects of Deep Learning)1.13 梯度检验&#…

IT 项目管理介绍和资料汇总

IT项目管理到底是什么&#xff1f;是对组织承担的任何信息技术项目的成功监督。IT项目经理负责规划、预算、执行、领导、故障排除和维护这些项目。IT项目经理可能会做的事情包括&#xff1a; 1、硬件安装 2、软件、网站和应用程序开发 3、网络和云计算解决方案的升级和/或推出…

非平衡数据处理-Tomek link算法介绍,代码和实战测评

作者Toby&#xff0c;来源公众号&#xff1a;Python风控模型&#xff0c;非平衡数据处理-Tomek link算法 概述 非平衡数据在金融风控领域、反欺诈客户识别、广告智能推荐和生物医疗中普遍存在。一般而言&#xff0c;不平衡数据正负样本的比例差异极大&#xff0c;如在Kaggle竞…

20240503安装HEVC解码器播放H265格式的8K视频

20240503安装HEVC解码器播放H265格式的8K视频 2024/5/3 9:55 缘起&#xff1a;由于youtube支持8K视频了&#xff0c;想尝尝鲜&#xff01; 主摄像头当然是选择SONY的【夜摄/弱光场景】&#xff0c;根据优选&#xff0c;小米&#xff08;MI&#xff09;13Ultra 最佳了。 在开始播…

jenkins目录下的vue3项目——pnpm install后运行报错——奇葩问题解决

昨天到今天&#xff0c;同事那边遇到一个问题&#xff0c;就是关于vue3vite的项目&#xff0c;在执行了自动打包后&#xff0c;运行代码会提示报错的问题。 报错信息如下&#xff1a; 具体错误信息如下&#xff1a; ERROR 11:28:14 [vite] Pre-transform error: Cannot find …

深入探究TCP/IP协议

一、引言 在信息技术飞速发展的今天&#xff0c;网络已成为人类社会不可或缺的部分。实现网络中计算机相互通信的关键之一便是TCP/IP协议。作为互联网的基础&#xff0c;TCP/IP协议确保了全球范围内的数据交换和信息共享。本文将深入探讨TCP/IP协议的概念、特点、组成、相关协…

C++笔记之调用PCL库显示PCD文件的点云

C++笔记之调用PCL库显示PCD文件的点云 —— 2024-05-05 杭州 code review! 文章目录 C++笔记之调用PCL库显示PCD文件的点云1.运行2.点云pcd文件github下载地址2.main.cpp3.CMakeLists.txt1.运行 2.点云pcd文件github下载地址 https://github.com/luolaihua/point-cloud-data-…

【优选算法】——Leetcode——202—— 快乐数

目录 1.题目 2. 题⽬分析: 3.简单证明&#xff1a; 4. 解法&#xff08;快慢指针&#xff09;&#xff1a; 算法思路&#xff1a; 补充知识&#xff1a;如何求⼀个数n每个位置上的数字的平⽅和。 总结概括 5.代码实现 1.C语言 2.C 1.题目 202. 快乐数 编写一个算法来…