MQTT再學(xué)習(xí) -- 搭建MQTT服務(wù)器及測試(轉(zhuǎn))

https://blog.csdn.net/qq_29350001/article/details/76680646















MQTT再學(xué)習(xí) -- 搭建MQTT服務(wù)器及測試

2017年08月04日 13:56:07?聚優(yōu)致成?閱讀數(shù):63793

?版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。https://blog.csdn.net/qq_29350001/article/details/76680646

最近在搞 PM2.5 采集,需要用到 MQTT 傳輸協(xié)議。協(xié)議部分看了幾天的,講的七七八八。本身在 intel 上有 寫好的MQTT 的源碼,現(xiàn)在的工作其實也就是移植到單片機上或者DM368板卡上。不過,對于之前沒有接觸過的我來說,還是從頭開始,搭建服務(wù)器及測試一下為好。

MQTT服務(wù)器有好多種,參看:Servers/Brokers

Apache-Apollo:一個代理服務(wù)器,在ActiveMQ基礎(chǔ)上發(fā)展而來,可以支持STOMP、AMQP、MQTT、Openwire、SSL和WebSockets等多種協(xié)議,并且Apollo提供后臺管理頁面,方便開發(fā)者管理和調(diào)試。

EMQ:EMQ 2.0,號稱百萬級開源MQTT消息服務(wù)器,基于Erlang/OTP語言平臺開發(fā),支持大規(guī)模連接和分布式集群,發(fā)布訂閱模式的開源MQTT消息服務(wù)器。

HiveMQ:一個企業(yè)級的MQTT代理,主要用于企業(yè)和新興的機器到機器M2M通訊和內(nèi)部傳輸,最大程度的滿足可伸縮性、易管理和安全特性,提供免費的個人版。HiveMQ提供了開源的插件開發(fā)包。

Mosquitto:一款實現(xiàn)了消息推送協(xié)議MQTT v3.1的開源消息代理軟件,提供輕量級的、支持可發(fā)布/可訂閱的消息推送模式。

這篇文章我們只講兩種,一種是?Mosquitto、另一種是 Apollo,以及它們在 linux 下和 Windows 下的安裝。

我們本篇都會來一一做講解。

參看:【MQTT】在Ubuntu下搭建MQTT服務(wù)器

一、Ubuntu 下 MQTT 服務(wù)器搭建之Apollo

(1) 首先要搞清楚什么是 Apollo?

參看:ActiveMQ's next generation of messaging

ActiveMQ Apollo?is a faster, more reliable, easier to maintain messaging broker built from the foundations of the original?ActiveMQ. It accomplishes this using a radically different threading and message dispatching?architecture. Like ActiveMQ, Apollo is a multi-protocol broker and supports STOMP, AMQP, MQTT, Openwire, SSL, and WebSockets.

翻譯一下:

ActiveMQ Apollo是從原始ActiveMQ的基礎(chǔ)構(gòu)建的更快,更可靠,更易于維護的消息代理。 它使用完全不同的線程和消息調(diào)度架構(gòu)來實現(xiàn)。 像ActiveMQ一樣,Apollo是一個多協(xié)議代理,支持STOMP,AMQP,MQTT,Openwire,SSL和WebSockets。

看到?jīng)],有支持 MQTT ?

下載:Download it today!

(2)安裝

先解壓

# sudo tar -zxvf apache-apollo-1.7.1-unix-distro.tar.gz

查看 bin/apollp.cmd

# cat apollo.cmd

@REM

@REM Licensed to the Apache Software Foundation (ASF) under one or more

@REM contributor license agreements.? See the NOTICE file distributed with

@REM this work for additional information regarding copyright ownership.

@REM The ASF licenses this file to You under the Apache License, Version 2.0

@REM (the "License"); you may not use this file except in compliance with

@REM the License.? You may obtain a copy of the License at

@REM

@REM? ? ? http://www.apache.org/licenses/LICENSE-2.0

@REM

@REM Unless required by applicable law or agreed to in writing, software

@REM distributed under the License is distributed on an "AS IS" BASIS,

@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

@REM See the License for the specific language governing permissions and

@REM limitations under the License.

@REM

@echo off

setlocal

if NOT "%APOLLO_HOME%"=="" goto CHECK_APOLLO_HOME

PUSHD .

CD %~dp0..

set APOLLO_HOME=%CD%

POPD

:CHECK_APOLLO_HOME

if exist "%APOLLO_HOME%\bin\apollo.cmd" goto CHECK_JAVA

:NO_HOME

echo APOLLO_HOME environment variable is set incorrectly. Please set APOLLO_HOME.

goto END

:CHECK_JAVA

set _JAVACMD=%JAVACMD%

if "%JAVA_HOME%" == "" goto NO_JAVA_HOME

if not exist "%JAVA_HOME%\bin\java.exe" goto NO_JAVA_HOME

if "%_JAVACMD%" == "" set _JAVACMD=%JAVA_HOME%\bin\java.exe

goto RUN_JAVA

:NO_JAVA_HOME

if "%_JAVACMD%" == "" set _JAVACMD=java.exe

echo.

echo Warning: JAVA_HOME environment variable is not set.

echo.

:RUN_JAVA

set CLASSPATH=%APOLLO_HOME%\lib\apollo-boot.jar

set BOOTDIRS=%APOLLO_HOME%\lib

if NOT "x%APOLLO_BASE%" == "x" set BOOTDIRS=%APOLLO_BASE%\lib;%BOOTDIRS%

if "%JVM_FLAGS%" == "" set JVM_FLAGS=-server -Xmx1G -XX:-UseBiasedLocking

if "%APOLLO_ASSERTIONS%"=="false" goto noAPOLLO_ASSERTIONS

? set JVM_FLAGS=-ea %JVM_FLAGS%

:noAPOLLO_ASSERTIONS

if "x%APOLLO_OPTS%" == "x" goto noAPOLLO_OPTS

? set JVM_FLAGS=%JVM_FLAGS% %APOLLO_OPTS%

:noAPOLLO_OPTS

if "x%APOLLO_DEBUG%" == "x" goto noDEBUG

? set JVM_FLAGS=%JVM_FLAGS% -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005

:noDEBUG

if "x%APOLLO_PROFILE%" == "x" goto noPROFILE

? set JVM_FLAGS=-agentlib:yjpagent %JVM_FLAGS%

:noPROFILE

if "%JMX_OPTS%" == "" set JMX_OPTS=-Dcom.sun.management.jmxremote

rem set JMX_OPTS=-Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false

set JVM_FLAGS=%JVM_FLAGS% %JMX_OPTS%

set JVM_FLAGS=%JVM_FLAGS% -Dapollo.home="%APOLLO_HOME%"

if NOT "x%APOLLO_BASE%" == "x" set JVM_FLAGS=%JVM_FLAGS% -Dapollo.base="%APOLLO_BASE%"

set JVM_FLAGS=%JVM_FLAGS% -classpath "%CLASSPATH%"

"%_JAVACMD%" %JVM_FLAGS% org.apache.activemq.apollo.boot.Apollo "%BOOTDIRS%" org.apache.activemq.apollo.cli.Apollo %*

:END

endlocal

GOTO :EOF

:EOF

由于搭建 Apollo 環(huán)境變量需要有 JAVA_HOME,這個時候需要安裝 JDK

安裝 JDK

下載:Java SE Development Kit 8 Downloads

從上圖可以看到,這個Linux版本有 x86 和 x64 等版本。如果查看你的 Ubuntu 是什么版本呢?

參看:如何判斷Linux是32位還是64位

方法一:getconf LONG_BIT

在linux終端輸入getconf LONG_BIT?命令

如果是32位機器,則結(jié)果為32

[root@localhost ~]# getconf LONG_BIT?

32

如果是64位機器,則結(jié)果為64

[root@localhost ~]# getconf LONG_BIT?

64

方法二:uname -a

如果是64位機器,會輸出x86_64

[chenzhou@testweb01 ~]$ uname -a?

Linux testweb012.6.18-308.4.1.el5 #1SMP Tue Apr1717:08:00EDT2012x86_64 x86_64 x86_64 GNU/Linux

可以看到,uname-a執(zhí)行后的結(jié)果中輸出了x86_64,說明該機器是64位的,否則代表該機器是32位的

[root@localhost ~]# uname -a?

Linux localhost.localdomain2.6.18-164.el5 #1SMP Tue Aug1815:51:54EDT2009i686 i686 i386 GNU/Linux

方法三:file /sbin/init 或者 file /bin/ls

示例:32位機器

file /sbin/init

[root@localhost ~]# file /sbin/init?

/sbin/init: ELF32-bit LSB executable, Intel80386, version1(SYSV),forGNU/Linux2.6.9,dynamicallylinked(uses shared libs),forGNU/Linux 2.6.9, stripped

file /bin/ls

[root@localhost ~]# file /bin/ls?

/bin/ls: ELF32-bit LSB executable, Intel80386, version1(SYSV),forGNU/Linux2.6.9,dynamicallylinked(uses shared libs),forGNU/Linux 2.6.9, stripped

示例:64位機器

file /sbin/init

[chenzhou@testweb01 ~]$ file /sbin/init?

/sbin/init: ELF64-bit LSB executable, AMD x86-64, version1(SYSV),forGNU/Linux2.6.9,dynamicallylinked(uses shared libs),forGNU/Linux 2.6.9, stripped

file /bin/ls

[chenzhou@testweb01 ~]$ file /bin/ls?

/bin/ls: ELF64-bit LSB executable, AMD x86-64, version1(SYSV),forGNU/Linux2.6.9,dynamicallylinked(uses shared libs),forGNU/Linux 2.6.9, stripped

可以通過命令結(jié)果中的64-bit或者32-bit來判斷該機器是64位還是32位

最后如下經(jīng)過測試,我的Ubuntu是32位的,下載 ?jdk-8u144-linux-i586.tar.gz

# uname -a

Linux ubuntu3.2.0-23-generic-pae #36-Ubuntu SMP Tue Apr1022:19:09UTC2012i686 i686 i386 GNU/Linux

#getconf LONG_BIT?

32

通過終端在/usr/local目錄下新建java文件夾,命令行:

sudo mkdir /usr/local/java

然后進(jìn)入java目錄,命令行:

cd /usr/local/java

解壓壓縮包:

sudo tar xvf jdk-8u25-linux-x64.tar.gz

設(shè)置jdk環(huán)境變量:

# gedit /etc/profile

在最后添加下面代碼:

exportJAVA_HOME=/usr/local/java/jdk1.8.0_144

exportJRE_HOME=${JAVA_HOME}/jre

exportCLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib

exportPATH=${JAVA_HOME}/bin:$PATH

使用 source /etc/profile 使它立即生效

檢驗是否安裝成功:

# java -version

java version"1.8.0_144"

Java(TM)SE RuntimeEnvironment(build1.8.0_144-b01)

JavaHotSpot(TM)ClientVM(build25.144-b01, mixed mode)

配置 Apollo

參看:Getting Started Guide

進(jìn)入apache-apollo-1.7.1/bin目錄

cd apache-apollo-1.7.1/bin/

輸入 ./apollo 可以查看幫助

# ./apollo

usage: apollo [--log] []

The most commonly used apollo commands are:

create? ? ? ? ? creates anewbroker instance

? ? disk-benchmark? Benchmarks your disk's speed

? ? help? ? ? ? ? ? Display help information

? ? version? ? ? ? ? Displays the broker version

See'apollo help <command>'formore information on a specific command.

創(chuàng)建一個Broker示例:/apollo create mybroker,MQTT服務(wù)器都是叫Broker。

# ./apollo create mybroker

Creating apollo instance at: mybroker

Generating ssl keystore...

You can now start the broker by executing:?

"/home/tarena/project/MQTT/apache-apollo-1.7.1/bin/mybroker/bin/apollo-broker"run

Or you can setup the broker as system serviceandrun it in the background:

sudo ln -s"/home/tarena/project/MQTT/apache-apollo-1.7.1/bin/mybroker/bin/apollo-broker-service"/etc/init.d/

? /etc/init.d/apollo-broker-service start

后面會有提示怎么啟動服務(wù)器,以及創(chuàng)建一個service。

啟動Apollo :

# ./mybroker/bin/apollo-broker run

? ? _____? ? ? ? ? ? ? ? .__? .__

? /? _? \ ______? ____ |? | |? |? ____

? /? /_\? \\____ \ /? _ \|? | |? |? /? _ \

/? ? |? ? \? |_> >? <_> )? |_|? |_(? <_> )

\____|__? /? __/ \____/|____/____/\____/

\/|__|ApacheApollo(1.7.1)

Loading configuration file '/home/tarena/project/MQTT/apache-apollo-1.7.1/bin/mybroker/etc/apollo.xml'.

INFO? | OS? ? : Linux 3.2.0-23-generic-pae(Ubuntu12.04LTS)

INFO? | JVM? ? : JavaHotSpot(TM)Server VM 1.8.0_144(Oracle Corporation)

INFO? | Apollo : 1.7.1(at: /home/tarena/project/MQTT/apache-apollo-1.7.1)

INFO? | OS is restricting the open file limit to: 100000

INFO? | Accepting connections at: tcp://0.0.0.0:61613

INFO? | Accepting connections at: tls://0.0.0.0:61614

INFO? | Starting store: leveldb store at /home/tarena/project/MQTT/apache-apollo-1.7.1/bin/mybroker/data

INFO? | Accepting connections at: ws://0.0.0.0:61623/

INFO? | Accepting connections at: wss://0.0.0.0:61624/

INFO? | Administration interface available at: https://127.0.0.1:61681/

INFO? | Administration interface available at: http://127.0.0.1:61680/

之后查看打印信息即可知道MQTT要連接的端口和管理頁面端口。

然后打開Ubuntu瀏覽器,輸入?http://127.0.0.1:61680/ 或 https://127.0.0.1:61681/

即可進(jìn)入 Apollo Console 窗口。

默認(rèn)的登錄id和密碼是?admin?和?password?。

二、Windows 下 MQTT 服務(wù)器搭建之Apollo

(1)下載 Apollo

下載:Download it today!

(2)安裝

解壓得到如下文件。

這里需要注意了,解壓?apache-apollo-1.7.1 所在文件夾名稱不能有中文或者空格,后面會提到出現(xiàn)什么錯誤。

進(jìn)入?apache-apollo-1.7.1-windows-distro\apache-apollo-1.7.1\bin 文件夾

按住 shift鍵選擇 apollo.cmd 再點擊右鍵。選擇 在此處打開命令窗口。

然后在 cmd 窗口執(zhí)行 apollo.cmd。然后就可以看到發(fā)生錯誤。上面Ubuntu下安裝時已經(jīng)提到,還需要安裝 JDK。

(3)安裝 JDK

下載:Java SE Development Kit 8 Downloads

Windows 系統(tǒng)是多少位的,這個應(yīng)該很清楚吧。查看 我的電腦->屬性,查看有關(guān)計算機的基本信息。

我的電腦為 win 10 64位,下載并安裝 jdk-8u144-windows-x64.exe

然后配置 JDK 環(huán)境變量

我的電腦->屬性->高級系統(tǒng)設(shè)置->高級->環(huán)境變量

這部分我們之前將 FFmpeg 的Windows安裝說明時有提到過的??煽吹接杏脩糇兞亢拖到y(tǒng)變量。

修改“用戶變量”為當(dāng)前用戶使用,其他 Windows 用戶不能夠使用。如果要使每個用戶都能夠使用,你需要修改 "系統(tǒng)變量" 。

注意,不要夠刪除在變量中原來已有的內(nèi)容。如果之前已存在變量,則在其之后用分號“;”分隔,然后添加。

我們只讓當(dāng)前用戶可用,修改用戶變量即可。

在用戶環(huán)境變量中新建變量 JAVA_HOME,設(shè)置變量值 F:\Program Files\Java\jdk1.8.0_144

新建PATH,設(shè)置變量值%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin

新建CLASSPATH,設(shè)置變量值.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar注意前面的.表示當(dāng)前目錄。然后點擊“確定”按鈕。

到此,配置完成。打開 cmd 測試一下配置是否成功。

輸入java -version,顯示版本java version "1.8.0_144",輸入javac -version,也顯示javac 1.8.0_144,說明JDK安裝及環(huán)境變量配置成功。

然后接著上面來講。進(jìn)入?apache-apollo-1.7.1-windows-distro\apache-apollo-1.7.1\bin 文件夾

按住 shift鍵選擇 apollo.cmd 再點擊右鍵。選擇 在此處打開命令窗口。

再次在 cmd 窗口執(zhí)行 apollo.cmd,可以看到如下的信息,這就和 Ubuntu 下安裝對上了。

(4)創(chuàng)建服務(wù)器實例

參看:Getting Started Guide

在 CMD 命令窗口輸入apollo create mybroker ,當(dāng)然 mybroker 這個名字可以隨便起。

然后查看 mybroker 可以發(fā)現(xiàn)里面包含有很多信息,其中etc\apollo.xml文件下是配置服務(wù)器信息的文件,etc\users.properties文件包含連接MQTT服務(wù)器時用到的用戶名和密碼,可以修改原始的admin=password,可以接著換行添加新的用戶名密碼。

bin:保存與該實例關(guān)聯(lián)的執(zhí)行腳本。

etc:保存實例配置文件

data:保存用于存儲持久消息的數(shù)據(jù)文件

日志:保存旋轉(zhuǎn)日志文件

tmp:保存在代理運行之間安全刪除的臨時文件

打開cmd,運行 apache-apollo-1.7.1\bin\mybroker\bin\apollo-broker.cmd run 開啟服務(wù)器,如下圖所示:

這里需要注意了,所在?apache-apollo-1.7.1 所在文件夾名稱不能有中文或者空格。因為我上面的是存放在 360安全瀏覽下載 這個目錄下了。導(dǎo)致出現(xiàn)系統(tǒng)找不到指定的路徑。

然后打開瀏覽器上,輸入?http://127.0.0.1:61680/ 或 https://127.0.0.1:61681/

即可進(jìn)入 Apollo Console 窗口。

默認(rèn)的登錄id和密碼是?admin?和?password?

三、MQTT 客戶端測試

Apollo 服務(wù)器安裝已經(jīng)講完,接下來簡單測試一下發(fā)布訂閱。

這里面網(wǎng)上有MQTT協(xié)議之Apache Apollo 安裝使用這種文章用的是 java,在Android上測試的。

這就不太適合我了,不懂 Android藍(lán)瘦香菇?。?/p>

再有一種是用 谷歌瀏覽器上的 擴展程序?mqttlens

首先添加該插件

點擊 獲取更多擴展程序

搜索?mqttlens ,最后添加至 CHROME

安裝完成?。?/p>

下面進(jìn)行測試

先運行Apollo 服務(wù)器

然后啟動mqttlens?

然后點擊 Connections+

出現(xiàn)下圖,并填寫好相關(guān)的信息

然后就進(jìn)入了,訂閱發(fā)布界面

OK,到此結(jié)束

四、Ubuntu 下 MQTT 服務(wù)器搭建之Mosquitto

Mosquitto 是一款實現(xiàn)了消息推送協(xié)議MQTT v3.1的開源消息代理軟件,提供輕量級的、支持可發(fā)布/可訂閱的消息推送模式?,F(xiàn)在我們開始搭建服務(wù)器。

參看:CentOS 安裝Mosquitto及測試

參看:MQTT學(xué)習(xí)筆記——MQTT協(xié)議體驗 Mosquitto安裝和使用

(1)下載相關(guān)文件

下載:index : libwebsockets

下載:mosquitto-1.4.14.tar.gz (319kB) (GPG signature)

(2)安裝編譯

《1》安裝 libwebsockets-2.0.2.tar.gz

解壓:

tar -zxvf?libwebsockets-2.0.2

進(jìn)入該目錄:

cd libwebsockets-2.0.2/

新建目錄 build

mkdir build

進(jìn)入 build

cd build

跨平臺編譯

cmake .. -DLIB_SUFFIX=64

編譯:

make && make install

這里需要注意,cmake .. 提示 程序“cmake”尚未安裝

安裝 sudo apt-get install cmake

《2》安裝

解壓:mosquitto-1.4.14

tar -zxvf?mosquitto-1.4.14.tar.gz

進(jìn)入該目錄:

cd mosquitto-1.4.14/

更改config.mk 讓其支持 websockets

WITH_WEBSOCKETS:=no

WITH_WEBSOCKETS:=yes

編譯:

make && make install

這里會出現(xiàn)兩處錯誤:

致命錯誤: ares.h:沒有那個文件或目錄

? ? 解決方法:sudo apt-get install libc-ares-dev libc-ares2

致命錯誤:uuid/uuid.h: 沒有這個文件或目錄?

? ? 解決方法:sudo apt-get install uuid-dev

至此程序已經(jīng)安裝完畢!

程序文件將默認(rèn)安裝到以下位置

路徑程序文件

/usr/local/sbinmosquiotto server

/etc/mosquittoconfiguration

/usr/local/binutility command




修正鏈接庫路徑

由于操作系統(tǒng)版本及架構(gòu)原因,很容易出現(xiàn)安裝之后的鏈接庫無法被找到,如啟動mosquitto客戶端可能出現(xiàn)找不到

libmosquitto.so.1文件,因此需要添加鏈接庫路徑

修正鏈接庫

vim /etc/ld.so.conf.d/liblocal.conf

/usr/local/lib64

/usr/local/lib

再執(zhí)行 ldconfig

cp mosquitto.conf /etc/mosquitto

修改mosquitto.conf文件

在 /etc/mosquitto/mosquitto.conf 的 Default Listener 一節(jié)添加如下幾行:

# =================================================================

# Default listener

# =================================================================

# IP address/hostname to bind thedefaultlistener to. Ifnot

# given, thedefaultlistener willnotbe bound to a specific

# addressandso will be accessible to all network interfaces.

# bind_address ip-address/host name

#bind_address

# Port to useforthedefaultlistener.

pid_file /var/run/mosquitto.pid

user tarena

port1883

max_connections-1

allow_anonymoustrue

listener8080

protocol websockets

這里有出現(xiàn)兩個問題:

Error: Invalid user 'mosquitto'.

解決方法:修改配置文件 mosquitto.conf ,增加登錄的用戶,例如當(dāng)前登錄用戶為root

因此在上面添加 ?user root

但是運行 mosquitto 時會出現(xiàn)警告

1502156001: Warning: Mosquitto should not be run as root/administrator.

所以改為普通用戶 user tarena ?(改成你自己的)

下面測試時打開 mosquitto 會出現(xiàn)錯誤

# mosquitto -c /etc/mosquitto/mosquitto.conf

1502415109: mosquitto version 1.4.14 (build date 2017-08-07 15:54:10+0800) starting

1502415109: Config loaded from /etc/mosquitto/mosquitto.conf.

1502415109: Opening websockets listen socket on port 8080.

1502415109: Error: Unable to create websockets listener on port 8080.

解決方法:

重裝了好幾遍,網(wǎng)上查了好久。最后發(fā)現(xiàn),是修改上面的mosquitto.conf文件時有空格,將空格刪掉就好了。

居然還有這種操作,醉醉噠... ?

(3)測試

《1》打開mosquitto

?打開一個終端輸入

mosquitto -c /etc/mosquitto/mosquitto.conf

# mosquitto -c /etc/mosquitto/mosquitto.conf

1502159482: mosquitto version 1.4.14 (build date 2017-08-07 15:54:10+0800) starting

1502159482: Config loaded from /etc/mosquitto/mosquitto.conf.

1502159482: Opening websockets listen socket on port 8080.

1502159482: Opening ipv4 listen socket on port 1883.

1502159482: Opening ipv6 listen socket on port 1883.

mosquitto 選項介紹:

參看:mosquitto Options

-c,--config文件

? ? 從文件加載配置。 如果沒有給出,則使用mosquitto.conf(5)中描述的默認(rèn)值。

-d,--daemon

? ? 在后臺運行蚊子作為守護進(jìn)程。 所有其他行為保持不變。

-p,--port

? ? 在指定的端口上監(jiān)聽,而不是默認(rèn)的1883.除了配置文件中的端口設(shè)置外,還會起作用。 可以指定多次以打開在不同端口上偵聽的多個套接字。 該套接字將綁定到所有網(wǎng)絡(luò)接口。

-v,--verbose

? ? 使用詳細(xì)日志記錄。 這相當(dāng)于在配置文件中將log_type設(shè)置為全部。 這種覆蓋和記錄選項在配置文件中給出。

《2》訂閱主題

打開另一個終端輸入:

mosquitto_sub -t test?

此時第一個終端多了一行信息

# mosquitto -c /etc/mosquitto/mosquitto.conf

1502159482: mosquitto version1.4.14(build date2017-08-0715:54:10+0800) starting

1502159482: Config loaded from /etc/mosquitto/mosquitto.conf.

1502159482: Opening websockets listen socket on port8080.

1502159482: Opening ipv4 listen socket on port1883.

1502159482: Opening ipv6 listen socket on port1883.

1502159601: New connection from127.0.0.1on port1883.

1502159601: New client connected from127.0.0.1as mosqsub|2431-ubuntu (c1, k60)

mosquitto_sub?選項介紹

參看:mosquitto_sub Options

下面的選項可以在命令行中給出,但也可以放置在位于$ XDG_CONFIG_HOME / mosquitto_sub或$ HOME / .config / mosquitto_sub的配置文件中,每行一對 - 吸附值。配置文件中的值將被用作默認(rèn)值,并且可以通過使用命令行來覆蓋。這個例外是-t和-T,如果在配置文件中給出,將不會被覆蓋。還要注意,目前一些選項不能被否定,例如-S。具有#作為第一個字符的配置文件行將被視為注釋,不會進(jìn)一步處理。

-a

將輸出連接綁定到本地IP地址/主機名。如果需要將網(wǎng)絡(luò)通信限制在特定接口上,請使用此參數(shù)。

-c,--disable-clean-session

禁用“'clean session”標(biāo)志。這意味著客戶端的所有訂閱將在斷開連接后維護,以及到達(dá)的后續(xù)QoS 1和QoS 2消息。當(dāng)客戶端重新連接時,它將接收所有排隊的消息。如果使用此選項,建議使用 -id 手動設(shè)置客戶機ID

--cafile

定義包含受信任的PEM編碼的CA證書的文件的路徑。用于啟用SSL通信。另請參見--capath

--capath

定義包含受信任的PEM編碼的CA證書的目錄的路徑。用于啟用SSL通信。

為了--capath正常工作,證書文件必須具有“.crt”作為文件結(jié)束,您必須在每次添加/刪除證書時運行“c_rehash”。另請參見--cafile

--cert

如果服務(wù)器需要,定義包含此客戶端的PEM編碼證書的文件的路徑。另請參閱--key。

--ciphers

在客戶端支持的TLS密碼的openssl兼容列表。有關(guān)詳細(xì)信息,請參閱密碼(1)。

-C

在接收到給定的消息數(shù)后立即斷開并退出程序。例如,在需要單個狀態(tài)值的shell腳本中這可能很有用。

結(jié)合-R來僅打印第一組新消息(即,沒有設(shè)置保留標(biāo)志),或者使用 -T 來過濾哪些主題被處理。

-d,--debug

啟用調(diào)試消息。

- help

顯示使用信息。

-h,--host

指定要連接的主機。默認(rèn)為localhost。

-i,--id

該客戶端使用的id。如果沒有給出,默認(rèn)為mosquitto_sub_附加客戶端的進(jìn)程ID。不能與-id-prefix參數(shù)同時使用。

-I,-id-prefix

通過追加客戶端的進(jìn)程標(biāo)識來提供客戶端ID的前綴。這在代理使用clientid_prefixes選項時很有用。不能與-id參數(shù)同時使用。

--insecure

使用基于證書的加密時,此選項將禁用對服務(wù)器證書中服務(wù)器主機名的驗證。這在測試初始服務(wù)器配置時可能很有用,但是通過DNS欺騙可以讓惡意第三方冒充您的服務(wù)器。僅在測試中使用此選項。如果您需要在生產(chǎn)環(huán)境中使用此選項,則您的設(shè)置會出現(xiàn)故障,并且無需使用加密。

-k,--keepalive

發(fā)送PING命令到經(jīng)紀(jì)人以通知它之前的秒數(shù)仍然是連接和運行的。默認(rèn)為60秒。

- key

如果服務(wù)器需要,定義包含此客戶端的PEM編碼私鑰的文件的路徑。另請參見--cert。

-N

打印時,不要在有效負(fù)載上附加行尾符號。這允許將來自多個消息的有效載荷數(shù)據(jù)直接傳輸?shù)搅硪粋€應(yīng)用程序。只有在不使用-v的時候才真正有意義。

-p,--port

連接到指定的端口而不是默認(rèn)端口1883。

-P, - pw

提供用于與經(jīng)紀(jì)人進(jìn)行認(rèn)證的密碼。在不指定用戶名的情況下使用此參數(shù)是無效的。這需要一個支持MQTT v3.1的代理。另請參閱--username選項。

- proxy

指定要連接的SOCKS5代理。支持“無”和“用戶名”身份驗證類型。 socks-url必須是形式socks5h:// [username [:password] @] host [:port]。協(xié)議前綴socks5h表示主機名由代理解析。符號%25,%3A和%40分別被URL解碼為%,...和@,如果存在于用戶名或密碼中。

如果沒有給出用戶名,則不會嘗試認(rèn)證。如果沒有給出端口,則使用默認(rèn)值為1080。

根據(jù)需求,將來可能會有更多SOCKS版本,并且將使用不同的協(xié)議前綴,如卷曲(1)所述。

--psk

提供與代理使用的十六進(jìn)制(無前導(dǎo)0x)預(yù)共享密鑰,以使用TLS-PSK加密支持。還必須提供--psk身份以啟用TLS-PSK。

--psk身份

使用TLS-PSK支持的客戶端身份。這可以用來代替用戶名

《3》發(fā)布內(nèi)容

再打開一個終端輸入:

mosquitto_pub -t test -m "hello world"?

此時第二個終端多了一行信息

# mosquitto_sub -v -t test

hello world

mosquitto_pub 選項介紹

參看:mosquitto_pub Options

下面的選項可以在命令行中給出,但是也可以放置在位于$ XDG_CONFIG_HOME / mosquitto_pub或$ HOME / .config / mosquitto_sub的配置文件中,每行一對 - 吸附值。配置文件中的值將被用作默認(rèn)值,并且可以通過使用命令行來覆蓋。這個例外是消息類型選項,其中只能指定一個。還要注意,目前一些選項不能被否定,例如-S。具有#作為第一個字符的配置文件行將被視為注釋,不會進(jìn)一步處理。

-a

將輸出連接綁定到本地IP地址/主機名。如果需要將網(wǎng)絡(luò)通信限制在特定接口上,請使用此參數(shù)。

--cafile

定義包含受信任的PEM編碼的CA證書的文件的路徑。用于啟用SSL通信。另請參見--capath

--capath

定義包含受信任的PEM編碼的CA證書的目錄的路徑。用于啟用SSL通信。

為了--capath正常工作,證書文件必須具有“.crt”作為文件結(jié)束,您必須在每次添加/刪除證書時運行“c_rehash”。另請參見--cafile

--cert

如果服務(wù)器需要,定義包含此客戶端的PEM編碼證書的文件的路徑。另請參閱--key。

--ciphers

在客戶端支持的TLS密碼的openssl兼容列表。有關(guān)詳細(xì)信息,請參閱密碼(1)。

-d,--debug

啟用調(diào)試消息。

-f,--file

發(fā)送文件的內(nèi)容作為消息。

- help

顯示使用信息。

-h,--host

指定要連接的主機。默認(rèn)為localhost。

-i,--id

該客戶端使用的id。如果沒有給出,默認(rèn)為mosquitto_pub_附加客戶端的進(jìn)程ID。不能與-id-prefix參數(shù)同時使用。

-I,-id-prefix

通過追加客戶端的進(jìn)程標(biāo)識來提供客戶端ID的前綴。這在代理使用clientid_prefixes選項時很有用。不能與-id參數(shù)同時使用。

--insecure

使用基于證書的加密時,此選項將禁用對服務(wù)器證書中服務(wù)器主機名的驗證。這在測試初始服務(wù)器配置時可能很有用,但是通過DNS欺騙可以讓惡意第三方冒充您的服務(wù)器。僅在測試中使用此選項。如果您需要在生產(chǎn)環(huán)境中使用此選項,則您的設(shè)置會出現(xiàn)故障,并且無需使用加密。

-k,--keepalive

發(fā)送PING命令到經(jīng)紀(jì)人以通知它之前的秒數(shù)仍然是連接和運行的。默認(rèn)為60秒。

-key

如果服務(wù)器需要,定義包含此客戶端的PEM編碼私鑰的文件的路徑。另請參見--cert。

-l,--stdin-line

發(fā)送從stdin讀取的消息,將單獨的行分成單獨的消息。請注意,空行不會被發(fā)送。

-m, - 消息

從命令行發(fā)送一條消息。

-n, - 消息

發(fā)送null(零長度)消息。

-p,--port

連接到指定的端口而不是默認(rèn)端口1883。

-P, - pw

提供用于與經(jīng)紀(jì)人進(jìn)行認(rèn)證的密碼。在不指定用戶名的情況下使用此參數(shù)是無效的。這需要一個支持MQTT v3.1的代理。另請參閱--username選項。

-proxy

指定要連接的SOCKS5代理。支持“無”和“用戶名”身份驗證類型。 socks-url必須是形式socks5h:// [username [:password] @] host [:port]。協(xié)議前綴socks5h表示主機名由代理解析。符號%25,%3A和%40分別被URL解碼為%,...和@,如果存在于用戶名或密碼中。

如果沒有給出用戶名,則不會嘗試認(rèn)證。如果沒有給出端口,則使用默認(rèn)值為1080。

根據(jù)需求,將來可能會有更多SOCKS版本,并且將使用不同的協(xié)議前綴,如卷曲(1)所述。

--psk

提供與代理使用的十六進(jìn)制(無前導(dǎo)0x)預(yù)共享密鑰,以使用TLS-PSK加密支持。還必須提供--psk身份以啟用TLS-PSK。

--psk身份

使用TLS-PSK支持的客戶端身份。如果代理配置為這樣做,則可以使用這可以替代用戶名。

-q,--qos

指定消息的使用質(zhì)量,從0,1和2.默認(rèn)為0。

- quiet

如果給出此參數(shù),則不會打印運行時錯誤。這排除了在無效用戶輸入的情況下給出的任何錯誤消息(例如使用 - 沒有端口的端口)。

-r, - 保存

如果保留被賦予,則該消息將被保留為經(jīng)紀(jì)人的“最后已知的良好”值。有關(guān)更多信息,請參閱mqtt(7)。

-s,--stdin-file

發(fā)送從stdin讀取的消息,將整個內(nèi)容作為單個消息發(fā)送。

-S

使用SRV查找來確定要連接的主機。當(dāng)我們執(zhí)行查詢_mqtt._tcp

不過如果直接將第一個終端關(guān)閉再打開 mosquitto 會出現(xiàn)一個問題

Error: Address already in use

解決方法:重啟... ? 別的方法暫時不知道呢

(4)取消匿名登錄

參看:MQTT服務(wù)器搭建--Mosquitto用戶名密碼配置

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容