转: python 利用EMQ实现消费者和生产者模型
消费者
"""
测试emq-消费者
@author me
"""
import paho.mqtt.client as mqtt
import time class Consumer(object): def get_time(self):
"""
获取时间
"""
return time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time())) def on_subscribe(self, client, userdata, mid, granted_qos):
"""
开始时订阅 callback
:param userdata:
:param mid:
:param granted_qos:
:return:
"""
print(self.get_time(), "Begin subscribe topic with ", mid) def on_message(self, client, userdata, message):
"""
接收消息 callback
:param userdata:
:param message:
:return:
"""
print(self.get_time(), " Received message '" + str(message.payload) + "' on topic '" +
message.topic + "' with QoS " + str(message.qos)) def on_connect(self, client, userdata, flags, rc):
"""
连接时的 callback
:param client:
:param userdata:
:param flags:
:param rc:
:return:
"""
print(self.get_time(), "[consumer]Connected with result code " + str(rc))
if rc == 0:
sub_result = client.subscribe("/chat/room/4", qos=0)
print(self.get_time(), "Connected with result is (status,mid)", sub_result)
else:
print(self.get_time(), " connect failed") def run(self):
# 4就是MQTT3.1.1
emq_client = mqtt.Client(client_id="emqttd_2018080922", userdata=None, protocol=4)
emq_client.on_connect = self.on_connect
# emq_client.on_disconnect = self.on_disconnect
emq_client.on_message = self.on_message
emq_client.on_subscribe = self.on_subscribe
# 设置用户密码,如果没有设置用户,这里可以省略
emq_client.username_pw_set('admin', "123.com")
emq_client.connect("192.168.0.251", 1883, keepalive=60)
emq_client.loop_forever() if __name__ == "__main__":
consumer = Consumer()
consumer.run()
生产者
"""
测试emq-生产者
@author me
"""
import paho.mqtt.client as mqtt
import time class Producer(object): def get_time(self):
"""
获取时间
"""
return time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time())) def on_disconnect(self, client, userdata, rc):
"""
rc 是操作结果的状态码,0 代表成功
断开连接时的 callback
"""
print(self.get_time(), " end a loop with code "+str(rc)) def pub_topic(self, client, topic_text):
"""
发布topic
"""
try:
pub_result = client.publish("/chat/room/4", payload=topic_text, qos=0, retain=False)
if pub_result.is_published:
print(self.get_time(), " success pub message with id: ", pub_result.mid)
else:
print(self.get_time(), "failed to pub message")
except ValueError as err_str:
print(self.get_time(), "please check your parameters: ", err_str) def on_connect(self, client, userdata, flags, rc):
"""
连接broker时的callback
"""
print(self.get_time(), "[producer]Connected with result code " + str(rc))
if rc == 0:
while True:
topic_text = input("Enter your topic text,('end' to end a loop): ")
if topic_text == "end":
print(self.get_time(), "EXIT ..... ")
client.disconnect()
break
else:
self.pub_topic(client, topic_text)
else:
print(self.get_time(), "Connected Failed, Exited ")
client.disconnect() def run(self):
# 4就是MQTT3.1.1
emq_client = mqtt.Client(client_id="emqttd_2018080946", userdata=None, protocol=4)
emq_client.on_connect = self.on_connect
emq_client.on_disconnect = self.on_disconnect
# 设置用户密码,如果没有设置用户,这里可以省略
emq_client.username_pw_set('admin', "123.com")
emq_client.connect("192.168.0.250", 1883, keepalive=60)
emq_client.loop_forever() def main(self):
self.run()
while True:
start = input("Enter your start sign,('no' to end a program): ")
if start != 'no':
self.run()
else:
print(self.get_time(), "Exiting program ")
break if __name__ == "__main__":
producer = Producer()
producer.main()
运行
首先,启动消费者,然后启动生产者,就可以输入消息体了,输入 end 表示发布之前的消息,no 结束生产者。
生产者
消费者
转: python 利用EMQ实现消费者和生产者模型的更多相关文章
- python_并发编程——消费者和生产者模型
消费者和生产者模型 from multiprocessing import Process,Queue import time import random class Producer(Process ...
- 消费者与生产者---LinkedList方式模拟
采用LinkedList数据结构方式来模拟消费者与生产者模型,小Demo import java.util.LinkedList; public class MyQueue { private fin ...
- JAVA——利用wait和notify实现生产者和消费者
经典的消费者和生产者的的实现: 注意事项: 1:在循环里面用wait(),因为当线程获得了锁,但是有可能还没有满足其他条件: 2:公用的缓冲池要用锁机制: package demo; import j ...
- springcloud 实现简单的 消费者和生产者 模式(Restfule 的风格)
一.springcloud 实现简单的 消费者和生产者 模式(Restfule 的风格) 1.实现简单的消费者和生产者 springcloud使用的http协议进行传输数据,也就是说springclo ...
- Java程序设计之消费者和生产者
新建一个Break类,表示食物数量. public class Break { public static final int MAX = 10; //最多一次性煮十个面包 Stack<Inte ...
- [Python] 利用Django进行Web开发系列(二)
1 编写第一个静态页面——Hello world页面 在上一篇博客<[Python] 利用Django进行Web开发系列(一)>中,我们创建了自己的目录mysite. Step1:创建视图 ...
- python利用or在列表解析中调用多个函数.py
python利用or在列表解析中调用多个函数.py """ python利用or在列表解析中调用多个函数.py 2016年3月15日 05:08:42 codegay & ...
- python 利用 ogr 写入shp文件,数据格式
python 利用 ogr 写入 shp 文件, 定义shp文件中的属性字段(field)的数据格式为: OFTInteger # 整型 OFTIntegerList # 整型list OFTReal ...
- java多线程-消费者和生产者模式
/* * 多线程-消费者和生产者模式 * 在实现消费者生产者模式的时候必须要具备两个前提,一是,必须访问的是一个共享资源,二是必须要有线程锁,且锁的是同一个对象 * */ /*资源类中定义了name( ...
随机推荐
- Problem Z: 百鸡问题
#include <stdio.h> int main() { int i, j, k; ; i <= ; i++ ) ; j <= ; j++ ) ; k <= ; k ...
- [BZOJ1001](BeiJingOI 2006)狼抓兔子
Description Source: Beijing2006 [BJOI2006] 八中OJ上本题链接:http://www.lydsy.com/JudgeOnline/problem.php? ...
- React中的表单元素
在web应用开发当中,表单还是很重要的元素. 应用表单组件有:文本框(input.textarea).单选按钮和复选框.Select组件. 文本框:文本框的状态改变即文本框中的内容的改变.此时的sta ...
- 8VC Venture Cup 2016 - Final Round (Div. 2 Edition) C. XOR Equation 数学
C. XOR Equation 题目连接: http://www.codeforces.com/contest/635/problem/C Description Two positive integ ...
- c++中const使用详解
const在c++中是一个关键字,它限定一个变量不允许被改变.使用const在一定程度上可以提高程序的安全性和可靠性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些 ...
- Oracle的sqlnet.ora文件配置
DBA对这个文件一定不会陌生,大家了解最多的也一定是sqlnet.ora用来决定oracle怎么解析一个连接中出现的字符串,例如: sqlplus sys/oracle@orcl 那么这个orcl怎么 ...
- CSS margin-top 属性
1.margin-top 属性设置元素的上外边距. 注意:允许使用负值. 2.html 文件 <html> <head> <style type="text/c ...
- Eureka的自我保护机制
最近项目在Kubernetes上使用Eureka遇到一些问题,在网站上找到一篇针对Eureka自我保护机制原理的文章,觉得不错,总结如下: Eureka的自我保护特性主要用于减少在网络分区或者不稳定状 ...
- SQLAlchemy会话与事务控制:互斥锁和共享锁
关于sqlalchemy,可以细度这个网址:http://www.codexiu.cn/python/SQLAlchemy%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/73 ...
- 创建maven web项目无法创建sec目录
创建maven web项目无法创建sec目录 解决方法:-DarchetypeCatalog=internal