`
1028826685
  • 浏览: 938561 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类

实现消息推送核心搭建(升级版)

    博客分类:
  • Web
阅读更多

前面已经实现了第一版实时消息推送核心框架搭建,下面就在第一版基础上加以升级完善。

使用技术框架:分布式调度  http://git.oschina.net/hugui/light-task-scheduler 请自行玩玩  这里简单介绍下。

light-task-scheduler 调度框架基本原理和第一版实现一样不过这里更加完善的是该框架实现了消息重发,当消息失败消息会被重新保存起来定期重发这里可以具体了解下框架自身原理,该框架本身已是生产者-消费者模式 在升级版中主要使用到了 jobclient:产生消息 jobtracker:处理连接client和task   tasktracer:负责处理任务  queue:消息队列支持数据库队列  。在使用该框架的是时候需要打包jar在项目中引入。具体框架整合可以了解下框架本身。下面主要贴上消息生产  处理  以及自身使用redis作为消息存取配合任务调度使用

 

消息生产:

    @Override
 public void sendMessage(Message msMessage) {
  
  
  //写入redis缓存系统队列
  if(redisUtils.redisCheckStatus()){
   
   String id=UUID.randomUUID().toString();
   
   ArrayList<Message> messages=new ArrayList<Message>();
   msMessage.setRedisstatus(1);//进入redis队列
   msMessage.setId(id);
   //消息加入redis
   redisUtils.addMessageQueue(id, msMessage);
   
         Job job = new Job();
         job.setTaskId(id);
         job.setParam("messageid",id);
         job.setTaskTrackerNodeGroup("message_trade_TaskTracker");  //
         job.setNeedFeedback(true);
         job.setReplaceOnExist(true);        // 当任务队列中存在这个任务的时候,是否替换更新
         job.setCronExpression(null);//立即执行
         Response response = jobClient.submitJob(job);
   
         logger.info("执行结果:"+response.getMsg());
        
  }else{
   msMessage.setRedisstatus(0);//未进入redis队列
  }
  //写入数据库 防止消息丢失
  try {
   Session session=getHibernateTemplate().getSessionFactory().openSession();
   Transaction transaction=session.beginTransaction();
   session.save(msMessage);
   transaction.commit();
   session.close();
  } catch (HibernateException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  
 }

 

消息处理:

@Override
    public Result run(Job job) throws Throwable {
  
  Result result=null;
  
        try {
            // TODO 业务逻辑
         logger.error("我要执行:" + job);
         String messageid=job.getParam("messageid");
            boolean backresult=true;
            if(!StringUtils.isEmpty(messageid)){
              Message message=redisUtils.getMessageQueue(messageid);
              if(message!=null){
               backresult=sendMsg(message);//发送消息
              
               if(backresult){
                result=new Result(Action.EXECUTE_SUCCESS, "推送成功");
               }else{
                result=new Result(Action.EXECUTE_LATER, "推送失败,稍后重新推送");
               }
              }
            }
        } catch (Exception e) {
         logger.info("Run job failed!", e);
         result=new Result(Action.EXECUTE_LATER, e.getMessage());
        }
        return result;
    }

 

注意:

<1.消息发送失败需要返回 new Result(Action.EXECUTE_LATER, "推送失败,稍后重新推送"); 通知任务调度该任务需要重发

<2.redis消息取出使用pop该消息就会重redis中删除 注意。。。

 

升级主要解决自行定时任务,以及消息发送失败重发机制实现。下面把相关代码贴上 没有jar包

 

dubbo-demo-provider:消息处理系统  dubbo-demo-consumer:测试端

 

分享到:
评论

相关推荐

    Dubbox+Redis3.0+Spring+Hibernate+zookeeper实现消息推送核心搭建

    本文将深入探讨如何利用Dubbox、Redis 3.0、Spring、Hibernate以及Zookeeper这些技术组件,搭建一个稳定可靠的消息推送核心架构。以下是对每个组件及其在系统中的作用的详细解释: 1. **Dubbox**: Dubbox 是阿里...

    消息推送(完美)

    在Android平台上,Google提供了Firebase Cloud Messaging (FCM) 服务,它是Google Cloud Messaging (GCM) 的升级版,用于实现跨平台的消息推送。 要实现“自定义网址”的消息推送,你需要在服务器端设置一个能够...

    AndroidPN_Demo Example

    在客户端代码中,我们需要监听GCM(Google Cloud Messaging)或FCM(Firebase Cloud Messaging,原GCM的升级版)的推送消息,当接收到消息时,触发相应的回调函数,将通知展示给用户。同时,客户端还需要处理离线...

    美丽心雨CMS v1.13 升级版

    总的来说,"美丽心雨CMS v1.13 升级版"是一款面向新闻发布领域的强大工具,其优化的缓存机制、开放的源代码以及全面的功能集,使得它成为搭建高效新闻网站的理想选择。无论是个人博客还是大型新闻门户,都可以从中...

    智慧酒店云桌面系统源码(不限制酒店数量、终端数量),支持轮播图、开机启动视频、APP推送、直播滚动字幕

    APP推送功能是现代酒店服务的重要组成部分,通过智能设备发送通知,如房间服务请求、优惠信息或者酒店设施的使用指南,可以实现更即时、个性化的服务。此外,直播滚动字幕功能使得酒店能够实时发布通知,比如天气...

    Rong Cloud Server SDK in Java.zip

    1. 消息推送:SDK支持多种消息类型,包括文本、图片、语音、位置、自定义消息等,可实现一对一、一对多的消息推送。 2. 用户管理:提供用户注册、登录、注销等接口,便于对用户账号进行管理。 3. 聊天室与群组:支持...

    移动开发平台mPaaS参考手册

    整体而言,mPaaS参考手册是一份全面的开发文档,涵盖了移动应用开发的多个环节,包括但不限于框架搭建、功能实现、性能分析、实时发布、消息推送和数据同步等。它不仅为开发者提供了技术实现的指导,还为解决开发...

    Bmob_AndroidSDK_V3.4.3_0828

    Bmob是一家提供后端云服务的公司,其Android SDK使得开发者可以便捷地接入数据库存储、用户管理、推送通知等功能,从而专注于应用的核心业务开发,而无需关心后端基础设施的搭建和维护。 这个特定版本(V3.4.3)...

    问答系统v3.7非常不错的一款ask2在线问答解惑系统网站源码更新日志详细,可以自己搭建起来看看.txt

    - **消息推送机制**:新增消息推送功能,包括问题被回答、评论、点赞等多种场景下的实时通知。 - **优化搜索算法**:提高了搜索结果的相关性和准确性,增加了关键词高亮显示等功能。 - **移动端适配**:优化了移动...

    飞鸽传书.zip

    6. **推送服务**:为了实现实时消息推送,开发者通常会借助第三方推送服务,如Firebase Cloud Messaging (FCM) 或极光推送,它们能在后台接收服务器消息并显示通知。 7. **安全性考虑**:在开发过程中,应确保用户...

    workflow实现的源代码

    - `workerman-push`:Workerman是一个高性能的PHP异步事件驱动的网络通信框架,这里的"push"可能是指服务端推送功能,用于实时通信,比如通知或消息推送。 综上所述,这个源代码包可能是一个基于Java和PHP开发的OA...

    社交一对一视频交友源码_直播同城视频聊天系统_搭建部署开发定制带原生安卓苹果app.txt

    这类源码通常包含核心功能模块,如用户注册登录、视频通话、消息推送等,能够帮助开发者快速搭建起一个具备基本社交功能的应用程序。 #### 二、直播同城视频聊天系统介绍 直播同城视频聊天系统是一种结合了地理...

    聊天系统增强版.zip

    6. **消息推送服务**:为了确保用户即使在离线状态下也能接收到新消息,系统可能集成了消息推送服务,如Firebase Cloud Messaging (FCM) 或 Apple Push Notification service (APNs)。 7. **负载均衡与高可用性**:...

    手机测试详解+monkey稳定性测试

    消息推送是提高用户活跃度的重要手段之一,需确保其稳定可靠。 - **测试内容**: - 消息能否成功推送到目标用户。 - 根据用户属性(级别、地区等)定向推送。 - 消息的有效期设置是否合理。 - 点击推送消息后...

    大型集团SAP数字升级产品方案(豪华版).pptx

    SAP Fiori不仅支持浏览器应用,还提供了SAP Fiori Client,提供离线应用数据、通知推送等功能,以满足移动设备用户的需求。通过CoPilot,实现业务协同工作,进一步提升工作效率。 综上所述,该方案通过前台的用户...

    12580求职通产品介绍.doc

    2. **职位速递**:作为职场快讯的升级版,侧重于发布知名企业和大型企业的热门招聘信息,同时每周赠送一期彩信人才报,增强信息的时效性和针对性。 3. **短信下发时间管理**:职场快讯和职位速递的短信推送有明确的...

    NucleusServer一个可配置的多功能更新服务器用于所有的Electron应用

    Electron 允许开发者使用 HTML、CSS 和 JavaScript 构建跨平台的桌面应用,但随着应用的不断升级和改进,如何便捷地将新版本推送给用户是开发者必须面对的问题。Nucleus Server 正是为解决这一问题而生,它允许...

Global site tag (gtag.js) - Google Analytics