MQTT服务器搭建-mosquitto1.4.4安装指南

Mosquitto部署(一) Mosquitto安装使用 阅读详情

Mosquitto

mosquitto是一款实现了 MQTT v3.1 协议的开源的消息代理服务软件.
其提供了非常轻量级的消息数据传输协议,采用发布/订阅模式进行工作,可用于物联设备、中间件、APP客户端之间的消息通讯。
 
mosquitto官网
http://mosquitto.org/
关于mqtt协议可参考
http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html
 

基础准备

Linux内核版本:Centos 6.5_final_64bit
安装基础软件
yum install gcc-c++
yum install cmake
yum install openssl-devel //mosquitto默认支持openssl
 
下载程序
官网下载
wget http://mosquitto.org/files/source/mosquitto-1.4.4.tar.gztar -xzvf mosquitto-1.4.4.tar.gz
cd mosquitto-1.4.4
 

编译安装

编译选项
当前的程序目录可直接编译,在编译之前需根据需要做一定的配置,否则会出现 xxx.h找不到的情况。
vim config.mk

 

config.mk包括了多个选项, 可按需关闭或开启,但一旦开启则需要先安装对应的模块
模块说明
选项
说明
make出错信息
WITH_SRV
启用c-areas库的支持,一个支持异步DNS查找的库
见http://c-ares.haxx.se
missing ares.h
WITH_UUID
启用lib-uuid支持,支持为每个连接的客户端生成唯一的uuid

missing uuid.h
WITH_WEBSOCKETS
启用websocket支持,需安装libwebsockets
对于需要使用websocket协议的应用开启
missing libwebsockets.h
 
 
 
 
 
 
安装c-areas
复制代码
wget http://c-ares.haxx.se/download/c-ares-1.10.0.tar.gztar xvf c-ares-1.10.0.tar.gz
cd c-ares-1.10.0
./configure
makesudo make install
复制代码

 

安装lib-uuid
yum install libuuid-devel

 

安装libwebsockets
复制代码
wget https://github.com/warmcat/libwebsockets/archive/v1.3-chrome37-firefox30.tar.gztar zxvf v1.3-chrome37-firefox30.tar.gz
cd libwebsockets-1.3-chrome37-firefox30
mkdir build; cd build;
cmake .. -DLIB_SUFFIX=64make install
复制代码
//若遇到以上模块无法安装的情况,可将对应模块选项关闭即可,但相应功能也将无法提供;
 
开始安装mosquitto
makemake install

 

至此程序已经安装完毕!
程序文件将默认安装到以下位置
路径程序文件
/usr/local/sbinmosquiotto server
/etc/mosquittoconfiguration
/usr/local/binutility command
 
 
 
 
修正链接库路径
由于操作系统版本及架构原因,很容易出现安装之后的链接库无法被找到,如启动mosquitto客户端可能出现找不到
libmosquitto.so.1文件,因此需要添加链接库路径

复制代码
//添加路径
vim /etc/ld.so.conf.d/liblocal.conf
/usr/local/lib64
/usr/local/lib
//刷新
ldconfig
复制代码

 

 

启动与测试

创建用户
mosquitto默认以mosquitto用户启动,可以通过配置文件修改
groupadd mosquitto
useradd -g mosuqitto mosquiotto

 

程序配置
mv /etc/mosquitto/mosquitto.conf.example /etc/mosquitto/mosquitto.conf
配置项说明
复制代码
# 服务进程的PID
#pid_file /var/run/mosquitto.pid
 
# 服务进程的系统用户
#user mosquitto
 
# 服务绑定的IP地址
#bind_address
 
# 服务绑定的端口号
#port 1883
 
# 允许的最大连接数,-1表示没有限制
#max_connections -1
 
# 允许匿名用户
#allow_anonymous true
复制代码
//关于详细配置可参考
http://mosquitto.org/man/mosquitto-conf-5.html
启动
mosquitto -c /etc/mosquitto/mosquitto.conf -d
成功将启动1883端口监听
 
客户端测试
新建两个shell端口A/B
A 订阅主题:
mosquitto_sub -t location
B 推送消息:
mosquitto_pub -t location -h localhost -m "new location"
 
可以在A窗口看到由B推送的消息,此外服务端窗口也可以看到客户端连接和端口的日志
1443083396: New client connected from 127.0.0.1 as mosqpub/31924-iZ94eb8yq (c1, k60).
1443083396: Client mosqpub/31924-iZ94eb8yq disconnected.、

 

FAQ

启动mosquitto报错
error while loading shared libraries: libwebsockets.so.4.0.0: cannot open shared object file: No such file or directory
或者
error while loading shared libraries: libmosquitto.so.1: cannot open shared object file: No such file or directory
解决方法
找不到链接库,通过locate或find命令找到libwebsockets.so.4.0.0,将其目录添加至ldconfg配置中:
vim /etc/ld.so.conf.d/liblocal.conf
/usr/local/lib64
/usr/local/lib
ldconfig
//执行ln -s 添加软连接的方式也可行

 

编译找不到openssl/ssl.h
解决方法
yum install openssl-devel

 

编译报错
mosquitto.c:871: error: ‘struct mosquitto’ has no member named ‘achan’
找不到areas.h
解决方法
安装 c-areas模块(见上文)或将config.mk中WITH_SRV选项关闭
 
make test 提示不支持协议
Address family not supported by protocol
一般是指所访问的地址类型不被支持,比如IPV6,忽略该错误即可


服务端:

package com.mysite.erp.pay.service ;

import org.eclipse.paho.client.mqttv3.* ;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence ;

/**
 *  @author  105
 *  @version  2.0.4
 *  @desc:
  *  @Created  by ${Spring} on 2018/3/26.
 */
public class ServerMQTT {
    //tcp://MQTT安装的服务器地址:MQTT定义的端口号
    public static final String  HOST =  "tcp://120.78.76.48:1883" ;
    //定义一个主题
    public static final String  TOPIC =  "topic11" ;
    //定义MQTT的ID,可以在MQTT服务配置中指定
    private static final String  clientid =  "server11" ;

   private MqttClient  client ;
   private MqttTopic  topic11 ;
   private String  userName =  "mosquitto" ;
   private String  passWord =  "" ;

   private MqttMessage  message ;

    /**
    * 构造函数
    *  @throws  MqttException
    */
    public  ServerMQTT()  throws MqttException {
      // MemoryPersistence设置clientid的保存形式,默认为以内存保存
      client =  new MqttClient( HOST ,  clientid , new MemoryPersistence()) ;
      connect() ;
   }

    /**
    *  用来连接服务器
    */
    private 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) ;

          topic11 =  client.getTopic( TOPIC) ;
      }  catch (Exception e) {
         e.printStackTrace() ;
      }
   }

    /**
    *
    *  @param  topic
    *  @param  message
    *  @throws  MqttPersistenceException
    *  @throws  MqttException
    */
    public void  publish(MqttTopic topic  , MqttMessage message)  throws MqttPersistenceException ,
         MqttException {
      MqttDeliveryToken token = topic.publish(message) ;
      token.waitForCompletion() ;
      System. out.println( "message is published completely! "+ token.isComplete()) ;
   }

    /**
    *  启动入口
    *  @param  args
    *  @throws  MqttException
    */
    public static void  main(String[] args)  throws MqttException {
      ServerMQTT server =  new ServerMQTT() ;

      server. message =  new MqttMessage() ;
      server. message.setQos( 1) ;
      server. message.setRetained( true) ;
      server. message.setPayload( "hello,topic11".getBytes()) ;
      server.publish(server. topic11  , server. message) ;
      System. out.println(server. message.isRetained() +  "------ratained状态") ;
   }
}



客户端:


package com.mysite.erp.pay.service ;

import org.eclipse.paho.client.mqttv3.MqttClient ;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions ;
import org.eclipse.paho.client.mqttv3.MqttException ;
import org.eclipse.paho.client.mqttv3.MqttTopic ;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence ;

import java.util.concurrent.ScheduledExecutorService ;

/**
 *  @author  105
 *  @version  2.0.4
 *  @desc:
  *  @Created  by ${Spring} on 2018/3/26.
 */
public class ClientMQTT {

    public static final String  HOST =  "tcp://120.78.76.48:1883" ;
   public static final String  TOPIC =  "topic11" ;
   private static final String  clientid =  "client11" ;
   private MqttClient  client ;
   private MqttConnectOptions  options ;
   private String  userName =  "admin" ;
   private String  passWord =  "password" ;

   private ScheduledExecutorService  scheduler ;

   private void  start() {
      try {
          // host为主机名,clientid即连接MQTT的客户端ID,一般以唯一标识符表示,MemoryPersistence设置clientid的保存形式,默认为以内存保存
          client =  new MqttClient( HOST ,  clientid , new MemoryPersistence()) ;
          // MQTT的连接设置
          options =  new MqttConnectOptions() ;
          // 设置是否清空session,这里如果设置为false表示服务器会保留客户端的连接记录,这里设置为true表示每次连接到服务器都以新的身份连接
          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) ;
          //setWill方法,如果项目中需要知道客户端是否掉线可以调用该方法。设置最终端口的通知消息
          options.setWill(topic ,  "close".getBytes() ,  2 , true) ;

          client.connect( options) ;
          //订阅消息
          int[]  Qos  = { 1} ;
         String[] topic1 = { TOPIC} ;
          client.subscribe(topic1 , Qos) ;

      }  catch (Exception e) {
         e.printStackTrace() ;
      }
   }

    public static void  main(String[] args)  throws MqttException {
      ClientMQTT client =  new ClientMQTT() ;
      client.start() ;
   }
}


回执

package com.mysite.erp.pay.service ;

import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken ;
import org.eclipse.paho.client.mqttv3.MqttCallback ;
import org.eclipse.paho.client.mqttv3.MqttMessage ;

/**
 *  @author  105
 *  @version  2.0.4
 *  @desc:
  *  @Created  by ${Spring} on 2018/3/26.
 */
public class PushCallback  implements MqttCallback {

    @Override
    public void  connectionLost(Throwable cause) {
      // 连接丢失后,一般在这里面进行重连
      System. out.println( "连接断开,可以做重连") ;
   }

    @Override
    public void  deliveryComplete(IMqttDeliveryToken token) {
      System. out.println( "deliveryComplete---------" + token.isComplete()) ;
   }

    @Override
    public void  messageArrived(String topic , MqttMessage message)  throws Exception {
      // subscribe后得到的消息会执行到这里面
      System. out.println( "接收消息主题 : " + topic) ;
      System. out.println( "接收消息Qos : " + message.getQos()) ;
      System. out.println( "接收消息内容 : " +  new String(message.getPayload())) ;
   }
}


原文地址:https://www.cnblogs.com/littleatp/p/4835879.html

MQTT协议之本地MQTT服务器环境搭建与测试(Mosquitto) 本篇为MQTT协议系列的第二篇,主题为本地MQTT服务器环境搭建与测试,查完完整目录点击此处 0x01 开发机环境 本文中开发机为虚拟机,虚拟机系统为Ubuntu Server 18.04。 客户端使用MQTT.fx,版本为1.7.1,最新版收费,用不了,简单测试的话,1.7.1已经足够了。 0x02 安装配置Mosquitto环境 Mosquitto是一个轻量级的开源消息代理,实现了MQTT协议,用来了解MQTT协议,当做Broker比较合适(只在开始了解的时候用了一下,感觉管理不是很方便,后面使用的都是 阅读详情

相关推荐

MQTT学习之mosquitto安装

做MQTT的开发,记录下一些学习过程。 安装包括: 1、RPM安装 2、源码安装 (一)使用RPM安装 安装环境Centos6.4 从下面的链接下载mosquitto的RPM安装包:点击打开链接(http://download.opensuse.org/repositories/home:/oojah:/mqtt/CentOS_CentOS-6/i686/) 运行安装

Netown_Ethereal的专栏 1万+

Mosquitto 安装、部署

mosquitto安装部署-linux

ziqibit的博客 1266

windows环境下mosquitto环境搭建与mqtt测试

版权声明:本文为博主pgpanda的原创文章,未经博主允许不得转载 工作需求,自己在windows下搭建了一个mosquitto环境测试mqtt 话不多说,直接上过程 环境为windows64bit 因为官网上已经找不到mosquitto的windows64位下载了,还是花了一番功夫 下载链接,mosquitto64位版与Cygwin64位版:

pgpanda的专栏 3万+

mosquitto服务器搭建及配置

mosquitto服务器搭建配置

pt 8060

Python实战:从中国气象局天擎平台自动化获取与处理雷达基数据

本文详细介绍了如何利用Python脚本实现从中国气象局天擎平台自动化获取与处理雷达基数据。通过环境搭建、安全认证、核心代码编写及工程化优化,构建了一个包含自动查询、批量下载、错误重试和格式转换的完整数据管道,旨在帮助气象水文领域的研究者与数据分析师从繁琐的手动操作中解放出来,高效管理海量数据。

ipfs8storage的博客 919

SigFit实战:从FEA到光学仿真的热力耦合分析全流程解析

在光机系统与芯片封装等精密工程领域,热与力的耦合效应是影响产品性能与可靠性的核心物理问题。有限元分析(FEA)是预测结构在热、力载荷下变形与应力的基础工具,但其结果通常无法直接用于评估光学性能。这需要一座桥梁,将物理场数据转化为光学设计语言。其核心原理在于数据映射与面形表征技术,例如通过泽尼克多项式拟合,将离散的节点位移分解为离焦、像散等标准光学像差。这项技术的工程价值在于,它实现了多物理场仿真的闭环,使工程师能在设计阶段精准预测热变形或应力对波前误差、调制传递函数等关键光学指标的影响。其典型应用场景包括高

weixin_28630185的博客 338

【MQTT】mosquitto 的 “下载、交叉编译、使用” 详细教程,手把手搭建一个MQTT Broker

本文介绍了 MQTT Broker 开源库 mosquitto 的下载、交叉编译、使用教程,如果想了解 mosquitto ,一定会有帮助。

wkd_007的博客 1万+

看完让你的RSA提升一个台阶 [GKCTF 2021]RRRRsa

我是,今天我给大家分享一个关于RSA的题目,带大家领略的魅力。今天开始前,我们先学习一下。

m0_62102520的博客 852

Windows下搭建MQTT服务器

MQ遥测传输(MQTT)是轻量级基于代理的发布/订阅的消息传输协议,设计思想是开放、简单、轻量、易于实现。这些特点使它适用于低带宽受限环境。 特点包括以下:能够搭建MQTT服务器的软件有很多,比如:本文是以mosquitto在windows下搭建过程为例进行介绍。1、进入mosquitto下载网址:https://mosquitto.org/download/,如下图: 2、点击上图中红框的链接进行下载,下载到本地计算机,如下图: 3、右键点击mosquitto-2.0.14-install-windo

分享技术,传播知识! 4万+

【故障排查】telnet连接失败:端口23不可达的深度分析与解决方案

本文深度剖析了telnet连接失败,特别是端口23不可达的常见原因与系统性解决方案。文章从客户端本地配置、服务器端服务与防火墙、中间网络路径三个层面,提供了详细的排查步骤与命令,并强调了Telnet协议的安全风险,建议使用SSH等更安全的替代方案进行远程管理与端口测试。

weixin_29306011的博客 898

企业固定资产管理的SAP实战:FICO模块配置与折旧范围设置详解

本文深入解析了SAP FICO模块中固定资产会计配置的核心实践,重点阐述了折旧范围的设计哲学与配置逻辑。通过详解折旧表、折旧范围、资产分类及折旧码等关键配置步骤,指导企业如何搭建满足多会计准则(如CAS、IFRS)与税务要求的资产管理体系,实现资产购置、折旧计提与报废清理的自动化与精准化。

wdx01234567的博客 728

Linux下MQTT环境的简单应用及搭建——之Mosquitto

前文说到最近正在研究mqtt应用的相关方案,接下来可能会陆续出好几篇相关教程。昨天,我们说完了Windows环境下【QT编译并部署QtMqtt相关环境+跑测demo】接下来,我们陆续来讲讲,Linux环境下MQTT的搭建。今天我们先来讲讲 ubuntu通过消息代理直接搭建mqtt服务器。

乐亦Lee的博客 3857

别再折腾端口了!Kali Nethunter Kex 图形化桌面连接失败的真正原因与一键修复(附Termux命令)

本文深入分析了Kali Nethunter Kex图形化桌面连接失败的真正原因,包括端口配置变更、依赖缺失和权限问题,并提供了一键修复方案和Termux命令。通过详细的诊断步骤和优化配置,帮助用户快速恢复Kex功能,提升移动安全测试效率。

weixin_42530732的博客 417

Mosquitto MQTT协议消息服务端本地Linux环境搭建详细教程

今天和大家分享一下如何在Linux系统中搭建Mosquitto MQTT协议消息服务端,并结合Cpolar内网穿透工具实现远程访问本地消息代理进行通信。Mosquitto是一个开源的消息代理,它实现了MQTT协议版本3.1和3.1.1。它可以在不同的平台上运行,包括Windows、Linux、macOS等。mosquitto可以用于物联网、传感器、移动应用程序等场景,提供了一种轻量级的、可靠的、基于发布/订阅模式的消息传递机制。

Easonmax的博客 2193

2025年(第十一届)全国大学生统计建模大赛论文及选题分析

基于数据驱动决策:整个研究围绕给定的洪水灾害相关数据进行深入挖掘和分析,从数据清洗、特征分析、模型建立到最终预测,每一步都以数据为基础,通过对数据的有效利用来揭示洪水灾害发生的相关规律和特征,为洪水灾害的风险评估和预测提供依据,符合数据引领未来决策的理念。实际应用导向:洪水灾害是现实中严重影响人类生命财产安全和社会经济发展的重要问题,本研究旨在实现对洪水灾害的预测,其成果可直接应用于防洪减灾工作,如洪水预警、风险评估与区划等,对实际防灾减灾工作具有重要的指导意义,体现了以数据为支撑服务实际应用的特点。

qq_52590045的博客 1万+

YOLOv13安装教程 手把手教你融合空间注意力机制(SAB)的RAB卷积模块 自动“聚焦”重要的特征 map指标提升8.96,准确率提升3.56

本文提出了一种改进的YOLOv13目标检测模型,通过引入RAB(残差注意力模块)显著提升了检测性能。实验结果显示,添加RAB模块后,mAP指标提升了8.96,准确率提高了3.56%。文章详细介绍了RAB模块的实现方法:1)采用多级残差连接增强特征提取能力;2)结合空间注意力机制(SAB)自动聚焦关键区域;3)通过1×1卷积实现通道维度压缩与恢复。同时提供了完整的模型移植方案,包括配置文件修改、任务处理代码调整以及模块实现细节,为YOLO系列模型的性能优化提供了有效参考。

FJN110的博客 646

搭建MQTT测试环境(一): ubuntu安装MQTT服务器 + windows安装MQTT客户端

一. 为什么选择在ubuntu下安装服务器的原因 因为考虑后使用wireshark抓取MQTT数据包来进行对MQTT协议分析, mqtt客户端使用的是eclipse.paho.ui.app(安装在windows下,后续将介绍如何安装),如果将mqtt服务器安装在windows下,那么wireshark无法捕获localhost数据包(可能有其他办法搞定,总之没必要麻烦,而且将服务器安装...

qq_29933439的博客 1万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

上一篇: Jenkins环境部署部署
下一篇: 关于Spring事物的面试题
springlovejava
博客等级 码龄9年 26粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值