精华内容
下载资源
问答
  • Spring Jms异步消息推送

    千次阅读 2015-08-31 17:32:19
    最近公司项目业务要求用户下单之后发送邮件通知功能,...因此,我在这里使用了异步消息推送服务,使用的技术:activeMQ+spring+jms,利用spring自带jms功能,实现了异步消息推送,这样即使邮件发送失败也不会影响主程

    最近公司项目业务要求用户下单之后发送邮件通知功能,邮件发送功能我使用的是spring自带的mail功能见我的其他博客有讲解,但是邮件这段加入进去之后不能够影响原有的程序功能,比如:邮件发送失败导致系统报异常影响订单交易程序,因此,我在这里使用了异步消息推送服务,使用的技术:activeMQ+spring+jms,利用spring自带jms功能,实现了异步消息推送,这样即使邮件发送失败也不会影响主程序。好了,废话说多了,见代码。

    //配置文件

    <!-- started spring-jms config -->
    	<context:component-scan base-package="com.maimai.jms"/>
    	<!-- connection to amq -->
    	<amq:connectionFactory id="connectionFactory" 
    		brokerURL="tcp://localhost:61616"/>
    	<amq:queue id="queue" physicalName="spitter.queue"></amq:queue>
    	
    	<bean id="jsmTemplate" class="org.springframework.jms.core.JmsTemplate">
    		<property name="connectionFactory" ref="connectionFactory"></property>
    	</bean>
    	<jms:listener-container connection-factory="connectionFactory">
    		<jms:listener destination="spitter.queue" ref="jmsreciever" method="getStr"/>
    	</jms:listener-container>
    	<bean id="jmsreciever" class="com.maimai.jms.RecieverJMS" />
    	<!-- ended spring-jms config -->

    //发送消息定义

    package com.maimai.jms;
    
    import javax.jms.JMSException;
    import javax.jms.Message;
    import javax.jms.Session;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.jms.core.JmsTemplate;
    import org.springframework.jms.core.MessageCreator;
    import org.springframework.stereotype.Component;
    
    @Component
    public class SenderJMS {
    	
    	@Autowired
    	JmsTemplate jmsTemplate;
    	
    	public void send(final String str){
    		
    		
    		this.jmsTemplate.send("spitter.queue", new MessageCreator() {
    			
    			public Message createMessage(Session session) throws JMSException {
    				// TODO Auto-generated method stub
    				
    				
    				return session.createTextMessage(str);
    			}
    		});
    	}
    	
    	
    }
    

    //接收消息定义

    package com.maimai.jms;
    
    import javax.jms.JMSException;
    import javax.jms.TextMessage;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.jms.core.JmsTemplate;
    import org.springframework.stereotype.Component;
    
    @Component
    public class RecieverJMS {
    	
    	@Autowired
    	JmsTemplate jmsTemplate;
    	
    	public void getStr(String str) throws JMSException{
    	//	TextMessage tm = (TextMessage) jmsTemplate.receive();
    		
    	//	String str = tm.getText();
    		
    		System.out.println("==================================str="+str);
    	}
    }
    

    //程序调用jms,关键代码

    public String Login() throws NoSuchAlgorithmException, UnsupportedEncodingException{
    		this.jms.send("hello world !");
    		String result = Constant.JSON_EMPTY;}

    //打印结果

    2015-08-31 17:31:06,138 [http-8080-4] DEBUG [org.springframework.jms.core.JmsTemplate] - Sending created message: ActiveMQTextMessage {commandId = 0, responseRequired = false, messageId = null, originalDestination = null, originalTransactionId = null, producerId = null, destination = null, transactionId = null, expiration = 0, timestamp = 0, arrival = 0, brokerInTime = 0, brokerOutTime = 0, correlationId = null, replyTo = null, persistent = false, type = null, priority = 0, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = null, marshalledProperties = null, dataStructure = null, redeliveryCounter = 0, size = 0, properties = null, readOnlyProperties = false, readOnlyBody = false, droppable = false, text = hello world !}
     2015-08-31 17:31:06,145 [org.springframework.jms.listener.DefaultMessageListenerContainer#0-1] DEBUG [org.springframework.jms.listener.DefaultMessageListenerContainer] - Received message of type [class org.apache.activemq.command.ActiveMQTextMessage] from consumer [ActiveMQMessageConsumer { value=ID:wwsoft-PC-63011-1441013456482-0:1:1:1, started=true }] of session [ActiveMQSession {id=ID:wwsoft-PC-63011-1441013456482-0:1:1,started=true}]
     ==================================str=hello world !
    2015-08-31 17:31:06,174 [http-8080-4] DEBUG [org.mybatis.spring.SqlSessionUtils] - Creating a new SqlSession




    展开全文
  • SpringBoot集成DingTalk钉钉机器人实现消息同步/异步预警推送

    V2.0版本新增支持以下功能

    • 新增Dinger层对消息对象配置指定钉钉机器人
    • 新增Dinger层统一管理消息对象,仅支持text和markdown格式
      • 支持xml方式配置
      • 支持注解方式配置
    • 新增关闭指定消息体和XXXDinger内定义的所有消息体

    SpringBoot集成DingTalk钉钉机器人实现消息同步/异步预警推送 2.0版本

     

    开发环境说明

    • JDK1.8
    • springboot版本: 2.0.3.RELEASE

     

    快速入门

    V1.0快速使用文档

     


    1.X版本使用文档


    引入maven依赖

    <dependency>
    展开全文
  • SpringBoot集成DingTalk钉钉机器人实现消息同步/异步预警推送 2.0版本

    SpringBoot集成DingTalk钉钉机器人实现消息同步/异步预警推送1.0版本

     

    开发环境说明

    • JDK1.8
    • springboot版本: 2.0.3.RELEASE

     

    快速入门

    V2.0快速使用文档

     


    2.X版本使用文档


    jar包依赖

    <dependency>
        <groupId>com.github.answerail
    展开全文
  • PHP 实现 异步多任务模板消息任务推送 实现功能点 1:异步发送,添加端只管添加,不需要考虑发送 2:定时定点,误差不超过5s(任务多会排队) 3:保证每条消息发送成功(尝试N次后自动丢弃) 4:可设置多线程 5:保证不重复发送 ...

    PHP 实现 企业级 异步多任务模板消息任务推送

    实现功能点

    1:异步发送,添加端只管添加,不需要考虑发送
    2:定时定点,误差不超过5s(任务多会排队)
    3:保证每条消息发送成功(尝试N次后自动丢弃)
    4:可设置多线程
    5:保证不重复发送

    实现原理
    crontab(定时执行) +php(实现推送)+mysql(消息存储)

    步骤
    1:创建消息表,保存消息(友情提示 注意索引)

    CREATE TABLE `sent_tpl_task` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
       `tpl_id` varchar(64) NOT NULL DEFAULT '', COMMENT '模板消息id',
      `data` varchar(2048) NOT NULL DEFAULT '', COMMENT '模板消息json',
      `send_time` int(11) NOT NULL DEFAULT '0',
      `status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '0 删除 1待发送 2已成功 3发送失败',
      `do_times` tinyint(4) NOT NULL DEFAULT '0',
      `err_msg` varchar(255) NOT NULL DEFAULT '',
      `remark` varchar(255) NOT NULL DEFAULT '' COMMENT '备注',
      PRIMARY KEY (`id`),
      KEY `dt_st_s` (`do_times`,`send_time`,`status`) USING BTREE,
      KEY `tpl_id` (`tpl_id`) USING BTREE
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
    

    2:PHP MinuteTask(定时任务入口)

    <?php
    /**
     * Created by PhpStorm.
     * User: 05
     * Date: 2019/7/12
     * 此文件由Crontab每分钟执行一次
     */
    
    $day=date('d');
    $h = date('H');
    $min = date('i');
    
    $host=$_SERVER['HTTP_HOST'];
    if (!empty($host)){
        return ;//外部访问 直接返回
    }
    
    
    $host='http://www.test.com'; //Task 项目域名
    
    doTplTask($host);//每分钟执行
    
    //每10分钟执行
    if ($min%10==0){
    //TOOD other
    }
    
    //这里为了保证所有任务都能执行,使用http 非阻塞访问task,task 应该直接返回true 后在执行任务
    
    function doTplTask($host){
        $token="m_token";//自定义token,防止攻击
        $url =$host.'/api/task/doTempleMsgTask?m_token='.$token;
        $task_count=1;//大于0 并发大要考虑带宽
        for ($i=0;$i<$task_count;$i++){
            httpsPost($url);
        }
    
    }
    
    
    //使用http 请求
    function httpsPost($url, $data = null)
    {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
        if (!empty($data)) {
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }
    
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($curl);
        curl_close($curl);
    
        return $output;
    }
    
    

    Task 处理

    <?php
    
    namespace app\Api\controller;
    use think\Controller;
    use think\Exception;
    
    class Task extends Controller {
    
    	//处理消息
        public function doTempleMsgTask(){
            echo true;
            fastcgi_finish_request();//直接返回成功 保证上游任务调用的实时完成
    
    		//token 验证,防止外部攻击
            $token=input("m_token");
            if (empty($token)){
            	//自行验证token
                exit();
            }
    
    
            $t=time();
            $wxmsg = load_wechat('message'); //加载微信模板消息类库
            
            //进入工作模式 
            for (;;){
                try{
    				//每条进程最多执行一分钟 自动结束,等带下一个进程
                    if (time()-$t>59){
                        exit("time over");
                    }
    				
    				//这里必须开启事务,不然多任务时可能拿到同一个消息
                    model("TplTask")->startTrans();
    
    				//这里获取消息,并发高数据量大注意建立索引 或考虑使用redis 代替(注意持久化) 
                    $task=model("TplTask")
                           ->field("id")  //只取主键,提高并发
                           //条件为状态 未发送 and 发送时间<= 当前时间,执行次数小于规定次数
                        ->where(array('status'=>1,'send_time'=>array('elt',time(),'do_times'=>array('lt',1))))
                        //排序,执行次数,发送时间
                        ->order('do_times,send_time')
                    	//必须加锁写锁,防止并发重复读取
                        ->lock(true)
                        ->find();
                        
    				//任务表为空 则 休息5秒,防止频繁操作空数据库
                    if (empty($task)){
                        model("TplTask")->commit();
                        sleep(5);
                        continue;
                    }
                    
                    //根据id 修改状态,直接提交事务,减少事务时间
                    model("TplTask")->where(array('id'=>$task['id']))->update(array('do_times'=>1,'status'=>2));
                    model("TplTask")->commit();
    				
    				//根据id 找到数据
    				   $task=model("TplTask")
                        ->where(array('id'=>$task['id']))
                        ->find();
    				//发送数据
                    $data=json_decode($task['data'],1);
                    $result=$wxmsg->sendTemplateMessage($data);
                    if ($result['errcode']!=0){
                   		 //发送失败后修改状态跟次数,并记录错误信息
                        model("TplTask")->where(array('id'=>$task['id']))->update(array('status'=>3,'err_msg'=>$result['errcode']."|".$result['errmsg']));
                    }
    
                }catch (Exception $e){
    
                }
            }
        }
    
    }
    

    3:crontab 执行

    * * * * * php /home/wwwroot/Test/MinuteTask.php
    
    展开全文
  • Android消息推送:第三方消息推送平台详细解析

    万次阅读 多人点赞 2016-10-19 19:33:50
    消息推送在Android开发中应用的场景是越来越多了,比如说电商产品进行活动宣传、资讯类产品进行新闻推送等等,如下图: 本文将介绍Android中实现消息推送的第三方推送的详细解决方案 阅读本文前,建议先阅读我的写...
  • web创建消息推送保存至数据库后,后台从数据库获取数据并异步推送;即每次获取一条数据推送,推送成功后再获取第二条数据推送,依此类推,当没有数据时处于睡眠状态。我该怎么实现。
  • 在Android开发中,消息推送功能的使用非常常见。为了降低开发成本,使用第三方推送是现今较为流行的解决方案。 今天,我将手把手教大家如何在你的应用里集成小米推送 该文档基于小米推送官方Demo,并给出简易推送...
  • servlet 3.0 聊天室 推送 异步
  • 一次http请求,后端推送多条数据,http长连接 private static final Map<Long, SseEmitter> SSE_EMITTER_MAP = new HashMap<>(16); @GetMapping("/{id}") public SseEmitter getSseEmitter(@...
  • 上次写了一篇微信模版消息推送,但是不知道怎么异步推送。导致要等它推送完几百条才能关闭网页。 然后请教了大神,和自己摸索,在此记录。 1、推送页,推送到另一个文件处理微信推送,使用fsockopen。一次性推送,...
  • 基于 RabbitMQ 的实时消息推送

    万次阅读 2018-02-23 16:59:33
    就目前来看,Web 应用的消息推送方式主要有以下几种: 1.1 Ajax短轮询 Ajax 轮询主要通过页面端的 JS定时异步刷新任务来实现数据的加载,但这种方式实时效果较差,而且对服务端的压力也较大。 ...
  • 鉴于现在运营需求的增强,消息推送在Android开发中应用的场景是十分常见 如电商的活动宣传、资讯类产品进行新闻推送等等 今天,我将全面介绍Android中实现消息推送的7种主流解决方案 目录 1....
  • Servlet3.0 异步处理 页面推送 Comet 实例
  • 我如何在线程里得到的数据传送给异步线程监听,直至前台响应? 目前 只能通过浏览器经过HTTP请求的方式实现推送响应。 目前的困难是mina server端获取到消息,怎么才能前台响应。
  • 使用Go Hijack和jQuery轻松实现异步推送服务 申明:本资源来源于互联网,如有侵权,请联系本人或者CSDN进行删除,谢谢!
  • Android 消息推送框架详解

    千次阅读 2016-10-20 15:31:53
    消息推送的概念消息推送,是指绕过手机运营商,通过TCP/IP网络传输的方式,向应用程序发送数据,这些数据包括简单的文本,图片,或者其他多媒体数据。与手机运营商发送短信的方式相比,消息推送普及性和可靠性更差。...
  • HTTP消息推送原理

    千次阅读 2016-04-22 22:18:09
    这里我们从系统结构的层面来看消息推送系统(Push Server)的基本原理。 首先需要了解几个基本的概念: HTTP长连接 翻译自http keep-alive connection和http persistent connection,又叫http connection...
  • 说Android端外推送比较烦,实际有两层意思:首先是说实现上比较麻烦,至今业界也没有找到一种完美的解决方案,Android程序员通常需要同时集成多家推送平台(如果有自己的端内推送,还要考虑与端内推送的配合);...
  • php swoole websocket消息推送

    千次阅读 2018-06-06 17:56:48
    背景:目的实现web网页端消息推送通知。传统做法,ajax轮询则太耗费资源,所以改用swoole的websocket服务器实现功能。1.用户登录成功,js的websocket进行握手;2.服务端接收到用户握手信息,保存当前用户的设备id...
  • 消息推送系统的设计

    千次阅读 2016-12-31 21:52:27
    一、消息推送系统设计需求 1、高性价比,在有限的硬件资源下,尽可能的提高消息系统的性能和可用性。 2、提高数据的一致性。 二、分析 消息推送,按数据量划分,包括两类: 1)持续的大量数据...
  • Android平台下基于泛型的南京青奥会赛事异步推送方案的设计.pdf
  • 一个异步的友盟推送 PHP Server,支持 Android 客户端。 USAGE: 前置条件: 安装 redis ,修改程序内 redis 的url;//或修改 server 和 client 数据交互方式,如 mysql 等。 注册友盟账号,开启推送服务; 启动: ...
  • 很多时候我们可能有某个信息,需要同时推送到多个接口中,推送的信息是一样的,这里主要采用了异步进行同时进行推送到各个接口中进行处理,可扩展,可维护
  • 消息推送ABC

    千次阅读 2013-05-06 11:41:38
    最近公司的几个项目都有消息推送的需求,所以五一期间一直在探索这方面的相关技术。 一、消息推送方案(轮询、长连接) 轮询:比较简单的,最容易理解和实现的就是客户端去服务器上拉信息,信息的及时性要求越...
  • 消息推送原理以及实现过程

    万次阅读 2017-07-28 11:58:27
    消息推送原理以及实现过程
  • 最近研究了两种服务器推送技术,一种是**WebSocket**技术,一种是基于**Servlet3.0**实现的服务器异步推送技术。 1. WebSocket(聊天室) WebSocket客户端连接类(javaee-api-7.0.jar) import java.io....
  • iOS远程消息推送

    千次阅读 2014-03-26 01:05:51
    苹果提供了一堆服务器,每个ios设备和这些服务器保持了一个长连接,ios版本更新提示、手机时钟校准等操作...消息推送不支持群发,只能一个一个发,消息包一般由两部分组成:标示用户手机的id(32个字节)+消息体(
  • <<<ERROR message:Broker not avalibale. content-length:0

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 64,134
精华内容 25,653
关键字:

异步消息推送