一、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. java对象在内存中的结构

    在HotspotJVM中,32位机器下,Integer对象的大小是int的几倍? 我们都知道在java语言规范已经规定了int的大小是4个字节,那么Integer对象的大小是多少呢?要知道一个对象的大 ...

  2. vue构造函数(根实例化时和组件实例对象选项)参数:选项详解

    实例选项(即传给构造函数的options):数据,DOM,生命周期钩子函数,资源,组合,其他 数据 data 属性能够响应数据变化,当这些数据改变时,视图会进行重渲染. 访问方式: 1.通过 vm.$ ...

  3. java.util.zip.ZipException: invalid entry size

    启动maven项目时报java.util.zip.ZipException: invalid entry size (expected 7612 but got 5955 bytes) 可能是mave ...

  4. Servlet中文件上传下载

    1.文件下载: package FileUploadAndDown; import java.io.FileInputStream; import java.io.IOException; impor ...

  5. HBSX2019 游记

    Day -4 训练戳SX2019 3月训练 ZJOI2019 Day1几天前就考了 T1真考了麻将QwQ 九条可怜的毒瘤真的是业界良心 今天中午才起,要开始调整生物钟了 9012HBOIers群里讨论 ...

  6. Docker: repository, image, container

    1. 查看image: docker images 2. 查看信息: docker info 3. 搜索image: docker search [image_name], 比如: docker se ...

  7. html5 - 地图

    demo截图: demo链接 代码: <!DOCTYPE html> <html lang="en"> <head> <meta char ...

  8. 【原创】大叔经验分享(20)spark job之间会停顿几分钟

    今天遇到一个问题,spark应用中在一个循环里执行sql,每个sql都会向一张表写入数据,比如 insert overwrite table test_table partition(dt) sele ...

  9. 资本寒冬下的android面经

    在2018年10月初,公司倒闭,无奈走上找工作的道路,不想自己平时图安逸,不思进取,再次找工作才发现,android行业也不是站在风口上,猪也能吹上天的世道了.作为技术小菜的我,再找工作那几个月真是战 ...

  10. Spring Boot整合邮件发送

    概述 Spring Boot下面整合了邮件服务器,使用Spring Boot能够轻松实现邮件发送:整理下最近使用Spring Boot发送邮件和注意事项: Maven包依赖 <dependenc ...