Fork me on GitHub

消息队列之《03.生产与消费》

本文思考准备使用Python来做客户端(据了解使用go做客户端的很多),生产message 到NSQ消息队列,然后再消费掉,目的是想研究Python如何使用NSQ,以便我后面在开发项目中使用它。

启动nsqd相关服务

具体配置启动方法请看上一篇文章,启动服务如下:

1
2
3
4
5
$ supervisorctl status
nsqadmin RUNNING pid 15252, uptime 1 day, 0:25:41
nsqd01 RUNNING pid 14720, uptime 1 day, 0:37:21
nsqd02 RUNNING pid 14787, uptime 1 day, 0:36:05
nsqlookupd RUNNING pid 3566, uptime 0:09:01

安装依赖

1
2
3
$ pip install -r requirements.txt
pynsq==0.8.2
tornado==4.5.3

生产者

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ vim nsq_create.py
import nsq
import tornado.ioloop
import time

def pub_message():
writer.pub('test_topic', time.strftime('%H:%M:%S'), finish_pub)

def finish_pub(conn, data):
print data

writer = nsq.Writer(['127.0.0.1:4150'])
tornado.ioloop.PeriodicCallback(pub_message, 1000).start()
nsq.run()

消费者

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ vim  nsq_consume.py
import nsq

def handler(message):
#print message
print message.body
return True
# return True 表示你已经成功消费了这条记录
# return False 表示你消费这条记录时出问题了, 这条消息会被再次投递

# lookupd不能使用时,也可以直接使用nsqd来进行消费
r = nsq.Reader(message_handler=handler, nsqd_tcp_addresses=['127.0.0.1:4150'], topic='test_topic', channel='asdfxx', lookupd_poll_interval=15)
#r = nsq.Reader(message_handler=handler, lookupd_http_addresses=['http://127.0.0.1:4161'], topic='test_topic', channel='asdfxx', lookupd_poll_interval=15)

nsq.run()

生产和消费数据

运行生产脚本

1
2
3
4
5
6
$ python nsq_create.py
OK
OK
OK
OK
OK

运行消费脚本

1
2
3
4
5
6
$ python nsq_consume.py
17:33:33
17:33:34
17:33:35
17:33:36
17:33:37

以上,通过python编写的生产和消费功能完成,大多数代码来源于官网,本文仅供学习理解使用。

NSQAdmin

带大家认识一下NSQ的web页面

1、首页,会显示有多少个Topics

2、点击一个Topic,会显示详细的信息以及操作:可以清空、删除、暂停一个Topic

  • Topic Message Queue - 显示这个topic的所有NSQd Host节点
  • Channel Message Queues - 显示所有消费通道

3、Node页,显示有多少个NSQd节点,以及版本和端口信息

4、点击Adderss地址,显示每个Node节点的Topics详情,有多少数据,以及数据积压情况

  • Depth - 数据积压数量
  • Memory+Disk - 占用的内存和磁盘空间
  • Messages - 总共处理的message数量
  • Client Host - 连接Topic的客户端
    • User-Agent - 客户端的UA
    • Finshed - 完成处理多少message
    • Connected - 连接时长

5、总共处理了多少message数量

6、NSQAdmin如果连接了多个nslookupd程序,将会在这里显示

这个界面还可以手动创建Topic和Channel。

参考文章:
https://pynsq.readthedocs.io/en/latest/index.html

-------------本文结束感谢您的阅读-------------