一、java后台调用MQTT

准备工作:需要导入的jar包

<!-- mqtt依赖包-->
<dependency>
<groupId>org.fusesource.mqtt-client</groupId>
<artifactId>mqtt-client</artifactId>
<version>1.14</version>
</dependency>
1.发布消息

import org.fusesource.hawtbuf.AsciiBuffer;
import org.fusesource.hawtbuf.UTF8Buffer;
import org.fusesource.mqtt.client.Future;
import org.fusesource.mqtt.client.FutureConnection;
import org.fusesource.mqtt.client.MQTT;
import org.fusesource.mqtt.client.QoS;
import java.util.LinkedList;

/**
* MQTT消息发送
* @param topics 主题
* @param data 发送内容
* @throws Exception
*/
public static void checkMQTT(String topics,String data) throws Exception {
String user = env("ACTIVEMQ_USER", "admin"); //mqtt账号
String password = env("ACTIVEMQ_PASSWORD", "admin"); //mqtt密码
String host = env("ACTIVEMQ_HOST", "localhost"); //地址
int port = Integer.parseInt(env("ACTIVEMQ_PORT", "1883")); //端口号

String DATA = data;//发送的信息
String body = "";
for( int i=0; i < DATA.length(); i ++) {
body += DATA.charAt(i%DATA.length());
}

UTF8Buffer bodys = new UTF8Buffer(body); //进行编码转换,防止无法发送中文
MQTT mqtt = new MQTT();
mqtt.setHost(host, port);
mqtt.setUserName(user);
mqtt.setPassword(password);

FutureConnection connection = mqtt.futureConnection();
connection.connect().await();

final LinkedList<Future<Void>> queue = new LinkedList<Future<Void>>();
UTF8Buffer topic = new UTF8Buffer(topics); //对主题进行编码转换,防止中文异常

queue.add(connection.publish(topic, new AsciiBuffer(bodys), QoS.AT_LEAST_ONCE, false)); //发送mqtt

while( !queue.isEmpty() ) {
queue.removeFirst().await();
}

connection.disconnect().await();

}

private static String env(String key, String defaultValue) {
String rc = System.getenv(key);
if( rc== null )
return defaultValue;
return rc;
}
2.订阅消息

public static void getTopic(String topic) throw Exception{

String user = env("ACTIVEMQ_USER", "admin");
String password = env("ACTIVEMQ_PASSWORD", "password");
String host = env("ACTIVEMQ_HOST", "localhost");
int port = Integer.parseInt(env("ACTIVEMQ_PORT", "1883"));

MQTT mqtt = new MQTT();
mqtt.setHost(host, port);
mqtt.setUserName(user);
mqtt.setPassword(password);

final CallbackConnection connection = mqtt.callbackConnection();

connection.listener(new org.fusesource.mqtt.client.Listener() {
public void onConnected() {
}
public void onDisconnected() {
}
public void onFailure(Throwable value) {
value.printStackTrace();

}

public void onPublish(UTF8Buffer utfTopic, Buffer msg, Runnable ack) {
String body = msg.utf8().toString();
if( "SHUTDOWN".equals(body)) {
long diff = System.currentTimeMillis() - start;
System.out.println(String.format("Received %d in %.2f seconds", count, (1.0*diff/1000.0)));
connection.disconnect(new Callback<Void>() {
@Override
public void onSuccess(Void value) {

}
@Override
public void onFailure(Throwable value) {
value.printStackTrace();

}
});
} else {
if( count == 0 ) {
start = System.currentTimeMillis();
}
if( count % 1000 == 0 ) {
System.out.println(String.format("Received %d messages.", count));
}
count ++;
}
ack.run();
}

});

connection.connect(new Callback<Void>() {
@Override
public void onSuccess(Void value) {
Topic[] topics = {new Topic(topic, QoS.AT_LEAST_ONCE)};
connection.subscribe(topics, new Callback<byte[]>() {
public void onSuccess(byte[] qoses) {
}
public void onFailure(Throwable value) {
value.printStackTrace();

}
});
}

@Override
public void onFailure(Throwable value) {
value.printStackTrace();

}
});

}
二、前台页面js调用MQTT

需要引入的js

<script src="js/mqttws31.js"></script>
1.页面接收 和 发送mqtt

//连接mqtt
var client,destination;
function linkMQTT() {
var host = "localhost";
var port = "61614";
var clientId ="example-68312";
var user ="admin";
var password ="admin";

client = new Messaging.Client(host, Number(port), clientId);

client.onConnect = onConnect;

client.onMessageArrived = onMessageArrived;
client.onConnectionLost = onConnectionLost;

client.connect({
userName:user,
cleanSession:true,
password:password,
onSuccess:onConnect,
onFailure:onFailure
});
return false;
}

//接收消息
var onConnect = function(frame) {
client.subscribe('00000001010042'); //订阅主题
client.subscribe('00000001010001');
}

//失败的操作
function onFailure(failure) {

alert(failure.errorMessage);
}

//订阅成功的操作
function onMessageArrived(message) {

alert(message.payloadString);
}

function onConnectionLost(responseObject) {
if (responseObject.errorCode !== 0) {
alert(client.clientId + ": " + responseObject.errorCode + "\n");
}
}

//发送消息
funcation sendMessage(text) {
message = new Messaging.Message(text);
message.destinationName = '00000001010001';
client.send(message);

message = new Messaging.Message(text);
message.destinationName = '00000001010042';
client.send(message);

}

配置Mqtt的更多相关文章

  1. MAC 下配置MQTT 服务器Mosquitto

    一.简单介绍   1.MQTT是IBM开发的一个即时通讯协议.MQTT是面向M2M和物联网的连接协议,采用轻量级发布和订阅消息传输机制.    2.Mosquitto是一款实现了 MQTT v3.1 ...

  2. 配置MQTT服务器

    第一步:下载一个Xshell 链接:https://pan.baidu.com/s/16oDa5aPw3G6RIQSwaV8vqw 提取码:zsb4 打开Xshell 前往MQTT服务器软件下载地址: ...

  3. 5-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(配置MQTT的SSL证书,验证安全通信)

    4-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(为域名申请SSl证书) 前面的准备工作终于完了 复制这两个证书 放到云端MQTT的这个位置,其实放哪里都可以 ...

  4. SpringBoot 集成MQTT配置

    目录 1. 前言 2. MQTT介绍 3. SpringBoot 集成MQTT 3.1 导入mqtt库 3.2 配置MQTT订阅者 3.3 配置MQTT发布者 3.4 MQTT消息处理和发送 3.4. ...

  5. vue中使用stompjs实现mqtt消息推送通知

    最近在研究vue+webAPI进行前后端分离,在一些如前端定时循环请求后台接口判断状态等应用场景用使用mqtt进行主动的消息推送能够很大程度的减小服务端接口的压力,提高系统的效率,而且可以利用mqtt ...

  6. (一)基于阿里云的MQTT远程控制(Android 连接MQTT服务器,ESP8266连接MQTT服务器实现远程通信控制----简单的连接通信)

    如果不了解MQTT的可以看这篇文章  http://www.cnblogs.com/yangfengwu/p/7764667.html http://www.cnblogs.com/yangfengw ...

  7. (二 -3-1) 天猫精灵接入Home Assistant-自动发现Mqtt设备--灯系列 esp8266程序

    设备1 上电自动注册自己是个1个开关 HASS网页和手机APP控制 外部开关上升沿中断控制 天猫精灵语音控制 一键配网 记录以往WIFI信息 设备2 上电后,自动注册自己有三个开关控制 HASS网页和 ...

  8. (二 -3-1) 天猫精灵接入Home Assistant-自动发现Mqtt设备--灯系列 实战

    #本片教程介绍了具体如何实现天猫精灵控制一个灯. 前提: HASS平台 你已经搭建一个可以在公网IP访问到的HASS平台--- 我用的是租了阿里云服务器,买了个域名,ubuntu1604系统 你已经搭 ...

  9. NB-IOT模块 M5310-A接入百度开放云IOT Hub MQTT

    目录 1.登陆百度开放云,在产品服务中选择IOT HUB 2 2.选择 创建计费套餐,目前1百万条/每月是免费的 2 3.点击管理控制台进入项目列表 4 4. 点击创建项目,项目类型选择数据型 4 5 ...

随机推荐

  1. 20155312 张竞予 Exp4 恶意代码分析

    Exp4 恶意代码分析 目录 基础问题回答 (1)如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些,用什么方法来监控. (2)如果 ...

  2. flask 搭建ssl接口

    from flask import Flask,jsonifyapp = Flask(__name__)#app.config['SERVER_NAME'] = 'example.com' @app. ...

  3. Beta冲刺(1/7)

    目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:beta冲刺(1/7) 团队部分 后敬甲(组长) 过去两天完成了哪些任务 团队完成测试答辩 整理博客 复习接口 接下来的 ...

  4. 【原创】大数据基础之Hive(2)Hive SQL执行过程之SQL解析过程

    Hive SQL解析过程 SQL->AST(Abstract Syntax Tree)->Task(MapRedTask,FetchTask)->QueryPlan(Task集合)- ...

  5. Oracle内存详解之 Library cache 库缓冲

    Oracle内存详解之 Library cache 库缓冲 2017年11月09日 11:38:39 阅读数:410更多 个人分类: 体系结构 Library cache是Shared pool的一部 ...

  6. SQL入门(1): 创建/查询/更新/连接/视图/SSMS简介

    本文介绍SQL的基本查询语句 (1) select... from  * 表示全部, 选择的东西还可以进行简单的运算, 可以列别名 select * from student; -sage from ...

  7. vs2017 winform打包

    如果没有Visual Studio Installer 说明没有安装打包插件 安装打包插件:Microsoft Visual Studio 2017 Installer Projects 工具 --& ...

  8. python---二叉树遍历

    重学. # coding = utf-8 # 二叉树遍历 class Node: """节点类""" def __init__(self, ...

  9. using 关键字的作用

    我们都知道可以使用using关键字引入命名空间,例如:using namespace std; using还有个作用是在子类中引入父类成员函数. 1) 当子类没有定义和父类同名的函数(virtual也 ...

  10. PHP AES的加密解密-----【弃用】

    mcrypt_decrypt在PHP7.*已经被弃用,取而代之的是openssl_decrypt/encrypt,请参考: PHP7.* AES的加密解密 AES加密算法 密码学中的高级加密标准(Ad ...