使用sseemitter,spring event推送数据(springboot2.0) -欧洲杯足彩官网

`
wiselyman
  • 浏览: 2076996 次
  • 性别:
  • 来自: 合肥
博主相关
  • 博客
  • 微博
  • 相册
  • 收藏
  • 博客专栏
    点睛spring4.1
    浏览量:80745
    点睛spring mvc4...
    浏览量:129940
    社区版块
    • ( 11)
    • ( 19)
    • ( 0)
    存档分类
    最新评论

    使用sseemitter,spring event推送数据(springboot2.0)

     

     

    1.场景

    当我们做异步请求处理的时候,客户端向服务端的请求不是立即返回的,而是在服务端有数据的时候才发送给客户端的。本例演示是服务端数据是另外的事件触发并推送给客户端的。

    当使用微信或者支付宝扫码支付的时候,在客户支付成功之后,后台得到微信(支付宝)回调需要通知我们的客户端支付已经完成,客户端得到通知后可以做一些后续的操作。
    这涉及到后台需要将支付成功的消息主动推送给客户端,让客户端记性后续的操作。

    • 客户端向后台(ssecontroller->push)发送异步请求,客户端处于监听等待状态;
    • 微信(支付宝)支付成功后回调后台(ssecontroller->paycallback模拟);
    • paycallback方法通过applicationcontext.publishevent向系统内部发送支付完成事件;
    • push方法通过paycompletedlistener监听事件并通过sseemitter发送给客户端。

    名词解释:sseserver send event是一种服务端推送的技术,本例使用sseemitter来实现。

    2.ssecontroller

    @restcontroller
    public class ssecontroller {
        @autowired
        applicationcontext applicationcontext;
        @autowired
        paycompletedlistener paycompletedlistener;
        @getmapping("/push")
        public sseemitter push(@requestparam long payrecordid){
            final sseemitter emitter = new sseemitter();
            try {
               paycompletedlistener.addsseemitters(payrecordid,emitter);
            }catch (exception e){
                emitter.completewitherror(e);
            }
            return emitter;
        }
        @getmapping("/pay-callback")
        public string paycallback(@requestparam long payrecordid){
            applicationcontext.publishevent(new paycompletedevent(this,payrecordid));
            return "请到监听处查看消息";
        }
    }
    

    3.paycompletedevent

    @getter
    @setter
    public class paycompletedevent extends applicationevent {
        private long payrecordid;
        public paycompletedevent(object source, long payrecordid) {
            super(source);
            this.payrecordid = payrecordid;
        }
    }
    

    4.paycompletedlistener

    @component
    public class paycompletedlistener {
        private static map sseemitters = new hashtable<>();
        public void addsseemitters(long payrecordid, sseemitter sseemitter) {
            sseemitters.put(payrecordid, sseemitter);
        }
        @eventlistener
        public void deployeventhandler(paycompletedevent paycompletedevent) throws ioexception {
            long payrecordid = paycompletedevent.getpayrecordid();
            sseemitter sseemitter = sseemitters.get(payrecordid);
            sseemitter.send("支付成功");
            sseemitter.complete();
        }
    }
    

    5.演示

    • 先访问http://localhost:8080/push?payrecordid=123,此时客户端处于等待状态.

    • 再访问http://localhost:8080/pay-callback?payrecordid=123,模拟回调通知客户端支付成功,这是会通知上一步并推送到客户端.

    6.源码地址

    0
    0
    分享到:
    评论

    相关推荐

      通过springboot2.0整合websocket实现服务器主动推送消息到前端,并且前端接收到消息后会进行消息声音弹框提醒。

      springboot2.0多数据源集成hibernate配置hibernatedaosupport, dao层继承hibernatedaosupport, 不使用jpa方式。

      springboot2.0整合shiro 。权限配置,user/permission/role

      我把我之前买的spring boot 2.0的学习视频发出来,也省得大家去买课程看了。

      springboot2.0整合quartz,采用 spring-boot-starter-quartz方式,更为简单方式

      这是一个基于spring 2.0,基于mysql8.0,springboot2.0,druid 1.1,jpa demo搭建的,本资源对应的博客链接https://blog.csdn.net/qq_37925580/article/details/88398066

      采用springboot2.0、mybatis-plus、shiro框架,开发的一套权限系统 采用springboot2.0、mybatis-plus、shiro框架,开发的一套权限系统 采用springboot2.0、mybatis-plus、shiro框架,开发的一套权限系统 采用...

      dubbo官方最新springboot2.0.x集成dubbo2.6.例子(springboot com.alibaba.boot)

      springboot2.0中使用java配置来实现springbatch,摒弃之前的xml文件配置。

      基于springboot2.0 spring data jpa thymeleaf shiro 开发的后台管理系统,采用分模块的方式便于开发和维护,支持前后台模块分别部署,目前支持的功能有:权限管理、部门管理、字典管理、日志记录、文件上传、...

      springboot2.0 springcloud redis集群搭建的仿悦诗风吟旗舰网站 项目描述 springboot2.0 springcloud搭建的仿悦诗风吟旗舰网站,整合了mybatis、redis集群、druid等技术,采用分布式架构,面向服务的思想,该项目...

      基于springboot2.0的后台权限管理系统界面简洁美观敏捷开发系统架构。核心技术采用spring、mybatis、shiro没有任何其它重度依赖。 互联网云快速开发框架,微服务分布式代码生成的敏捷开发系统架构。项目代码简洁,注释...

      springboot2.0整合fastjson实例配置,在测试类中有各种fastjson的使用,序列化反序列化,以及jsonobject与jsonarray的使用,具体测试方法在测试类中

      springboot2.0 springsecurity5.1.5.release mybatisplus3.1.1的基础登陆代码 登陆账号123 密码123 密码使用springsecruity提供的加密方式加密 前端使用thymeleaf bootstrap 提供登陆后成功页面 sql文件在db下 仅供...

      可以使用一个@springbootapplication注解来启用这三个特性,即:@enableautoconfiguration:springboot 2.0

      springboot2.0 mybatis主从数据库双数据源,测试了事务,事务是单独分开的。回滚只回滚主库的事务。

      springboot2.0 springcloud搭建的旗舰网站,整合了mybatis、redis集群、druid等技术,采用分布式架构,面向服务的思想,该项目是自己在学习springboot和springcloud时自己写的一个项目,做了用户登录注册,商品的...

      spring boot是由pivotal团队提供的全新框架,其设计目的是用来简化新spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,spring boot...

      在springboot2.0中如何使用prometheus插件,及对springboor2.0-actuator包的介绍,以及如何扩展promehtues里的监控指标。

      springboot 集成oauth2.0服务器,基于oauth2.0授权码形式集成

    global site tag (gtag.js) - google analytics
    网站地图