`
huchangan2005
  • 浏览: 78190 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

使用ActiveMQ+MQTT实现Android点对点消息通知-转载

阅读更多

 

原文地址:http://blog.csdn.net/kimmking/article/details/17449019

 

实现点对点消息通知的关键问题

 

ActiveMQ使用MQTT协议,加上android上的paho包,即可简单实现消息通知功能,但是mqtt协议只支持topic,而且不能用selector,使得点对点的消息投递变成问题。

 

有两个解决思路:

 

1、每个clientId,建一个topic...这个办法对解决消息点对点投递非常有效,但是有两个大问题:

 

  • 随着用户数增多,topic数量增多,对管理性要求增大,对内存的管理也有问题。
  • 消息广播操作也变得非常麻烦,只能一个个的发送了。

 

2、另一个思路,就是在消息广播的基础上,进行点对点控制,实现某些特征的消息投递到指定的订阅者。

 

这个的实现比较简单,而且没有上面方案的大问题。代码稍微改下即可:https://github.com/apache/activemq/pull/5/files

 

其实就只添加了一个新的类: ClientIdFilterDispatchPolicy

 

可以git clone所在版本源码,然后加上这个类,mvn package以后使用。

 

也可以用我打包好的jar:http://pan.baidu.com/s/1gjaf

 

 

 

使用说明

 

本修改实现mqtt协议使用单个topic,来做消息广播和点对点的投递。

1、将本文件夹下的activemq-broker-5.9.0.jar、activemq-spring-5.9.0.jar换掉apache-activemq-5.9.0\lib下的jar。
2、参考本文件夹下activemq.xml,在topic上配置
 <dispatchPolicy>
                    <clientIdFilterDispatchPolicy />
                  </dispatchPolicy>
3、对于此配置下的所有名称以.PTP结尾的队列,
   如果要投递消息的properties里包含PTP_CLIENTID,则系统只会将此消息发给clientId为此值的订阅者;如果当前没有此clientId的订阅者,消息不会被任何人接收到。
   如果投递消息的properties里不包含PTP_CLIENTID,则消息广播给所有的订阅者。 跟正常消息投递一致。

其中后缀.PTP和键值PTP_CLIENTID,是可以配置的:
  <dispatchPolicy>
                    <clientIdFilterDispatchPolicy ptpSuffix="" ptpClientId="clientId"/>
                  </dispatchPolicy>
如上配置,使得此policy下的所有topic都起作用,且消息的properties里获取clientId的key变成clientId。

消息发布者,如果要对所有人广播消息,直接发送消息即可。
            如果要对指定的消息订阅者发消息,请在消息里设置接收者的clientId:

               message.setStringProperty(PTP_CLIENTID, clientId);则此消息只有指定的订阅者可以拿到。

 

简单测试

 

两台android设备使用MQTT协议订阅到ActiveMQ的同一个topic,clientId分别为mqtt-1001和mqtt1002;

 

写代码发两条消息,设置消息属性中PTP_CLIENTID分别为mqtt-1001和mqtt1002;

 

两个设备分别接收到自己的消息通知,相互之间没有影响。还可以测试下如果消息没有PTP_CLIENTID,两个都能收到。

分享到:
评论

相关推荐

    SpringBoot+ActiveMq+MQTT实现消息的发送和接收

    MQTT使用发布/订阅模型,发布者将消息发送到特定的主题,而订阅者则接收与他们订阅的主题相匹配的消息。 在SpringBoot项目中,我们可以通过以下步骤实现MQTT消息的发送和接收: 1. 添加依赖:在`pom.xml`文件中...

    activemq+mqtt+android通信

    但总体来说,实现“activemq+mqtt+android通信”涉及的知识点包括:ActiveMQ服务器配置、MQTT协议原理、Android MQTT客户端库的使用、Android服务的创建与管理、网络连接的建立与维护等。在实际开发中,还需考虑性能...

    ActiveMQ使用mqtt协议的实现发布消息的三种方式.txt

    java中使用消息中间件ActiveMQ的MQTT协议发布消息使用fusesource,fusesource提供三种方式实现发布消息的方式,分别是阻塞式(BlockingConnection)、回调式(CallbackConnection)和Future样式(FutureConnection)

    activemq-mqtt-demo.zip

    项目的核心功能是通过ActiveMQ实现Mqtt消息的发送和接收,这涵盖了客户端的连接、消息发布、订阅和接收等操作。 **标签解析:** - **SpringMVC**:这是一个用于构建Web应用程序的Java框架,它提供了模型-视图-控制...

    ActiveMQ MQTT Android客户端Demo

    在这个ActiveMQ MQTT Android客户端Demo中,我们将深入探讨如何在Android平台上实现MQTT通信。 首先,我们需要理解MQTT协议的基本概念。MQTT是一种基于发布/订阅模式的消息传输协议,适用于低带宽、高延迟或不可靠...

    mqtt-spy 用于ActiveMQ 的mqtt 测试 client

    总结,MQTT-Spy作为ActiveMQ的测试客户端,提供了一整套功能强大的工具,使得开发者和测试人员能够全面地测试MQTT协议的实现,确保在实际部署中,ActiveMQ与MQTT客户端的通信稳定、高效。在物联网领域,这样的测试...

    Activemq-MQTT-Websocket库Js文件mqttws31.js

    MQTT使用客户端-服务器架构,通过主题(topics)进行消息发布和订阅。 Websocket,另一方面,是一种在客户端和服务器之间建立持久连接的协议,允许双向通信。它为实时应用提供了高效、低延迟的解决方案,比如股票...

    ActiveMQ+zookeeper实现高可用和负载均衡(代码和测试)

    ### ActiveMQ+zookeeper实现高可用和负载均衡 #### 一、背景与目标 在现代分布式系统中,消息中间件如ActiveMQ扮演着重要的角色,它能够帮助应用之间进行可靠的消息传递。为了保证系统的稳定性和可靠性,通常需要...

    apollo+mqtt.jar

    本文将详细介绍如何使用 Apollo 的 MQTT 实现 Android 应用的消息推送,以及如何搭建 MQTT 服务器环境。 首先,我们来看 Apollo。Apollo 是 ActiveMQ 的分支,由 LinkedIn 开发,旨在提供低延迟、高吞吐量的消息...

    activemq-mqtt-5.8.0.jar

    官方版本,亲测可用

    ActiveMQ MQTT Android 客户端Demo

    **ActiveMQ MQTT Android ...通过这个ActiveMQ MQTT Android Demo,开发者可以学习如何在移动应用中集成MQTT通信,从而实现设备间的实时消息交换,这对于物联网应用、远程控制、实时监控等场景具有很高的实用价值。

    Android基于MQTT协议利用ActiveMQ发送消息给Android端接收

    在这个项目中,“Android基于MQTT协议利用ActiveMQ发送消息给Android端接收”指的是Android客户端应用通过MQTT协议与ActiveMQ服务器交互,实现消息的发送和接收。这是一个典型的长连接通信方式,与传统的HTTP请求...

    activeMQ+spring整合

    综上所述,"activeMQ+spring整合"是一个实用的示例,它演示了如何在Spring环境中配置和使用ActiveMQ,以实现消息的可靠传输。通过下载并研究`activemqDOME`这个压缩包中的代码,你可以更深入地理解这个整合过程,...

    P2P网络借贷平台项目SSH+Redis+ActiveMQ+POI+Shiro+AngularJS+Nginx+Quartz等

    9、用POI实现对数据的导入导出功能,及POI对excel的操作。 10、后台权限采用流行的shiro权限管理框架,通过本项目可以深入了解shiro权限框架的应用及原理。 11、项目部署采用tomcat+Nginx的集群部署方式,在...

    Spring+JMS+ActiveMQ+Tomcat实现消息服务的demo

    基于Spring+JMS+ActiveMQ+Tomcat,我使用的版本情况如下所示:Spring 3.2.0,ActiveMQ 5.4.3,Tomcat 6.0.43。本例通过详细的说明和注释,实现消息服务的基本功能:发送与接收。Spring对JMS提供了很好的支持,可以...

    ActiveMQ+Camel+Spring+jms Demo(一)

    **ActiveMQ+Camel+Spring+jms Demo(一)** 在IT行业中,集成不同组件以构建高效、可扩展的消息传递系统是一项常见的任务。本示例将深入探讨如何使用ActiveMQ作为消息中间件,Apache Camel作为集成工具,以及Spring...

    ActiveMQ实现Android端的消息推送,包含Android端和Server端的代码和使用说明

    Android端采用MQTT实现了消息的接收,接收消息的回调是messageArrived方法。 Server端的简要使用说明如下: 1、解压安装文件,执行\apache-activemq-5.13.3-bin\apache-activemq-5.13.3\bin\win64\wrapper.exe. 2、...

    Spring+JMS+ActiveMQ+Tomcat实现消息服务_服务器应用

    ### Spring+JMS+ActiveMQ+Tomcat 实现消息服务 #### 一、技术栈介绍 在本案例中,我们采用的技术栈为Spring 2.5、ActiveMQ 5.4.0 和 Tomcat 6.0.30。这些技术的结合能够有效地构建一个可靠的消息传递系统。 - **...

    mqttjs(activemq测试工具)

    本教程主要围绕`mqttjs`,一个JavaScript实现的MQTT客户端库,以及如何使用它来测试ActiveMQ服务器。`mqttjs`是一个轻量级且易于使用的库,适合在Web应用、Node.js环境中进行 MQTT 相关的开发工作。 首先,安装`...

    SpringBoot整合ActiveMQ+websocket.docx

    在Spring Boot应用中整合ActiveMQ和WebSocket,可以创建一个实时通信系统,使后端服务能够高效地推送消息到前端客户端。以下将详细解释这个过程的关键知识点: 1. **ActiveMQ**:Apache ActiveMQ是一个开源的消息...

Global site tag (gtag.js) - Google Analytics