感谢博客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)的更多相关文章

  1. 基于mosquitto的MQTT服务器---SSL/TLS 单向认证+双向认证

    基于mosquitto的MQTT服务器---SSL/TLS 单向认证+双向认证 摘自:https://blog.csdn.net/ty1121466568/article/details/811184 ...

  2. 快速搭建MQTT服务器(MQTTnet和Apache Apollo)

    前言 MQTT协议是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分,http://mqtt.org/. MQTT is a machine-to-machine (M2M)/" ...

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

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

  4. MQTT——服务器搭建(一)

    MQTT介绍 MQTT,是IBM推出的一种针对移动终端设备的基于TCP/IP的发布/预订协议,可以连接大量的远程传感器和控制设备: 轻量级的消息订阅和发布(publish/subscribe)协议 建 ...

  5. mqtt服务器apollo的搭建和测试工具paho的使用

    (1)前言 MQTT协议是IBM开发的一个即时通讯协议; 基于发布/订阅的消息协议,近些年来被广泛应用于能源.电力.....等硬件性能低下的远程设备,此外国内很多企业使用MQTT作为android手机 ...

  6. 常见MQTT服务器搭建[转载]

    简介 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,它比较适合于在低带宽.不可靠的网络的进行远程传感器和控制设备通 ...

  7. 使用EMQ搭建MQTT服务器

    前言寒假的时候开始搭建mqtt服务器,一开始使用的是RabbitMQ,基于Erlang语言.但是RabbitMQ的本职工作是AMQP,MQTT只是他的一个插件功能,似乎有些大材小用,很多MQTT的功能 ...

  8. MQTT服务器的搭建(Windows平台)

    人工智能.智能家居越来越火,在服务器和多个终端进行通信的过程中使用传统的请求/回答(Request/Response)模式已经过时,伴随而来的是发布/订阅(Publish/Subscribe)模式-- ...

  9. 常见MQTT服务器搭建与试用

    常见MQTT服务器搭建与试用   简介 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,它比较适合于在低带宽.不可靠 ...

随机推荐

  1. 异步操作async await

    async函数的特点: 语义化强 里面的await只能在async函数中使用 await后面的语句可以是promise对象.数字.字符串等 async函数返回的是一个Promsie对象 await语句 ...

  2. Mac下搭建python开发环境

    目录 1. 安装brew 2. 安装 mysql 3. 安装 pycharm 4. 安装python3.6 5. 安装virtualenvwrapper 6. 虚拟环境下安装mysqlclient 1 ...

  3. KiCad EDA 如何修改 Pcbnew 线路板的背景色?

    KiCad EDA 如何修改 Pcbnew 线路板的背景色? 关于背景色,传统的原理图是白色,线路板是黑色. EDA 软件 类型 颜色 Protel 原理图 浅黄色 Protel PCB 黑色 Orc ...

  4. QT QSettings读写配置文件

    QT QSettings读写配置文件 需要用一个配置文件来保存程序的初始值,同时也需要做保存修改后的值. 那么借助于QSetting 就可以达到目的. 注意,生成的是 ini 文件! //1.创建和读 ...

  5. 通过反射 修改访问和修改属性的值 Day25

    package com.sxt.field; /* * 通过反射拿到属性值 * 修改public属性值 * 修改private属性值 * 缺点:可读性差:代码复杂 * 优点:灵活:可以访问修改priv ...

  6. 笔记:在 Windows 10 WSL Ubuntu 18.04 安装 Odoo12 (2019-06-09)

    笔记:在 Windows 10 WSL Ubuntu 18.04 安装 Odoo12 原因 为了和服务器一样的运行环境. 使用 Ubuntu 运行 Odoo 运行更快. 方便使用 Windows 10 ...

  7. Java面向对象----继承概念,super关键字

    继承概念: 继承需要符合的关系  is-a  , 父类通用更抽象,子类更特殊更具体 类之间的关系 继承体现 组合体现 实现接口体现 继承的意义 代码重用 体现不同抽象层次 extends关键字 Sup ...

  8. 动态设置iframe高度

    <%//动态设置iframe高度 %><script language="javascript" type="text/javascript" ...

  9. 2019-8-31-dotnet-使用-lz4net-压缩-Stream-或文件

    title author date CreateTime categories dotnet 使用 lz4net 压缩 Stream 或文件 lindexi 2019-08-31 16:55:58 + ...

  10. js+canvas五子棋人机大战ai算法

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...