nsq 简介和 python3 的简单使用
简介
NSQ是1个分布式(distributed)、可扩展(scalable)、配置简单(Ops Friendly)、可集成(integrated)、实时( realtime )的消息传递平台。即消息中间件。
可以将原本耦合、同步执行的程序 解耦成 生产端+ 消息队列+消费端模型的异步程序,加上分布式的生产者和消费者架构就可以在一定程度上支撑大并发。
NSQ是go语言开发的消息队列,它的设计目标是为在多台计算机上运行的松散服务提供一个现代化的基础设施骨架。
官方和第三方为NSQ开发了众多客户端功能库,如官方提供的基于HTTP的nsqd、Go客户端go-nsq、Python客户端pynsq、基于Node.js的JavaScript客户端nsqjs、异步C客户端libnsq、Java客户端nsq-java以及基于各种语言的众多第三方客户端功能库。
组成
NSQ主要是由3个进程组成的:
- nsqd是一个接收、排队、然后转发消息到客户端的进程。
- nsqlookupd 管理拓扑信息并提供最终一致性的发现服务。
- nsqadmin用于实时查看集群的统计数据(并且执行各种各样的管理任务)
Topic 和 Channel
每个nsqd实例旨在一次处理多个数据流。这些数据流称为“topics”,
1个topic具有1个或N个“channels”,所有的channels都会收到topic消息的副本,实际上topic是通过channel来消费它产生的消息的。
如果说topic是工厂,channel就是各种不同的销售渠道,那么生产者就是工人们,消费者就是来自许多不同渠道的客户们。
topic 由生产者端指定,channel由消费者端指定
topic
和channel
都相互独立地缓冲数据,防止缓慢的消费者导致其他chennel
的积压(同样适用于topic
级别)。
channel
可以并且通常会连接多个客户端。假设所有连接的客户端都处于准备接收消息的状态,则每条消息将被传递到随机客户端。例如:
其他概念点此了解
部署
建议使用 docker 部署,插拔方便,不影响主机器。
创建一个文件夹,如 mkdir docker-compose-test
, 在其中创建如下 docker-compose.yml 文件。
docker-compose.yml 如下:
version: '3'
services:
nsqlookupd:
image: nsqio/nsq
command: /nsqlookupd
# networks: # 本地部署可以删除地址绑定这三行,下同
# nsqnetwork:
# ipv4_address: 172.20.0.2
ports:
- "9910:4160" # Tcp端口 广播
- "9911:4161" # Http端口 客户端发现和管理操作
nsqd:
image: nsqio/nsq
command: /nsqd --lookupd-tcp-address=nsqlookupd:4160
depends_on:
- nsqlookupd
# networks:
# nsqnetwork:
# ipv4_address: 172.20.0.3
ports:
- "9912:4150" # tcp服务客户端
- "9913:4151" # 提供http端口
nsqadmin:
image: nsqio/nsq
command: /nsqadmin --lookupd-http-address=nsqlookupd:4161
depends_on:
- nsqlookupd
# networks:
# nsqnetwork:
# ipv4_address: 172.20.0.4
ports:
- "9914:4171"
保存退出后,使用如下命令启动
docker-compose up
后台启动则可以 使用命令
docker-compose up -d
访问本地网址 127.0.0.1:9914 即可看到页面板。
代码使用
相关客户端支持可参看此链接
因为业务相关,我们一般采用的是 HTTP 的方式生产消息。使用方式如下:
curl -d "<message>" http://127.0.0.1:9913/pub?topic=name
采用上述命令生产一个消息给 nsq 后,可在 nsq 面板(127.0.0.1:9914)看到这条消息。
主页面
点击,即可进入内部查看具体信息。包括 NSQD 节点,具体的channel,队列中的消息数,连接数等。
nsqadmin
channel 。上图最下一行提示没有客户端(消费者)连接这个 channel。启动客户端即可。
客户端测试代码:
# nsq_consume_yezi.py
import nsq
def handler(message):
print(message)
print(message.body)
return True
r = nsq.Reader(message_handler=handler, nsqd_tcp_addresses=['127.0.0.1:9912'], topic='yezi_topic', channel='ceshi01', lookupd_poll_interval=15)
nsq.run()
使用 python 启动此代码,
面板也显示了客户端的连接。
其他
列出所有的 NSQD 节点:
消息的统计:
lookup主机的列表:
参考地址
- nsq官网文档
- 消息中间件NSQ深入与实践
- python使用nsq简单示例
原文地址:https://www.cnblogs.com/yezigege/p/13791476.html
上一篇: 代码Python 后处理历时模拟结果
推荐阅读
-
安装 Prometheus 和 Grafana,通过简单配置和使用 PromQL 查询语言以及基于 Pushgateway 的 Prometheus 数据收集,实现监控数据的可视化。
-
使用opencv3和C++编程语言实现简单目标跟踪的Tracker
-
C#使用Linq的Take和Skip方法实现简单分页
-
使用 .NET Core 和 WPF 开发升讯威在线客服系统的背景与简介
-
简单介绍Oracle中listagg和wmsys.wm_concat连接字符串函数的使用方法
-
超简单!TortoiseGit小乌龟的安装、配置和使用指南
-
Intellij IDEA 插件开发入门详解 - 如何添加 Application 和 Project Component,并创建 Action? 在本文中,我们将详细介绍如何在 IntelliJ IDEA 中添加 Application 和 Project Component,并且通过这些组件来创建一个简单的 Action。 首先,我们将在 src 目录上使用 Alt+Insert 快捷键打开 New 对话框,然后从中选择 Application Component 并输入名称如 MyComponent。接下来,我们在 MyComponent 类中添加一个 sayHello 方法并编写相关逻辑。 然后,我们需要为我们的插件添加一个 Action,使用户可以通过菜单或其它方式访问它。为此,我们将创建一个新的类 SayHelloAction 继承自 AnAction 类,并在 actionPerformed 方法中获取 Application 和 MyComponent 对象,最后调用 MyComponent 的 sayHello 方法。 最后,我们需要为我们的插件配置相关的文件以确保它可以正常运行。在本文中,我们将详细介绍如何进行这些配置。
-
如何使用ffmpeg调整视频帧率、分辨率和时长的简单操作指南
-
使用 SpringBoot 和 JWT 实现简单易用的用户注册、登录及身份验证流程
-
使用 Ant Design Pro 和 .NET Core,通过 JWT 实现简单易用的登录验证