简介
NSQ是1个分布式(distributed)、可扩展(scalable)、配置简单(Ops Friendly)、可集成(integrated)、实时( realtime )的消息传递平台。即消息中间件。
可以将原本耦合、同步执行的程序 解耦成 生产端+ 消息队列+消费端模型的异步程序,加上分布式的生产者和消费者架构就可以在一定程度上支撑大并发。
NSQ是go语言开发的消息队列,它的设计目标是为在多台计算机上运行的松散服务提供一个现代化的基础设施骨架。
代码部署
nsq.Reader(message_handler=msg_hder.handle,
lookupd_http_addresses=lookupd_http_address,
topic=topic_name,
channel=channel_name,
max_in_flight=4,
lookupd_poll_interval=15)
log_info("short_video_classifier_v3_increase init, nsq reader start.", lookupd_http_address, topic_name, channel_name)
sys.stdout.flush()
nsq.run()
message_handler
队列消费方式,通常是自定义的消息处理函数
Topic 和 Channel
1个topic具有1个或N个“channels”,所有的channels都会收到topic消息的副本,实际上topic是通过channel来消费它产生的消息的。
如果说topic是工厂,channel就是各种不同的销售渠道,那么生产者就是工人们,消费者就是来自许多不同渠道的客户们。
topic 由生产者端指定,channel由消费者端指定
topic
和channel
都相互独立地缓冲数据,防止缓慢的消费者导致其他chennel
的积压(同样适用于topic
级别)。
channel
可以并且通常会连接多个客户端。假设所有连接的客户端都处于准备接收消息的状态,则每条消息将被传递到随机客户端。例如:
参考:
NSQ官方文档 https://nsq.io/components/nsqd.html