NSQ 概述

简介: NSQ 概述

NSQ 是什么?使用 go 语言开发的一款开源的消息队列,具有轻量级、高性能的特点,而关于消息队列,我在之前的文章中介绍过另一款 RabbitMQ,感兴趣的也可以看看:

RabbitMQ 入门系列(一)

RabbitMQ 入门系列(二)

RabbitMQ 入门系列(三)

RabbitMQ 入门系列(四)




01


概述



NSQ 组件:

1、nsqd:接受、排队、传递消息的守护进程,消息队列中的核心。

2、nsqlookupd:管理拓扑信息,其实就是围绕 nsqd 的发现服务,因为其存储了 nsqd 节点的注册信息,所以通过它就可以查询到指定 topic 主题的 nsqd 节点。

3、nsqadmin:一套封装好的 WEB UI ,可以看到各种统计数据并进行管理操作。

4、utilities:封装好的一些简单的工具(实际开发中用的不多)。


如下图所示:

1、生产者 producer 将消息投递到指定的 nsqd 中指定的 topic 主题。

2、nsqd 可以有多个 topic 主题,一旦其接受到消息,将会把消息广播到所有与这个 topic 相连的 channel 队列中。

3、channel 队列接收到消息则会以负载均衡的方式随机的将消息传递到与其连接的所有 consumer 消费者中的某一个。


注意:生产者关注的是 topic,消费者关注的是 channel。消息是存在 channel 队列中的,其会一直保存消息直到有消费者将消息消费掉,同时 channel 队列一旦创建其本身也不会自动消失,另外消息默认是存在内存中的,一旦超过内存大小(可通过 --mem-queue-size 配置)则会被存储到磁盘上。


再看下图:

通过 nsqadmin 可以看到整个集群的统计信息并进行管理,多个 nsqd 节点组成集群并将其基本信息注册到 nsqlookupd 中,通过 nsqlookupd 可以寻址到具体的 nsqd 节点,而不论是消息的生产者还是消费者,其本质上都是与 nsqd 进行通信(如第一张图所示)。



02


其它



1、默认情况下消息不会被持久化到磁盘,只有当超出内存限制时才会将部分消息写入磁盘,但只要设置 --mem-queue-size=0 就可以将所有消息都持久化到磁盘

2、NSQ 保证消息至少被传递一次,但也有可能极端情况下会被传递多次,消费者需要额外注意这一点。

3、消息是无序的。

4、官方建议将 nsqd 与消息的生产者部署到一起,这种模式将消息流构建为消费问题而不是生产问题,这种模式更加简单但非强制。

5、nsqlookupd 并非一定要使用,但在集群模式下建议使用,官方建议每个数据中心部署至少三个 nsqlookupd 就可以应对成百上千的集群节点(每个nsqlookupd 中间是相互独立的,保证其高可用)。

6、topic 和 channel 没有内置的限制,但其会受限于宿主机的CPU和内存性能。

7、nsq 没有复杂的路由,没有 replication 副本备份。



总而言之,NSQ 高效轻量、简单、易于分布式扩展。另外有赞团队自己改造了一版 NSQ 并开源了出来( https://github.com/youzan/nsq ),视频:

https://www.youtube.com/watch?v=GCOvuCKe5zA ,感兴趣的也可以了解下。

相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
消息中间件 自然语言处理 Go
Golang 语言编写的消息队列 NSQ 官方客户端 go-nsq 怎么使用?
Golang 语言编写的消息队列 NSQ 官方客户端 go-nsq 怎么使用?
280 0
|
缓存 网络协议 网络架构
Docker 网络 IP 地址冲突,就该这么处理!
Docker 网络 IP 地址冲突,就该这么处理!
653 2
|
传感器 监控 物联网
golang开源的可嵌入应用程序高性能的MQTT服务
golang开源的可嵌入应用程序高性能的MQTT服务
768 3
|
11月前
|
机器学习/深度学习 人工智能 并行计算
《量子计算对人工智能发展的深远影响》
在科技发展的浪潮中,量子计算与人工智能的融合正引领着深刻的科技变革。量子计算利用量子比特的叠加和纠缠特性,实现并行计算,显著提升机器学习训练速度、优化问题求解、大数据分析能力及AI模型泛化能力,催生新型AI算法,并拓展新应用领域。然而,这一融合仍面临硬件稳定性和软件开发等挑战。
537 4
《量子计算对人工智能发展的深远影响》
|
消息中间件 Java 测试技术
Goim框架的源码学习笔记
Goim框架的源码学习笔记
|
存储 消息中间件 JSON
DDD基础教程:一文带你读懂DDD分层架构
DDD基础教程:一文带你读懂DDD分层架构
|
Kubernetes 网络协议 网络安全
在K8S中,k8s中service访问有问题,该如何排查?
在K8S中,k8s中service访问有问题,该如何排查?
|
存储 监控 NoSQL
用Redis延时队列搞定订单超时业务
Redis延时队列利用Sorted Set实现定时任务,适用于订单超时、定时提醒等场景。通过设置消息到期时间戳作为分数,到期后从Sorted Set中获取并处理。Redisson客户端提供便捷实现,如Java示例所示,利用RBlockingDeque和RDelayedQueue管理队列。注意时间精度、资源消耗和锁机制等问题,适用于订单取消、服务延迟激活、定时提醒等业务。【5月更文挑战第1天】
430 0
|
存储 负载均衡 算法
1. Etcd 介绍
1. Etcd 介绍
io.lettuce.core.RedisCommandTimeoutException: Command timed out 解决办法
io.lettuce.core.RedisCommandTimeoutException: Command timed out 解决办法
504 0