admin管理员组

文章数量:1530013

(1)消息推送的作用
目前的手机APP多数都具有消息推送的功能。消息推送我认为其作用和价值有二:一是向所有APP用户发布消息公告;二是在业务流中及时向特定用户发出提醒,告知某请求的处理进度。


(2)消息推送的方式和解决方案
消息推送的方式有多种,大的方面分为pull和push两种方式。pull方式的主要解决方案就是定时轮询,定时隔一段时间去服务器获取一下信息,但这种方式耗费网络流量,同时也耗费电量,实时性也不是很好,因此不是一个好的解决方案。push方式的解决方案有多种。
第一,SMS的方式。通过拦截SMS消息并且解析消息内容来实现。这个方案可以实现实时操作,但成本较高,需要向移动公司缴纳费用。
第二,持久连接方式。通过与服务器保持持久连接来实现消息的实时推送。IOS采用的便是这种方式。但IOS可以不代表android也可以。因为IOS对APP管控非常严格,每台手机仅仅保持一个与服务器的连接。但Android很难实现一个可靠的服务。
第三,GCM推送消息。GCM,全称为Google Cloud Messaging,译为Google云端通讯。它能够让第三方应用的开发者把通知消息或信息从服务器发送到所有使用这个应用的安卓系统或Chrome浏览器的应用或拓展上。大部分国内应用没有使用GCM服务,而大量国外应用使用了GCM服务。原因很简单,思考下google搜索为什么不能用就能明白了。那么,我们Android系统上的应用又是如何在没有使用GCM服务的情况下把消息推送给我们的呢?继续看下面的几种方案。
第四,采用第三方推送。如极光,信鸽,小米等。有收费的也有免费的,并且都有相关的参考文档,不再赘述。
第五,采用使用了GCM服务的应用,在系统层级方面由第三方应用的服务器把消息发送给GCM服务器再转接到各个用户。比如比如Facebook、Twitter等。这个方案没有具体研究。
第六,自己搭建推送平台。稍后详述。


(3)消息推送平台的搭建
由于开发的APP需要在专网中运行,不具备采用第三方推送服务的网络环境,同时客户不想出SMS的费用,在国内GCM又可望而不可及,客户又想把业务流程实时推送给指定用户没办法只好硬着头皮自己搭建推送平台了。
实现方式概括起来说就是采用apache的activemq发送和接收消息,采用发布/订阅的模式来实现消息的实时推送。activemq是什么就不细说了,有兴趣的同行很容易在网上找到详细资料。我之所以选择activemq,其原因在于其支持 OpenWire,Stomp REST,WS Notification,XMPP,AMQP等协议,完全支持完全支持JMS1.1和J2EE 1.4规范,同时可以很容易内嵌到使用Spring的系统里面去。而我们项目的服务端就是基于spring框架的。这么说来activemq有点像为我量身定做的。尽管如此,使用过程中仍遇到了不少坑,费了不少力气。下面进行详细说明。
第一,从官网下载activemq并解压。我采用的是5.15.2版本。64位系统执行\apache-activemq-5.15.2\bin\win64\activemq.bat;32位系统执行\apache-activemq-5.15.2\bin\win32\activemq.bat即可完成activemq的启动。需要注意的是该版本activemq需要jdk1.8及以上的支持。其开放的端口可以到配置文件apache-activemq-5.15.2\conf\ activemq.xml中去看,修改端口时对transportConnector节点进行修改重启服务即可。启动完成后,浏览器输入http://localhost:8161/admin/即可验证是否正常启动。用户名和密码默认是admin/admin。
第二,消息生产者环境的配置和编码(即Spring+Activemq的集成方法)。
首先,maven环境pom.xml文件中增加依赖:
     <dependency>
		  <groupId>org.apache.activemq</groupId>
		  <artifactId>activemq-all</artifactId>
		  <version>5.9.0</version>
		</dependency>
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-jms</artifactId>  
            <version>${spring.version}</version>  
        </dependency>
其次,spring配置文件中增加如下内容:
至于为什么增加这些内容,不再详述,大家可以参考http://blog.csdn/lifetragedy/article/details/51836557。
  <!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供 -->
    <bean  >
        <property name="bro

本文标签: 消息网内服务器ActiveMqandroid