MqttLib封装使用

MQTT 使用

导语: 很久没写博文了,主要是太慢又经历些事,以前一直想玩硬件物联网相关的,一直没有机会进入这样的公司,好在来到杭州之后辗转反侧算是进入到类似的公司,做lot无线网沾点边的东西,原来公司使用RabbitMQ做消息通知,服务器压力大,因此改变了策略这里使用MQTT协议,作为一个资深的有经验的程序员,封装sdk的任务落在我的身上.下面做个简单介绍.注意这篇文章咱们不讲mqtt相关原理,只讲我们封装的库,因为网上对于mqtt的介绍肯定讲的比咱们们更好更详细.

一.介绍一下:

  1. 核心库引入
    implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0'

    implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'

  2. 我们对开源mqtt仓做封装适用于我们的业务场景

二.接入方式:

1. 引进 mqttLib


2. 在Application oncreate()中调用

       String host = "tcp://10.10.120.200:1882"; 改成你自己的

       String topic = "device/" + DeviceIdUtil.getDeviceId(this);//设备唯一id

       MqttOption option = new MqttOption.MqttOptionBuilder(host)//例如 "tcp://10.10.20.200:1883";

          .publish_topid(topic)  //订阅主题  拼接  "device/"   例如 "device/" + DeviceIdUtil.getDeviceId(this);

          .response_topid(topic)//接收主题  拼接   "device/"

          .username("itc")  //用户名

          .clientId(deviceId)  //设备唯一id

          .password("itc.pass")  //密码

          .build();


  CustomMqttService.startMqttService(this, option, null);

  说明: OnlineInforOption类
  此类用于设置设备上线的传输数据,
  基础数据sdk已经封装好,预留以应对服务器可能的变化,例如设备上线 type数字可能会变化,
  目前 设备上线的发布type默认传1;
  如若自定义设备上线的参数,可以构造 OnlineInforOption;没有则传null

3.自定义广播接收器用于接收数据

  IntentFilter intentFilter = new IntentFilter();
  intentFilter.addAction(MqttAction.RECEOIVER_ACTION);
  myReceiver = new MyReceiver();
  mLocalBroadcastManager.registerReceiver(myReceiver, intentFilter);

注意 :考虑数据安全性 sdk应用本地广播 LocalBroadcastManager,业务层注册也应该本地注册

广播注册方式AndroidManifest 高版本无效,业务层应当在全局application中代码注册广播,这里使用广播来做接收,是模仿了极光推送的设计理念;因为用接口显得不够优雅

广播接收到的数据

  if (intent != null) {
    String contentMessage = intent.getStringExtra(MqttAction.KEY_CONTENT_MESSAGE);//数据
    String topId = intent.getStringExtra(MqttAction.KEY_TOPID_MESSAGE);  //订阅的主题


    考虑到数据涉及到业务层,且每个项目的数据格式不同,因此不对数据做封装,这里返回服务器的原生数据;使用时候自行解析

4.发布消息,订阅消息 MqttManager

  在初始化结束后,业务可使用MqttManager 进行发布和订阅消息主题;这是一个单例

三.总结:

mqttLib,原理是本地开启后台Service封装业务mqtt相关的业务逻辑包括发布,订阅,接收消息相关;做了重连机制,同行可以借鉴用来做消息推送。https://github.com/delingli/mqttLib

你可能感兴趣的:(MqttLib封装使用)