最近使用MQTT,安装Mosquitto试一下,并记录下来。

软件准备

从官网获取安装包:

wget http://mosquitto.org/files/source/mosquitto-1.4.14.tar.gz

还需要安装一些依赖的软件,我的机器目前缺少的软件(你的机器可能缺少的更多):

yum install libuuid-devel

安装

tar -zxvf mosquitto-1.4.14.tar.gz
cd /third_pkg/mosquitto-1.4.14

修改配置文件/third_pkg/mosquitto-1.4.14/config.mkWITH_SRV:=yesno

make
make install

启动

查下命令在哪里:

[root@localhost mosquitto-1.4.14]# whereis mosquitto
mosquitto: /etc/mosquitto /usr/local/sbin/mosquitto

启动:

[root@localhost mosquitto-1.4.14]# /usr/local/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf
1501414546: mosquitto version 1.4.14 (build date 2017-07-30 19:32:01+0800) starting
1501414546: Using default config.
1501414546: Opening ipv4 listen socket on port 1883.
1501414546: Opening ipv6 listen socket on port 1883.
1501414546: Error: Invalid user 'mosquitto'.

发现无此用户,启动失败,就添加此用户adduser mosquitto,然后再次启动。

测试

消费者

启动一个消费者:

/usr/local/bin/mosquitto_sub -h 127.0.0.1 -t myqueue

生产者

使用生产者发送一个消息:

mosquitto_pub -h 127.0.0.1 -t myqueue -m "hello world"

Java客户端

依赖包

    <dependencies>
<dependency>
<groupId>org.springframework.webflow</groupId>
<artifactId>spring-webflow</artifactId>
<version>2.3.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-mqtt</artifactId>
<version>4.1.0.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.eclipse.paho</groupId>
<artifactId>mqtt-client</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>1.1.0</version>
</dependency>
</dependencies>

公共配置

连接工厂:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:int="http://www.springframework.org/schema/integration"
xmlns:int-mqtt="http://www.springframework.org/schema/integration/mqtt"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration-4.1.xsd
http://www.springframework.org/schema/integration/mqtt http://www.springframework.org/schema/integration/mqtt/spring-integration-mqtt-4.1.xsd"> <!-- 客户端工厂 -->
<bean id="clientFactory"
class="org.springframework.integration.mqtt.core.DefaultMqttPahoClientFactory">
</bean> </beans>

生产者

生产者的配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:int="http://www.springframework.org/schema/integration"
xmlns:int-mqtt="http://www.springframework.org/schema/integration/mqtt"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration-4.1.xsd
http://www.springframework.org/schema/integration/mqtt http://www.springframework.org/schema/integration/mqtt/spring-integration-mqtt-4.1.xsd"> <!-- Spring中引入公共配置文件 -->
<import resource="classpath:spring-integration-mqtt-common.xml" /> <bean id="mqttPahoMessageHandler" class="org.springframework.integration.mqtt.outbound.MqttPahoMessageHandler" >
<constructor-arg name="url" value="tcp://192.168.1.101:1883"></constructor-arg>
<constructor-arg name="clientId" value="CLIENT_001"></constructor-arg>
<constructor-arg name="clientFactory" ref="clientFactory"></constructor-arg>
</bean> </beans>

生产者:

package com.nicchagil.springintegrationmqttexervice;

import java.util.concurrent.TimeUnit;
import java.util.logging.Logger; import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.integration.mqtt.outbound.MqttPahoMessageHandler;
import org.springframework.integration.mqtt.support.MqttHeaders;
import org.springframework.integration.support.MessageBuilder;
import org.springframework.messaging.Message; public class Producer { private static Logger logger = Logger.getLogger("Producer"); public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"spring-integration-mqtt-producer.xml"});
MqttPahoMessageHandler mqttPahoMessageHandler = context.getBean("mqttPahoMessageHandler", MqttPahoMessageHandler.class); for (int i = 1; i < 10; i++) {
send(mqttPahoMessageHandler, "hello world " + i); try {
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} private static void send(MqttPahoMessageHandler mqttPahoMessageHandler, String payload) {
Message<String> message = MessageBuilder.withPayload(payload)
.setHeader(MqttHeaders.TOPIC, "myqueue")
.setHeader(MqttHeaders.RETAINED, true)
// .setHeader(MqttHeaders.DUPLICATE, true)
.build();
mqttPahoMessageHandler.handleMessage(message);
logger.info("发送成功:" + message);
} }

消费者

消费者配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:int="http://www.springframework.org/schema/integration"
xmlns:int-mqtt="http://www.springframework.org/schema/integration/mqtt"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration-4.1.xsd
http://www.springframework.org/schema/integration/mqtt http://www.springframework.org/schema/integration/mqtt/spring-integration-mqtt-4.1.xsd"> <!-- Spring中引入公共配置文件 -->
<import resource="classpath:spring-integration-mqtt-common.xml" /> <!-- 消息适配器 -->
<int-mqtt:message-driven-channel-adapter id="mqttInbound" client-id="CLIENT_002" url="tcp://192.168.1.101:1883"
topics="myqueue" qos="1" client-factory="clientFactory"
auto-startup="true" send-timeout="12" channel="myChannel" /> <!-- 频道 -->
<int:channel id="myChannel" /> <!-- 消息处理激活类 -->
<int:service-activator id="myServiceActivator"
input-channel="myChannel" ref="myConsumer" method="consumerForBusiness" /> <!-- 消息处理业务类 -->
<bean id="myConsumer" class="com.nicchagil.springintegrationmqttexervice.MyConsumer" /> </beans>

消费者业务:

package com.nicchagil.springintegrationmqttexervice;

import java.util.Random;
import java.util.concurrent.TimeUnit;
import java.util.logging.Logger; public class MyConsumer { Logger logger = Logger.getLogger("MyConsumer"); public void consumerForBusiness(String message) {
logger.info("开始处理:" + message); int random = new Random().nextInt(2); // 这里只测试0、1两种情况。TODO 2即抛出异常的情况需另外处理
if (random == 0) {
logger.info("模拟业务正常完成"); } else if (random == 1) {
logger.info("模拟处理业务需时一段时间");
try {
TimeUnit.SECONDS.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } else if (random == 2) {
logger.info("模拟抛出异常");
throw new RuntimeException("模拟抛出异常"); } logger.info("完成处理:" + message);
} }

启动消费者:

package com.nicchagil.springintegrationmqttexervice;

import java.io.IOException;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Boot {

    public static void main(String[] args) throws IOException {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"spring-integration-mqtt-consumer.xml"});
context.start(); System.in.read();
} }

运行结果

生产者日志:

七月 31, 2017 12:30:28 上午 com.nicchagil.springintegrationmqttexervice.Producer send
信息: 发送成功:GenericMessage [payload=hello world 1, headers={mqtt_retained=true, id=1f6aa8be-9346-ec9b-9b82-9cc755e2d79b, mqtt_topic=myqueue, timestamp=1501432228351}]
七月 31, 2017 12:30:31 上午 com.nicchagil.springintegrationmqttexervice.Producer send
信息: 发送成功:GenericMessage [payload=hello world 2, headers={mqtt_retained=true, id=473c3a83-93f9-37fa-2857-ab430f96b12b, mqtt_topic=myqueue, timestamp=1501432231434}]
七月 31, 2017 12:30:34 上午 com.nicchagil.springintegrationmqttexervice.Producer send
信息: 发送成功:GenericMessage [payload=hello world 3, headers={mqtt_retained=true, id=82ef81ec-2ec1-952e-8bef-fba0d2287bda, mqtt_topic=myqueue, timestamp=1501432234437}]

消费者日志:

七月 31, 2017 12:30:28 上午 com.nicchagil.springintegrationmqttexervice.MyConsumer consumerForBusiness
信息: 开始处理:hello world 1
七月 31, 2017 12:30:28 上午 com.nicchagil.springintegrationmqttexervice.MyConsumer consumerForBusiness
信息: 模拟业务正常完成
七月 31, 2017 12:30:28 上午 com.nicchagil.springintegrationmqttexervice.MyConsumer consumerForBusiness
信息: 完成处理:hello world 1
七月 31, 2017 12:30:31 上午 com.nicchagil.springintegrationmqttexervice.MyConsumer consumerForBusiness
信息: 开始处理:hello world 2
七月 31, 2017 12:30:31 上午 com.nicchagil.springintegrationmqttexervice.MyConsumer consumerForBusiness
信息: 模拟业务正常完成
七月 31, 2017 12:30:31 上午 com.nicchagil.springintegrationmqttexervice.MyConsumer consumerForBusiness
信息: 完成处理:hello world 2
七月 31, 2017 12:30:34 上午 com.nicchagil.springintegrationmqttexervice.MyConsumer consumerForBusiness
信息: 开始处理:hello world 3
七月 31, 2017 12:30:34 上午 com.nicchagil.springintegrationmqttexervice.MyConsumer consumerForBusiness
信息: 模拟处理业务需时一段时间
七月 31, 2017 12:30:44 上午 com.nicchagil.springintegrationmqttexervice.MyConsumer consumerForBusiness
信息: 完成处理:hello world 3

【MQTT】Mosquitto的安装与使用流水记的更多相关文章

  1. Centos7-mqtt消息中间件mosquitto的安装和配置

    在以前发布的博客"菜鸟是如何打造智能家居系统的"文章最后我提到了使用MQTT协议作为云平台和设备之间的通信协议以达到消息传递的实时性,手机的消息推送也大多基于这种平台,首先搬来一段 ...

  2. Android开发笔记之《远程控制(MQTT|mosquitto) && (ProtocalBuffer | GRPC)》

    Android推送方案分析(MQTT/XMPP/GCM): http://www.open-open.com/lib/view/open1410848945601.htmlMQTT官网: http:/ ...

  3. [3] MQTT,mosquitto,Eclipse Paho---怎样使用 Eclipse Paho MQTT工具来发送订阅MQTT消息?

    在上两节,笔者主要介绍了 MQTT,mosquitto,Eclipse Paho的基本概念已经怎样安装mosquitto. 在这个章节我们就来看看怎样用 Eclipse Paho MQTT工具来发送接 ...

  4. 一、Mosquitto 介绍&安装

    一.Mosquitto 介绍 一款实现了消息推送协议 MQTT v3.1 的开源消息代理软件,提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单,比如现在应用广泛的 ...

  5. 13.首次安装CY7C68013A驱动失败记(结果竟然是这样)

    原文地址:首次安装CY7C68013A驱动失败记(结果竟然是这样)作者:孙茂多 今天把68013A-56焊接在CCD2的CPLD PCB上,配套的EEPROM存储器还没有焊接上,所以想用它试验一下Cy ...

  6. mosquitto centos安装配置

    周末弄wordpress的Mysql,一不小心把wordpress弄不好了,写了的好几遍文章也没有了,一怒之下,把整个系统重装了,安装了不带任何软件的新系统,重新搭一遍. 0.安装ftp服务器 #yu ...

  7. mqtt mosquitto 源码安装

    下载地址 ububtu  : wget https://codeload.github.com/eclipse/mosquitto/zip/master 安装依赖 sudo apt-get insta ...

  8. MQTT消息中间件Mosquitto的安装和配置

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  9. Ubuntu 16.04安装测试MQTT Mosquitto

    环境:Ubuntu 16.04 介绍MQTT MQTT是一种机器到机器的消息传递协议,旨在为“物联网”设备提供轻量级的发布/订阅通信.它通常用于地理跟踪车队,家庭自动化,环境传感器网络和公用事业规模数 ...

随机推荐

  1. moodle3.15+,mysql完全的Unicode支持配置

    https://docs.moodle.org/dev/Releases,moodle个版本升级的主要内容和改动 在windows是mysql.ini  linux 下是mysql.cnf 因为MyS ...

  2. Burp Suite之Intruder模块(四)

    Burp Suite之Intruder模块(三) Intruder介绍: Burp intruder是一个强大的工具,用于自动对Web应用程序自定义的攻击.它可以用来自动执行所有类型的任务您的测试过程 ...

  3. go语言爬虫 - TapTap用户都喜欢些什么游戏

    前面的废话 说到爬虫,首先想到的当然是python~ 它在机器学习.爬虫数据分析领域可谓是如日中天,十分热门.但我最近在学习go语言,所以就用go写了 TapTap社区 这是一个高品质的游戏分享社区, ...

  4. js类型判断-丰富加好用

    一, 自己有时候写一些东西,要做类型判断,还有测试的时候,对于原生的和jQuery中的类型判断,实在不敢恭维,所以就写了一个好用的类型判断,一般情况都够用的. function test(type) ...

  5. Alpha冲刺随笔—:第一天

    课程名称:软件工程1916|W(福州大学) 作业要求:项目Alpha冲刺(十天冲刺) 团队名称:葫芦娃队 作业目标:在十天冲刺里对每天的任务进行总结. 随笔汇总:https://www.cnblogs ...

  6. Bootstrsp 表单

    摘要:bootstrap提供了三种表单布局:垂直表单,内联表单和水平表单.本文主要对这三种表单布局做一下基础的介绍,以及对表单控件做简要概括. 1.垂直表单 垂直表单也称基础表单.其基本结构如下: & ...

  7. 洛谷.3809.[模板]后缀排序(后缀数组 倍增) & 学习笔记

    题目链接 //输出ht见UOJ.35 #include<cstdio> #include<cstring> #include<algorithm> const in ...

  8. 一款功能强悍的web磁盘管理工具 (A powerful web disk management tools)

    https://github.com/kingAnyWHere/web-ftp web-ftp 一款功能强悍的web磁盘管理工具 (A powerful web disk management too ...

  9. BZOJ4460 : [Jsoi2013]广告计划

    首先预处理出$f[i][j]$表示第$i$位是字符$j$的字符串集合. 考虑枚举答案$n$,那么模式串中模$n$相同的字符都要按顺序在同一行出现. 设$g[i][j]$表示第$i$列开始出现模$n$为 ...

  10. Vue插件写、用详解(附demo)

    出处http://blog.csdn.net/qq20004604 Vue插件 1.概述 简单来说,插件就是指对Vue的功能的增强或补充. 比如说,让你在每个单页面的组件里,都可以调用某个方法,或者共 ...