消费者

"""
测试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实现消费者和生产者模型的更多相关文章

  1. python_并发编程——消费者和生产者模型

    消费者和生产者模型 from multiprocessing import Process,Queue import time import random class Producer(Process ...

  2. 消费者与生产者---LinkedList方式模拟

    采用LinkedList数据结构方式来模拟消费者与生产者模型,小Demo import java.util.LinkedList; public class MyQueue { private fin ...

  3. JAVA——利用wait和notify实现生产者和消费者

    经典的消费者和生产者的的实现: 注意事项: 1:在循环里面用wait(),因为当线程获得了锁,但是有可能还没有满足其他条件: 2:公用的缓冲池要用锁机制: package demo; import j ...

  4. springcloud 实现简单的 消费者和生产者 模式(Restfule 的风格)

    一.springcloud 实现简单的 消费者和生产者 模式(Restfule 的风格) 1.实现简单的消费者和生产者 springcloud使用的http协议进行传输数据,也就是说springclo ...

  5. Java程序设计之消费者和生产者

    新建一个Break类,表示食物数量. public class Break { public static final int MAX = 10; //最多一次性煮十个面包 Stack<Inte ...

  6. [Python] 利用Django进行Web开发系列(二)

    1 编写第一个静态页面——Hello world页面 在上一篇博客<[Python] 利用Django进行Web开发系列(一)>中,我们创建了自己的目录mysite. Step1:创建视图 ...

  7. python利用or在列表解析中调用多个函数.py

    python利用or在列表解析中调用多个函数.py """ python利用or在列表解析中调用多个函数.py 2016年3月15日 05:08:42 codegay & ...

  8. python 利用 ogr 写入shp文件,数据格式

    python 利用 ogr 写入 shp 文件, 定义shp文件中的属性字段(field)的数据格式为: OFTInteger # 整型 OFTIntegerList # 整型list OFTReal ...

  9. java多线程-消费者和生产者模式

    /* * 多线程-消费者和生产者模式 * 在实现消费者生产者模式的时候必须要具备两个前提,一是,必须访问的是一个共享资源,二是必须要有线程锁,且锁的是同一个对象 * */ /*资源类中定义了name( ...

随机推荐

  1. 【SAM】POJ1509-Glass Beads

    [题目大意] 求一个循环数列的最小表示法. [思路] 把原创复制一遍放在后面,建立SAM,从s按字典序开始跑长度L即可. 板子来源(作者见连接内):

  2. 第一个程序-Hello world

    创建HelloWorld项目 1.在Android Studio的欢迎界面点击Start a new Android Studio project 2.填写Application name(表示应用名 ...

  3. bzoj 1636: [Usaco2007 Jan]Balanced Lineup -- 线段树

    1636: [Usaco2007 Jan]Balanced Lineup Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 772  Solved: 560线 ...

  4. GUN C/C++ __attribute__ 用法 转

     http://blog.csdn.net/mydo/article/details/3738336     GNUC的一大特色(却不被初学者所知)就是__attribute__机制.__attrib ...

  5. 基于TCP通信的客户端断线重连

    转载:http://www.cnblogs.com/networkcomms/p/4304362.html 源码下载 在CS程序中,断线重连应该是一个常见的功能. 此处的断线重连主要指的是服务器端因为 ...

  6. ARM地址重映射机制

    转:http://blog.csdn.net/yuanzhangmei1/article/details/8395028 ARM体系结构中,系统上电或复位后,处理器将从地址0x0处取第一条指令,因此, ...

  7. 用JSP生成HTM网页,减轻数据库操作

    原文:http://www.jspkongjian.net/news.jsp?id=396 此教程的功能: 利用servlet 实现抓取一个网页,把这个网页保存为.htm  比如抓取我们的主页inde ...

  8. ORACLE查询表最近更改数据的方法

    修改项目时,涉及到了Oracle中许多表的修改(包括:增加.删除字段,修改注释等).由于开始没有进行记录,造成在上测试机时,忘记了具体修改过哪些表了.后来在网上查找了一些资料,例如: 1.select ...

  9. webService 三要素

    WebService(jax-ws)三要素 SOAP: 基于HTTP协议,采用XML格式,用来传递信息的格式. WSDL: 用来描述如何访问具体的服务.(相当于说明书) UDDI: 用户自己可以按UD ...

  10. EasyUI datagrid 复选框可以多选但不能全选功能实现

    1.功能需求:  实现多选,但是不能够全选功能 2.js代码 //帮卖列表页面,可以多选但是不能够全选实现 $(".datagrid-header-check").children ...