一、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. 6.linux安装tomcat

    1.下载安装包 https://tomcat.apache.org/download-80.cgi       2.用 WinSCP 将本地的安装包 上传到 linux 服务器中   3.解压安装包( ...

  2. 网络流Dinic(本篇介绍最大流)

    前言:看到网上Dinic和ISAP的比较,多数人认为ISAP更快,不容易爆栈.当然,也有少数人认为,在多数情况下,Dinic比较稳定.我认为Dinic的思路比ISAP更简明,所以选择了Dinc算法 介 ...

  3. C# - 多线程(基础)

    多线程 基础(Multithreading) 一些基本的关于线程和与其相关的概念 位)的变量赋值,这个操作就是原子性的.因为它可以一次性填充64位的二进制数据到栈上,属于一步完成,不会发生断裂.而假如 ...

  4. Easyui Tab使用

    常见问题: 1. easyui 在子tab页中打开新tab页(关于easyUI在子页面增加显示tabs的一个问题) https://blog.csdn.net/u014805893/article/d ...

  5. Copley-STM32串口+CANopen实现双电机力矩同步

    原来有个CANopen的主站卡,现在没了,只有单片机,用单片机来制作一个CANopen的主站卡貌似不是很难,但是需要时间.无奈仔细看了一个Copley的说明,决定采用CAN口+串口来实现之前的功能. ...

  6. upgrade openssl

    01  OpenSSL version wiki:https://en.wikipedia.org/wiki/OpenSSL 02 Using TLS1.3 With OpenSSL https:// ...

  7. 【原创】大数据基础之Mesos+Marathon+Docker部署nginx

    一 安装 安装docker:https://www.cnblogs.com/barneywill/p/10343091.html安装mesos:https://www.cnblogs.com/barn ...

  8. 编辑技巧分享如何给PDF添加注释

    纸质的文件想要添加注释就直接拿笔在上面添加就好了,那么电子文件要怎么添加注释呢,今天小编就以我们现在经常使用到的PDF文档来为大家分享怎么添加注释.   1. 我们需要在百度中搜索并下载并安装一款PD ...

  9. sqlalchemy的使用

    from sqlalchemy import Column, Integer, String, Text, ForeignKey, DateTime, UniqueConstraint, Index ...

  10. ionic 3 热更新 Hot Code Push

    最近用ionic 3 做的app业务做的差不多了,突然想到以后app如果有更新该怎么搞?想到我们的app后期更新应该不大,,最多就是改改bug和增加下用户体验,如果只有一些小的更新,然后提交各个应用商 ...