基于ubuntu16的mqtt服务器(apache-apollo1.7.1)
感谢博客:https://www.cnblogs.com/chenrunlin/p/5109028.html
需要环境:
java1.8

把文件通过finalshell扔到/usr/local目录下
使用命令
# sudo tar -zxvf apache-apollo-1.7.1-unix-distro.tar.gz

然后
我配置了一下apollo_home 更改 /etc/profile

按exc键后输入:wq保存
然后
# sudo -s
# source /etc/profile
刷新配置
再进入/var/lib
# cd /var/lib/
新建Mybroker
# /usr/local/apache-apollo-1.7.1/bin/apollo create mybroker

再更改mybroker中/etc/apollo.xml
#vim /var/lib/mybroker/etc/apollo.xml

红框中改为0.0.0.0
最后运行
# nohup /var/lib/mybroker/bin/apollo-broker run
nohup是为了关闭ssh之后也能在后台运行

注意点:
1、可能有时候需要sh命令 比如说 sh apollo create mybroker
2、阿里云必须开放apollo.xml中的端口,如61680.61681等。
3、是否成功通过ip+61680即可知道。
4、初始账号密码是admin,password,存放在etc目录的users.properties下
5、注意nohup命令运行,不然可能断开连接后自动关停服务
成功截图:

附送一下测试Demo,需要的jar包是
org.eclipse.paho.client.mqttv3-1.2.0.jar

服务器端server:
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.MqttPersistenceException;
import org.eclipse.paho.client.mqttv3.MqttTopic;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
/**
*
* Title:Server
* Description: 服务器向多个客户端推送主题,即不同客户端可向服务器订阅相同主题*/
public class Server {
public static final String HOST="tcp://IP地址:61613";
public static final String TOPIC1="toclient/1";
public static final String TOPIC2="toclient/2";
public static final String clientid="server"; public MqttClient client;
public MqttTopic topic1;
public MqttTopic topic2;
public String userName = "admin";
public String passWord = "password"; public MqttMessage message; public void connect() {
MqttConnectOptions options = new MqttConnectOptions();
options.setCleanSession(false);
options.setUserName(userName);
options.setPassword(passWord.toCharArray());
options.setConnectionTimeout(10);//设置超时时间
options.setKeepAliveInterval(20);//设置
try {
client.setCallback(new PushCallback());
client.connect(options);
topic1 = client.getTopic(TOPIC1);
topic2 = client.getTopic(TOPIC2);
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
public void publish(MqttTopic topic,MqttMessage message) throws MqttPersistenceException, MqttException {
MqttDeliveryToken token = topic.publish(message);
token.waitForCompletion();
System.out.println("消息推送成功 !"+ token.isComplete());
}
public Server() throws MqttException {
client = new MqttClient(HOST, clientid,new MemoryPersistence());
connect();
} public static void main(String[] args) throws MqttException {
Server server = new Server(); server.message= new MqttMessage();
server.message.setQos(2);
/*
QoS 0,最多一次送达。也就是发出去就fire掉。
QoS 1,至少一次送达。发出去之后必须等待ack,没有ack,就要找时机重发
QoS 2,准确一次送达。消息id将拥有一个简单的生命周期。
* */
server.message.setRetained(true);
server.message.setPayload("发送消息到Topic1".getBytes());
server.publish(server.topic1, server.message);
System.out.println(server.message.isRetained() + "----ratained状态");
}
}
监听端Client:
import java.util.concurrent.ScheduledExecutorService; import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttTopic; public class Client {
public static final String HOST="tcp://IP地址:61613";
public static final String TOPIC="toclient/1";
private static final String clientid="clientid1"; private MqttClient client;
private MqttConnectOptions options;
private String userName = "admin";
private String passWord = "password"; private ScheduledExecutorService scheduler; private void start() {
try {
client = new MqttClient(HOST, clientid);
options = new MqttConnectOptions();
options.setCleanSession(true);
options.setUserName(userName);
options.setPassword(passWord.toCharArray());
// 设置超时时间 单位为秒
options.setConnectionTimeout(10);
// 设置会话心跳时间 单位为秒 服务器会每隔1.5*20秒的时间向客户端发送个消息判断客户端是否在线,但这个方法并没有重连的机制
options.setKeepAliveInterval(20); client.setCallback(new PushCallback()); MqttTopic topic = client.getTopic(TOPIC);
options.setWill(topic, "close".getBytes(), 2, true);
client.connect(options);
int []Qos = {1};
String [] topic1 = {TOPIC};
client.subscribe(topic1,Qos);
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
} public static void main(String[] args) {
// TODO Auto-generated method stub
Client client = new Client();
client.start();
} }
回调函数 PushCallback:
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttMessage; /**
* 发布消息的回调类
*
* 必须实现MqttCallback的接口并实现对应的相关接口方法CallBack 类将实现 MqttCallBack。
* 每个客户机标识都需要一个回调实例。在此示例中,构造函数传递客户机标识以另存为实例数据。
* 在回调中,将它用来标识已经启动了该回调的哪个实例。
* 必须在回调类中实现三个方法:
*
* public void messageArrived(MqttTopic topic, MqttMessage message)接收已经预订的发布。
*
* public void connectionLost(Throwable cause)在断开连接时调用。
*
* public void deliveryComplete(MqttDeliveryToken token))
* 接收到已经发布的 QoS 1 或 QoS 2 消息的传递令牌时调用。
* 由 MqttClient.connect 激活此回调。
*
*/
public class PushCallback implements MqttCallback { public void connectionLost(Throwable cause) {
System.out.println("连接断开,可以重连!");
} public void deliveryComplete(IMqttDeliveryToken token) {
// TODO Auto-generated method stub
System.out.println("deliveryComplete -- "+token.isComplete()); } public void messageArrived(String topic, MqttMessage msg) throws Exception {
// TODO Auto-generated method stub
System.out.println("接收消息主题 : "+topic);
System.out.println("接收消息Qos: "+msg.getQos());
System.out.println("接收消息 : "+ new String(msg.getPayload())); }
}
效果:
先运行client端。

再运行server端发送给订阅者:

再次查看监听端:

基于ubuntu16的mqtt服务器(apache-apollo1.7.1)的更多相关文章
- 基于mosquitto的MQTT服务器---SSL/TLS 单向认证+双向认证
基于mosquitto的MQTT服务器---SSL/TLS 单向认证+双向认证 摘自:https://blog.csdn.net/ty1121466568/article/details/811184 ...
- 快速搭建MQTT服务器(MQTTnet和Apache Apollo)
前言 MQTT协议是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分,http://mqtt.org/. MQTT is a machine-to-machine (M2M)/" ...
- (一)基于阿里云的MQTT远程控制(Android 连接MQTT服务器,ESP8266连接MQTT服务器实现远程通信控制----简单的连接通信)
如果不了解MQTT的可以看这篇文章 http://www.cnblogs.com/yangfengwu/p/7764667.html http://www.cnblogs.com/yangfengw ...
- MQTT——服务器搭建(一)
MQTT介绍 MQTT,是IBM推出的一种针对移动终端设备的基于TCP/IP的发布/预订协议,可以连接大量的远程传感器和控制设备: 轻量级的消息订阅和发布(publish/subscribe)协议 建 ...
- mqtt服务器apollo的搭建和测试工具paho的使用
(1)前言 MQTT协议是IBM开发的一个即时通讯协议; 基于发布/订阅的消息协议,近些年来被广泛应用于能源.电力.....等硬件性能低下的远程设备,此外国内很多企业使用MQTT作为android手机 ...
- 常见MQTT服务器搭建[转载]
简介 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,它比较适合于在低带宽.不可靠的网络的进行远程传感器和控制设备通 ...
- 使用EMQ搭建MQTT服务器
前言寒假的时候开始搭建mqtt服务器,一开始使用的是RabbitMQ,基于Erlang语言.但是RabbitMQ的本职工作是AMQP,MQTT只是他的一个插件功能,似乎有些大材小用,很多MQTT的功能 ...
- MQTT服务器的搭建(Windows平台)
人工智能.智能家居越来越火,在服务器和多个终端进行通信的过程中使用传统的请求/回答(Request/Response)模式已经过时,伴随而来的是发布/订阅(Publish/Subscribe)模式-- ...
- 常见MQTT服务器搭建与试用
常见MQTT服务器搭建与试用 简介 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,它比较适合于在低带宽.不可靠 ...
随机推荐
- 【JZOJ4929】【NOIP2017提高组模拟12.18】B
题目描述 在两个n*m的网格上染色,每个网格中被染色的格子必须是一个四联通块(没有任何格子被染色也可以),四联通块是指所有染了色的格子可以通过网格的边联通,现在给出哪些格子在两个网格上都被染色了,保证 ...
- Directx11教程(7) 画一个颜色立方体
原文:Directx11教程(7) 画一个颜色立方体 前面教程我们通过D3D11画了一个三角形,本章我们将画一个颜色立方体,它的立体感更强.主要的变动是ModelClass类,在Model ...
- day39-Spring 05-Spring的AOP:不带有切点的切面
Spring底层的代理的实现: 不带切点的切面是对类里面的所有的方法都进行拦截. 做Spring AOP的开发需要两个包:一个是AOP的包,一个是AOP联盟的包(因为规范是由AOP联盟提出来的). 用 ...
- firefox扩展开发(二):用XUL创建窗口控件
firefox扩展开发(二):用XUL创建窗口控件 2008-06-11 16:57 1.创建一个简单的窗口 <?xml version="1.0"?> <?xm ...
- 集合--List&&ArrayList-LinkedList
1.8新特性 List接口中的replaceAll()方法,替换指定的元素,函数式接口编程 List 元素是有序的并且可以重复 四种add();方法 ArrayList(用于查询操作),底层是数组 ...
- oracle loader
控制文件的格式 load data infile '数据文件名' into table 表名 (first_name position(01:14) char, sur ...
- 让开发部署提速 8 倍,我参与贡献这款 IDE 插件的全过程
如何像参与开源那样,去参与一款 IDE 插件的设计? 作为一款 IDE 插件的使用者,我是否能决定下一个版本的功能? 自从产品经理银时小伙和他的开发小哥们在去年12月发布 Cloud Toolkit( ...
- Python基础:27执行环境
一:可调用对象 可调用对象,是任何能通过函数操作符“()”来调用的对象.Python 有4 种可调用对象:函数,方法,类,以及一些类的实例. 1:函数 python 有 3 种不同类型的函数对象. a ...
- 【小程序案例】支付宝小程序-MQTT模器,IoT设备通过WSS接入阿里云IoT物联网平台
支付宝小程序-MQTT模拟器通过WSS接入阿里云IoT物联网平台 小程序效果: 1. 准备工作 1.1 注册阿里云账号 开通阿里云账号,并通过支付宝实名认证 https://www.aliyun.co ...
- HZOJ 星际旅行
正解欧拉路,其实看完题解还是挺简单的,由于对欧拉路这种东西没怎么接触过,所以考试时没想出来,知识还是有漏洞啊. 另外这题的题解写的也不是很清楚(可能大佬作者觉得这是一道送分题……),首先判断联通(注意 ...