一.效果示例

二.代码示例

1.controller层
package com.xiaoi.xics.forward.interfaces;import com.xiaoi.xics.core.tool.api.R;
import com.xiaoi.xics.forward.application.service.IMessageService;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;/*** @Description sse*/
@Slf4j
@AllArgsConstructor
@RestController
@RequestMapping("/sse")
public class SseController {private IMessageService messageService;@PostMapping(value="/push")@ApiOperation(value = "推送")public R<String> push(@RequestParam("message") String message){return R.status(messageService.push(message));}// 允许跨域@CrossOrigin@GetMapping(value="/get",produces = "text/event-stream;charset=UTF-8" )@ApiOperation(value = "获取")public String get(){try {return "data:" + messageService.get()+ "\n\n";}catch (Exception e) {e.printStackTrace();return "data:" +"{\"msg\":\"fail\",\"code\":1, \"error\": "+ e.getMessage() +"}" + "\n\n";}// 注意,EventSource返回的参数必须以data:开头,"\n\n"结尾,否则onmessage方法无法执行}
}
2.service层
package com.xiaoi.xics.forward.application.service.impl;import com.xiaoi.xics.forward.application.service.IMessageService;
import com.xiaoi.xics.forward.domain.MessageDomain;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;/*** @Description 消息服务*/
@Service
@AllArgsConstructor
public class MessageServiceImpl implements IMessageService {private MessageDomain messageDomain;public Boolean push(String message) {return messageDomain.push(message);}public String get() {return messageDomain.get();}
}
3.domain层
package com.xiaoi.xics.forward.domain;import com.xiaoi.xics.core.log.exception.ServiceException;
import com.xiaoi.xics.core.tool.support.Kv;
import com.xiaoi.xics.core.tool.utils.Func;
import lombok.AllArgsConstructor;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;/*** @Description redis消息*/
@Service
@AllArgsConstructor
public class MessageDomain {private RedisTemplate redisTemplate;public Boolean push(String message) {try {if(Func.isEmpty(message)){throw new ServiceException("message不能为空");}redisTemplate.opsForList().leftPush("xiaoi:message", message);return true;}catch(Exception e){e.printStackTrace();}return false;}public String get() {Kv kv = Kv.create();try {Object o = redisTemplate.opsForList().rightPop("xiaoi:message");if(Func.isNotEmpty(o)){kv.put("msg", (String) o);kv.put("success", true);}else{kv.put("msg", "");kv.put("success", true);}}catch(Exception e){e.printStackTrace();kv.put("msg", "");kv.put("success", false);kv.put("error", e.getMessage());}return kv.toString();}
}
4.application配置
server:port: 8080
spring:redis:#redis 单机环境配置host: 127.0.0.1port: 6379password:database: 9ssl: false
5.html测试
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
//需要判断浏览器支不支持,可以去w3c进行查看
var source = new EventSource('http://localhost:8080/sse/get');
source.onmessage = function (event) {console.info(event.data);document.getElementById('result').innerText = event.data
};</script>
</head><body><div id="result"></div>
</body>
</html>

【springboot】sse接口相关推荐

  1. SpringBoot提供接口实现Excel导入数据并存储到数据库中

    SpringBoot提供接口实现Excel导入数据并存储到数据库中 完整项目文件 1 效果展示 1.1 Excel数据 zxy.xlsx 1.2 导入后数据库中数据 CREATE TABLE `use ...

  2. springboot写接口

    今天来写一下springboot的接口,也是初学者,有报错的自己调试哈 第一步,创建项目 点击下一步就是了 勾选这几项 数据库选择mySQL,勾选mybatis,后续用mabatis写sql语句. 好 ...

  3. SpringBoot(二):设置springboot同一接口程序启动入口

    根据上一篇文章中搭建了一个springboot简单工程,在该工程中编写HelloWordController.java接口类,并在该类中写了一个main函数,做为该类的接口服务启动入口.此时如果新增多 ...

  4. springboot token_Springboot接口幂等性基于token实现方案

    什么是接口幂等 幂等(idempotent.idempotence)是一个数学与计算机学概念,常见于抽象代数中,即f(f(x)) = f(x).简单的来说就是一个操作多次执行产生的结果与一次执行产生的 ...

  5. Vue中使用vue-quil-editor富文本编辑器+el-upload实现带图片上传到SpringBoot后台接口

    场景 系统中经常会用到富文本编辑器,比如新增通知和公告功能,并且需要添加上传图片. vue-quill-editor官网: https://www.npmjs.com/package/vue-quil ...

  6. springboot中接口实例化_疫情爆发在家闲出屁的我,梳理一下SpringBoot知识点

    在过去两三年的Spring生态圈,最让人兴奋的莫过于Spring Boot框架.或许从命名上就能看出这个框架的设计初衷:快速的启动Spring应用.因而Spring Boot应用本质上就是一个基于Sp ...

  7. springboot控制接口返回的字段_SpringBoot实战:SpringBoot之Rest Full接口自定义返回数据类型(ResponseBodyAdvice)...

    我们在日常开发的过程中,经常会要求统一返回数据格式.如要求统一访问格式为 { "success": 请求是否成功, "message": 请求消息, " ...

  8. 还不会用springboot写接口?快看这里,手把手操作,一发入魂~

    1.springboot简介 Spring Boot 可以轻松创建可以"直接运行"的独立的.生产级的基于 Spring 的应用程序. 特征 创建独立的 Spring 应用程序 直接 ...

  9. Springboot邮箱接口(使用个人邮箱发送邮件)

    近期项目使用邮件验证,这里使用个人邮箱进行测试,记录开发笔记 SpringBoot自带短信接口 maven pom.xml 引入: <dependency><groupId>o ...

最新文章

  1. 【ASP.NET Core】ASP.NET Core 依赖注入
  2. Android程序反编译
  3. c程序设计语言第五章,c程序设计语言第五章第7题答案
  4. VTK:PolyData之RuledSurfaceFilter
  5. pom.xml报错:Failure to find org.apache.maven.doxia:doxia-logging-api:jar:1.1 in http://repo.
  6. java实现验证码图片_java实现验证码图片
  7. [工程测量]工程测量个人期中复习笔记
  8. python 读取合并单元格 视频_Python如何使用xlrd实现读取合并单元格
  9. Python datetime time
  10. .desktop 桌面快捷_Ubuntu 桌面手动添加应用快捷方式
  11. Ajax的load方法
  12. 20160801java学习重点:函数
  13. 美国邮政编码ZIP Code(转载)
  14. 为什么说12306比淘宝双十一的技术挑战更大?
  15. Pytorch之Optim(优化器)
  16. 脑袋越大就会越聪明么?
  17. jenkins更换插件安装源
  18. MFS(一)---mfs详解与部署
  19. dilated conv的理解
  20. 《JavaWeb视频教程》(p44)

热门文章

  1. 批量文件压缩下载(zip)
  2. 企业固定资产管理系统建设方案
  3. 三星手机出现com.sec.android.app.sa,如何去除Galaxy S20/S20 /Ultra/S10/系统内置的Bixby三星Pay等软件Ap......
  4. Linux:内核调试之内核魔术键sysrq
  5. stm32检测串口空闲的原理
  6. Alexa 一键下单不好用?蓦然认知推出语音对话购物
  7. 那两年炼就的Android内功修养
  8. UnRaid利用iGVT-g插件实现Nas宿主机、虚拟机同时使用intel核显输出或硬解(硬件加速)功能
  9. 手机充电器电源适配器原理
  10. 让深度学习进入移动端,蘑菇街在移动端的深度学习优化实践