MQTT,RabbitMQ初步使用 - Ubuntu

MQTT

使用源码安装

下载 http://mosquitto.org/files/source/mosquitto-1.4.11.tar.gz
# 解压
tar -zxfv mosquitto-1.4.11.tar.gz
# 进入目录
cd mosquitto-1.4.11
# 编译
make
# 安装
sudo make install

其中会需要一些依赖(编译过程找不到)

* openssl/ssl.h
  sudo apt-get install libssl-dev
* ares.h
  sudo apt-get install libc-ares-dev
* uuid/uuid.h
  sudo apt-get install uuid-dev
* 找不到libmosquitto.so.1文件
  sudo vi /etc/ld.so.conf.d/libc.conf or liblocal.conf
  添加 /usr/local/lib64
  保存,刷新 ldconfig
* 最后我们安装 paho 用于连接MQTT服务
  sudo pip3 install paho-mqtt

接下来就可以进行测试了

* 首先输入 mosquitto -v 来启动MQTT服务```
  • 接着新建个py文件 touch mqtt_test.py 用于数据接收

! /usr/bin/env python3

-- coding: utf-8 --

import json
import time
import random
from datetime import datetime

import paho.mqtt.client as mqtt

HOST = "127.0.0.1"
PORT = 1883
CLIENT = mqtt.Client()

def on_connect(client, userdata, flags, rc):
print("Connected with result code " + str(rc), userdata)
client.subscribe("C0001/#", 1) # 订阅top

def on_message(client, userdata, msg):
if msg:
body = str(msg.payload, encoding="utf-8")
print("数据为: {0}".format(body))
else:
print("数据为空")

def on_disconnect(client, userdata, rc):
if rc != 0:
print("Unexpected disconnection.")

if name == "main":
"""mqtt_test"""

CLIENT.on_connect = on_connect
CLIENT.on_message = on_message
CLIENT.on_disconnect = on_disconnect
try:
    CLIENT.connect(HOST, PORT, 60)
    CLIENT.loop_forever()
except KeyboardInterrupt:
    print("Interrupt received")
    CLIENT.disconnect()
except Exception as error:
    print("error: ", error)
    CLIENT.disconnect()
  • 接着新建个py文件 touch mqtt_send.py 用于数据发送

! /usr/bin/env python3

-- coding: utf-8 --

import time
import random

import paho.mqtt.client as mqtt

HOST = "127.0.0.1"
PORT = 1883
CLIENT = mqtt.Client()

if name == "main":
""""""
while 1:
CLIENT.connect(HOST, PORT, 60)
data_json = {
'id': 'SW0021',
'pid': 'W0003',
}
CLIENT.publish('C0001/{0}/{1}'.format(data_json['pid'], data_json['id']), str(data_json), 1)
CLIENT.disconnect()
time.sleep(3)

之后分别运行两个py文件就可以收到数据了

###RabbitMQ
安装RabbitMQ服务
```sudo apt-get install rabbitmq-server```
安装pika 用于连接RabbitMQ服务
```sudo pip3 install pika```

touch rabbitmq_s.py

! /usr/bin/env python3

-- coding: utf-8 --

import pika

if name == "main":
# 建立一个实例
connection = pika.BlockingConnection(
pika.ConnectionParameters('localhost') # 默认端口5672,可不写
)
# 声明一个管道,在管道里发消息
channel = connection.channel()
# 在管道里声明queue
channel.queue_declare(queue='sensor_data', durable=True)
# RabbitMQ a message can never be sent directly to the queue, it always needs to go through an exchange.
send_data = "OK"
channel.basic_publish(exchange='',
routing_key='sensor_data', # queue名字
body=send_data,
properties=pika.BasicProperties(
delivery_mode=2, # make message persistent
)) # 消息内容

print(" [x] Sent: " + send_data)
connection.close()  # 队列关闭

touch rabbimqt_r.py

! /usr/bin/env python3

-- coding: utf-8 --

from datetime import datetime
import pika

def callback(ch, method, properties, body): # 四个参数为标准格式
body = str(body, encoding='utf-8')
print("RabbitMQ: [{0}] Received: {1}".format(datetime.now().strftime("%Y-%m-%d %H:%M:%S"), body))
ch.basic_ack(delivery_tag=method.delivery_tag) # 告诉生成者,消息处理完成
print("Rabbitmq 读取OK")

if name == "main":
# 建立实例
connection = pika.BlockingConnection(pika.ConnectionParameters(
'localhost'))
# 声明管道
channel = connection.channel()

# 为什么又声明了一个‘sensor_data’队列?
# 如果确定已经声明了,可以不声明。但是你不知道那个机器先运行,所以要声明两次。
channel.queue_declare(queue='sensor_data', durable=True)

# RabbitMQ就会使得每个Consumer在同一个时间点最多处理一个Message, 需要添加更多的Consumer,或者创建更多的virtualHost来细化你的设计。
# channel.basic_qos(prefetch_count=1)

channel.basic_consume(  # 消费消息
    callback,  # 如果收到消息,就调用callback函数来处理消息
    queue='sensor_data',  # 你要从那个队列里收消息
    # no_ack=True  # 写的话,如果接收消息,机器宕机消息就丢了
    # 一般不写。宕机则生产者检测到发给其他消费者
)

print(' [*]RabbotMQ Wait Msg. To exit press CTRL+C')
channel.start_consuming()  # 开始消费消息
之后分别运行两个py文件就可以看到效果了,rabbitmq服务是自动运行的,可以使用 ***service rabbitmq-server xxx ***命令进行控制


文笔不好,还望见谅,本就是个人使用笔记的简单记录

***By: single430***
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,313评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,369评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,916评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,333评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,425评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,481评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,491评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,268评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,719评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,004评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,179评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,832评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,510评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,153评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,402评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,045评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,071评论 2 352

推荐阅读更多精彩内容