NSQ研究与实践

Golang 领域 NSQ 消息队列的优势与挑战 随着微服务架构与实时数据处理需求的普及,消息队列作为分布式系统的核心组件,其性能、可靠性与扩展性成为技术选型的关键。NSQ 作为由 Golang 开发的开源消息队列系统,凭借轻量高效、分布式设计和语言原生支持等特性,在互联网、金融、物联网等领域获得广泛应用。本文将系统剖析 NSQ 的技术优势,深入探讨其核心机制,并客观分析实际应用中面临的挑战,为技术选型与架构设计提供参考。 阅读详情

介绍

最近在研究一些消息中间件,常用的MQ如RabbitMQ,ActiveMQ,Kafka等。NSQ是一个基于Go语言的分布式实时消息平台,它基于MIT开源协议发布,由bitly公司开源出来的一款简单易用的消息中间件。

官方和第三方还为NSQ开发了众多客户端功能库,如官方提供的基于HTTP的nsqd、Go客户端go-nsq、Python客户端pynsq、基于Node.js的JavaScript客户端nsqjs、异步C客户端libnsq、Java客户端nsq-java以及基于各种语言的众多第三方客户端功能库。

 

Features

1.Distributed

NSQ提供了分布式的,去中心化,且没有单点故障的拓扑结构,稳定的消息传输发布保障,能够具有高容错和HA(高可用)特性。

2.Scalable易于扩展

NSQ支持水平扩展,没有中心化的brokers。内置的发现服务简化了在集群中增加节点。同时支持pub-sub和load-balanced 的消息分发。

3. Ops Friendly

NSQ非常容易配置和部署,生来就绑定了一个管理界面。二进制包没有运行时依赖。官方有Docker image。

4.Integrated高度集成

官方的 Go 和 Python库都有提供。而且为大多数语言提供了库。

 

组件

Topic :一个topic就是程序发布消息的一个逻辑键,当程序第一次发布消息时就会创建topic。

Channels :channel与消费者相关,是消费者之间的负载均衡,channel在某种意义上来说是一个“队列”。每当一个发布者发送一条消息到一个topic,消息会被复制到所有消费者连接的channel上,消费者通过这个特殊的channel读取消息,实际上,在消费者第一次订阅时就会创建channel。Channel会将消息进行排列,如果没有消费者读取消息,消息首先会在内存中排队,当量太大时就会被保存到磁盘中。

Messages:消息构成了我们数据流的中坚力量,消费者可以选择结束消息,表明它们正在被正常处理,或者重新将他们排队待到后面再进行处理。每个消息包含传递尝试的次数,当消息传递超过一定的阀值次数时,我们应该放弃这些消息,或者作为额外消息进行处理。

nsqd:nsqd 是一个守护进程,负责接收,排队,投递消息给客户端。它可以独立运行,不过通常它是由 nsqlookupd 实例所在集群配置的(它在这能声明 topics 和 channels,以便大家能找到)。

nsqlookupd:nsqlookupd 是守护进程负责管理拓扑信息。客户端通过查询 nsqlookupd 来发现指定话题(topic)的生产者,并且 nsqd 节点广播话题(topic)和通道(channel)信息。有两个接口:TCP 接口,nsqd 用它来广播。HTTP 接口,客户端用它来发现和管理。

nsqadmin:nsqadmin 是一套 WEB UI,用来汇集集群的实时统计,并执行不同的管理任务。

常用工具类:

nsq_to_file:消费指定的话题(topic)/通道(channel),并写到文件中,有选择的滚动和/或压缩文件。

nsq_to_http:消费指定的话题(topic)/通道(channel)和执行 HTTP requests (GET/POST) 到指定的端点。

nsq_to_nsq:消费者指定的话题/通道和重发布消息到目的地 nsqd 通过 TCP。

 

拓扑结构

NSQ推荐通过他们相应的nsqd实例使用协同定位发布者,这意味着即使面对网络分区,消息也会被保存在本地,直到它们被一个消费者读取。更重要的是,发布者不必去发现其他的nsqd节点,他们总是可以向本地实例发布消息。

首先,一个发布者向它的本地nsqd发送消息,要做到这点,首先要先打开一个连接,然后发送一个包含topic和消息主体的发布命令,在这种情况下,我们将消息发布到事件topic上以分散到我们不同的worker中。

事件topic会复制这些消息并且在每一个连接topic的channel上进行排队,在我们的案例中,有三个channel,它们其中之一作为档案channel。消费者会获取这些消息并且上传到S3。

每个channel的消息都会进行排队,直到一个worker把他们消费,如果此队列超出了内存限制,消息将会被写入到磁盘中。Nsqd节点首先会向nsqlookup广播他们的位置信息,一旦它们注册成功,worker将会从nsqlookup服务器节点上发现所有包含事件topic的nsqd节点。

然后每个worker向每个nsqd主机进行订阅操作,用于表明worker已经准备好接受消息了。这里我们不需要一个完整的连通图,但我们必须要保证每个单独的nsqd实例拥有足够的消费者去消费它们的消息,否则channel会被队列堆着。

 

 

原理

1.消息传递担保

NSQ 保证消息将交付至少一次,虽然消息可能是重复的。消费者应该关注到这一点,删除重复数据或执行idempotent等操作。

这个担保是作为协议和工作流的一部分,工作原理如下(假设客户端成功连接并订阅一个话题):

1)客户表示已经准备好接收消息

2)NSQ 发送一条消息,并暂时将数据存储在本地(在 re-queue 或 timeout)

3)客户端回复 FIN(结束)或 REQ(重新排队)分别指示成功或失败。如果客户端没有回复, NSQ 会在设定的时间超时,自动重新排队消息

这确保了消息丢失唯一可能的情况是不正常结束 nsqd 进程。在这种情况下,这是在内存中的任何信息(或任何缓冲未刷新到磁盘)都将丢失。

如何防止消息丢失是最重要的,即使是这个意外情况可以得到缓解。一种解决方案是构成冗余 nsqd对(在不同的主机上)接收消息的相同部分的副本。因为你实现的消费者是幂等的,以两倍时间处理这些消息不会对下游造成影响,并使得系统能够承受任何单一节点故障而不会丢失信息。

 

2.简化配置和管理

单个 nsqd 实例被设计成可以同时处理多个数据流。流被称为“话题”和话题有 1 个或多个“通道”。每个通道都接收到一个话题中所有消息的拷贝。在实践中,一个通道映射到下行服务消费一个话题。

话题和通道都没有预先配置。话题由第一次发布消息到命名的话题或第一次通过订阅一个命名话题来创建。通道被第一次订阅到指定的通道创建。话题和通道的所有缓冲的数据相互独立,防止缓慢消费者造成对其他通道的积压(同样适用于话题级别)。

一个通道一般会有多个客户端连接。假设所有已连接的客户端处于准备接收消息的状态,每个消息将被传递到一个随机的客户端。nsqlookupd,它提供了一个目录服务,消费者可以查找到提供他们感兴趣订阅话题的 nsqd 地址 。在配置方面,把消费者与生产者解耦开(它们都分别只需要知道哪里去连接 nsqlookupd 的共同实例,而不是对方),降低复杂性和维护。

在更底的层面,每个 nsqd 有一个与 nsqlookupd 的长期 TCP 连接,定期推动其状态。这个数据被 nsqlookupd 用于给消费者通知 nsqd 地址。对于消费者来说,一个暴露的 HTTP /lookup 接口用于轮询。为话题引入一个新的消费者,只需启动一个配置了 nsqlookup 实例地址的 NSQ 客户端。无需为添加任何新的消费者或生产者更改配置,大大降低了开销和复杂性。

 

3.消除单点故障

NSQ被设计以分布的方式被使用。nsqd 客户端(通过 TCP )连接到指定话题的所有生产者实例。没有中间人,没有消息代理,也没有单点故障。

这种拓扑结构消除单链,聚合,反馈。相反,你的消费者直接访问所有生产者。从技术上讲,哪个客户端连接到哪个 NSQ 不重要,只要有足够的消费者连接到所有生产者,以满足大量的消息,保证所有东西最终将被处理。对于 nsqlookupd,高可用性是通过运行多个实例来实现。他们不直接相互通信和数据被认为是最终一致。消费者轮询所有的配置的 nsqlookupd 实例和合并 response。失败的,无法访问的,或以其他方式故障的节点不会让系统陷于停顿。

 

4.效率

对于数据的协议,通过推送数据到客户端最大限度地提高性能和吞吐量的,而不是等待客户端拉数据。这个概念,称之为 RDY 状态,基本上是客户端流量控制的一种形式。

当客户端连接到 nsqd 和并订阅到一个通道时,它被放置在一个 RDY 为 0 状态。这意味着,还没有信息被发送到客户端。当客户端已准备好接收消息发送,更新它的命令 RDY 状态到它准备处理的数量,比如 100。无需任何额外的指令,当 100 条消息可用时,将被传递到客户端(服务器端为那个客户端每次递减 RDY 计数)。客户端库的被设计成在 RDY 数达到配置 max-in-flight 的 25% 发送一个命令来更新 RDY 计数(并适当考虑连接到多个 nsqd 情况下,适当地分配)。

 

5.心跳和超时

NSQ 的 TCP 协议是面向 push 的。在建立连接,握手,和订阅后,消费者被放置在一个为 0 的 RDY 状态。当消费者准备好接收消息,它更新的 RDY 状态到准备接收消息的数量。NSQ 客户端库不断在幕后管理,消息控制流的结果。每隔一段时间,nsqd 将发送一个心跳线连接。客户端可以配置心跳之间的间隔,但 nsqd 会期待一个回应在它发送下一个心掉之前。

组合应用级别的心跳和 RDY 状态,避免头阻塞现象,也可能使心跳无用(即,如果消费者是在后面的处理消息流的接收缓冲区中,操作系统将被填满,堵心跳)为了保证进度,所有的网络 IO 时间上限势必与配置的心跳间隔相关联。这意味着,你可以从字面上拔掉之间的网络连接 nsqd 和消费者,它会检测并正确处理错误。当检测到一个致命错误,客户端连接被强制关闭。在传输中的消息会超时而重新排队等待传递到另一个消费者。最后,错误会被记录并累计到各种内部指标。

 

6.分布式

因为NSQ没有在守护程序之间共享信息,所以它从一开始就是为了分布式操作而生。个别的机器可以随便宕机随便启动而不会影响到系统的其余部分,消息发布者可以在本地发布,即使面对网络分区。

这种“分布式优先”的设计理念意味着NSQ基本上可以永远不断地扩展,需要更高的吞吐量?那就添加更多的nsqd吧。唯一的共享状态就是保存在lookup节点上,甚至它们不需要全局视图,配置某些nsqd注册到某些lookup节点上这是很简单的配置,唯一关键的地方就是消费者可以通过lookup节点获取所有完整的节点集。清晰的故障事件——NSQ在组件内建立了一套明确关于可能导致故障的的故障权衡机制,这对消息传递和恢复都有意义。虽然它们可能不像Kafka系统那样提供严格的保证级别,但NSQ简单的操作使故障情况非常明显。

 

6.no replication

不像其他的队列组件,NSQ并没有提供任何形式的复制和集群,也正是这点让它能够如此简单地运行,但它确实对于一些高保证性高可靠性的消息发布没有足够的保证。我们可以通过降低文件同步的时间来部分避免,只需通过一个标志配置,通过EBS支持我们的队列。但是这样仍然存在一个消息被发布后马上死亡,丢失了有效的写入的情况。

 

7.没有严格的顺序

虽然Kafka由一个有序的日志构成,但NSQ不是。消息可以在任何时间以任何顺序进入队列。在我们使用的案例中,这通常没有关系,因为所有的数据都被加上了时间戳,但它并不适合需要严格顺序的情况。

 

8.无数据重复删除功能

NSQ对于超时系统,它使用了心跳检测机制去测试消费者是否存活还是死亡。很多原因会导致我们的consumer无法完成心跳检测,所以在consumer中必须有一个单独的步骤确保幂等性。

 

nsqadmin

对Streams的详细信息进行查看,包括NSQD节点,具体的channel,队列中的消息数,连接数等信息。

 

列出所有的NSQD节点

消息的统计

 

lookup主机的列表

 

 

实践

拓扑结构

实验采用3台NSQD服务,2台LOOKUPD服务。

采用官方推荐的拓扑,消息发布的服务和NSQD在一台主机。一共5台机器。

NSQ基本没有配置文件,配置通过命令行指定参数。

主要命令如下

LOOKUPD命令:

bin/nsqlookupd

NSQD命令:

bin/nsqd --lookupd-tcp-address=172.16.30.254:4160 -broadcast-address=172.16.30.254

bin/nsqadmin --lookupd-http-address=172.16.30.254:4161

工具类,消费后存储到本地文件。

bin/nsq_to_file --topic=newtest --channel=test --output-dir=/tmp --lookupd-http-address=172.16.30.254:4161

发布一条消息

curl -d 'hello world 5' 'http://172.16.30.254:4151/put?topic=test'

 

总结

NSQ基本核心就是简单性,是一个简单的队列,这意味着它很容易进行故障推理和很容易发现bug。消费者可以自行处理故障事件而不会影响系统剩下的其余部分。

事实上,简单性是我们决定使用NSQ的首要因素,这方便与我们的许多其他软件一起维护,通过引入队列使我们得到了堪称完美的表现,通过队列甚至让我们增加了几个数量级的吞吐量。越来越多的consumer需要一套严格可靠性和顺序性保障,这已经超过了NSQ提供的简单功能。

结合我们的业务系统来看,对于我们所需要传输的发票消息,相对比较敏感,无法容忍某个nsqd宕机,或者磁盘无法使用的情况,该节点堆积的消息无法找回。这是我们没有选择该消息中间件的主要原因。简单性和可靠性似乎并不能完全满足。相比Kafka,ops肩负起更多负责的运营。另一方面,它拥有一个可复制的、有序的日志可以提供给我们更好的服务。但对于其他适合NSQ的consumer,它为我们服务的相当好,我们期待着继续巩固它的坚实的基础。

 

 

参考

http://www.infoq.com/cn/news/2015/02/nsq-distributed-message-platform/

https://speakerdeck.com/snakes/nsq-nyc-golang-meetup

http://nsq.io/

NSQ介绍 一 NSQ是什么 NSQ是一个基于Go语言的分布式实时消息平台, 它具有分布式、去中心化的拓扑结构,支持无限水平扩展。无单点故障、故障容错、高可用性以及能够保证消息的可靠传递的特征。另外,NSQ非常容易配置和部署, 且支持众多的消息协议。支持多种客户端,协议简单,如果有兴趣,可参照协议自已实现一个也可以。简单点说,NSQ就是一个基于Go语言实现的轻量级消息平台。 二 NSQ组件 1 nsqd:一个负责接收、排队、转发消息到客户端的守护进程 2 nsqlookupd:管理拓扑信息, 用于收集nsqd上报的to 阅读详情

相关推荐

NSQ源码安装运行过程

最近对NSQ很感兴趣,所以想研究一下NSQ源码;要想研究源码,首先得知道怎么使用吧。因此,第一步,就是如何通过源码来安装并启动NSQ 1 下载源码,并且编译: 这样,整个NSQ项目就搞好了 2 在nsq目录下,进入build目录,如下: 可以看到,在这个目录下的nsqd,nsqlookupd,nsqadmin等可执行文件 1 在一个shell下,启动 2 在另一个shell下,启动;这里需要注

飞越蓝天的专栏 595

NSQ系列(一)nsq 介绍

NSQ 介绍 简介 NSQ 是一款 Go 语言编写的开源分布式消息队列中间件,具备非常好的性能、易用性和可用性。 性能方面,采用了分布式可横向扩展的架构,让其适用于超大规模的消息实时处理,能够满足绝大部业务量级的需要; 易用性方面,NSQ 配置和部署都非常的简便,提供了清晰的文档和多语言且功能全面的 SDK,同时还提供了浏览器 nsqadmin、nsqlookupd 等非常好用的易用性组件,nsqadmin 可以实现可视化的管理消息集群; 可用性方面,NSQ 具备非常高质量的工程实现,程序鲁棒性非

会哭的雨@的博客 7967

别再只用CANape测数据了!手把手教你用ASAP2 Studio编辑A2L文件(附MAP文件更新避坑指南)

本文深入探讨ASAP2 Studio在ECU开发中的高阶应用,特别是如何利用其编辑A2L文件并同步更新MAP文件,提升测量标定效率。文章详细解析了ASAP2 Studio的双向同步能力、MAP文件更新全流程及变量管理技巧,帮助工程师避免常见错误,优化工作流程。

weixin_26833939的博客 508

分布式实时消息平台NSQ: 整体架构

分布式实时消息平台NSQ- 整体架构 介绍 NSQ是一个基于Go语言的分布式实时消息平台,其设计目标是为在分布式环境下运行的去中心化服务提供一个强大的基础架构。 NSQ具有分布式、去中心化的拓扑结构,该结构具有无单点故障、故障容错、高可用性以及能够保证消息的可靠传递的特征。NSQ非常容易配置和部署,且具有最大的灵活性,支持众多消息协议。 术语 Topic: 一个可供订阅的话题,是消息的分类概念。 channel: 一个通道(channel)是消费者订阅了某个话题的逻辑分组. 一个Topic有可以分为多个C

CoLiuRs 2842

⑨【从0制作自己的ros导航小车:上位机篇】04、使用gmapping建图

前面的文章已经能够实现在odom坐标系下显示小车模型和里程计数据了,本文加上激光slam必不可少的传感器雷达,先进行测试,然后直接开始建图!

海风的博客 2916

Difftest踩坑笔记(一)

Difftest是差分测试框架,有什么用呢?高性能CPU的设计需要做复杂的测试,传统的测试方法运行较慢,而且出了问题很难定位,Difftest就是为了解决这两个问题。

http://www.icfgblog.com/ 4196

NSQ 实现逻辑探秘

topic 中的消息会被复制到多个 channel 中,并将消息推送到其中一个消费这个 channel 的消费者手中。go sdk 中提供的 NewProducer 函数需要提供 nsqd 的地址,因此生产者会直连某个 nsqd,并向其投递消息。如果希望生产也能实现负载均衡,则需要我们自己做进一步的封装,大概逻辑是:向 nsqlookup 获取所有 nsqd 的信息建立多个 producer, 每个 producer 与不同的 nsqd 建立连接。

qq_22548549的博客 1550

新手小白入门编程第2讲 JAVA编程环境搭建 JDK与环境变量、Eclipse

1 JDK 1.1 JDK概述 JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。 JDK是整个java开发的核心,它包含了: JAVA开发工具(jdk\bin) 基础开发库(jdk\jre\lib\rt.jar) 基础开发库的源码(jdk\src.zip) 1.2 JDK下载与安装 本次使用的是JDK1.8,详细安装步骤可以参见”JDK培优安装手册”. 注意事项: 同时安装多个JDK时需要使用执行环境变量来确认使用的是哪个jdk 安装时选择默认选项安装到默认

程序媛泡泡的博客 4万+

NSQ简介及连接模式

1、 NSQ简介 NSQ是一个实时的分布式的消息处理平台。 主要有以下特点: 支持分布式的拓扑结构,没有SPOF(单点故障) 支持横向水平扩展(没有 brokers 等任何集中式代理) 性能优越,基于推送的低延迟的消息传递模式 结合负载均衡和多路广播类型的消息路由 擅长面向流(streaming)(高吞吐量)和 任务(Job)导向的工作负载 主要是基于内存的(超过高水位线消息将透明的存储到磁盘中) 运行时的服务发现 传输层安全性(TLS) 数据格式不可知 很少的依赖项,容易部署,具有

hero_java的专栏 3899

YOLOv5改进 | 注意力篇 | iRMB倒置残差块注意力机制(轻量化注意力机制,附二次创新)

本文给家大家带来的改进机制是iRMB,其是在论文Rethinking Mobile Block for Efficient Attention-based Models种提出,论文提出了一个新的主干网络EMO(后面我也会教大家如何使用该主干,本文先教大家使用该文中提出的注意力机制)。其主要思想是将轻量级的CNN架构与基于注意力的模型结构相结合(有点类似ACmix)我将iRMB和C2f结合,然后也将其用在了检测头种进行尝试三种结果进行对比,针对的作用也不相同,但是无论那种实验均有一定涨点效果。

Snu77的博客 2571

Unity GameObject 核心机制深度解析:从底层结构到工程实践

从底层机制讲透 Unity GameObject:托管壳加原生芯的双层对象模型如何制造假 null 陷阱、Transform 层级与组件通信的原理、生命周期回调的确切顺序。文章同时给出 Instantiate 成本分析与对象池等高频场景的工程实践。

游戏人生 40

组合开发一个订阅发布通信库minimsg

曾经的付出 以前根据自己的喜好和项目,研究过opendds,编译和使用都很复杂的东西,但是它是dds的一个标准。 以为学习Java,所有了就过netty,弄过dotnetty,但是官方都没有管了。 接触通信传输,UDP的使用很快,弄过一个udt. Java的mq都接触过,还了解过nsq(go). 看见没有,我对网络通信很感兴趣。 自己也写过简单的网络通信,当然号称高效通信。 当然还有正在使用的grpc库。 看,我多么无聊。所以,我任然关注通信、数据库‘分布式。 最近又开始了...

jinyuttt的专栏 1002

ABAP CDS 货币与计量单位换算全攻略:CURRENCY_CONVERSION、UNIT_CONVERSION 与 DECIMAL_SHIFT 的工程化实践

本文介绍了SAP ABAP CDS中三种单位/货币换算函数(UNIT_CONVERSION、CURRENCY_CONVERSION、DECIMAL_SHIFT)的实战应用。重点包括:各函数的职责边界与适用场景,参数配置与精度控制策略,以及基于标准表(T006、TCUR*等)的换算规则来源。文章提供可运行的CDS示例,涵盖单位换算(如MI转KM)、货币汇率转换(含小数位处理)及纯小数位调整等典型场景,并强调生产环境中需注意的精度差异与审计风险控制。适用于企业报表、成本核算等需要统一口径的业务场景。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1554

消息中间件NSQ深入与实践

消息中间件NSQ深入与实践 1. 介绍 最近在研究一些消息中间件,常用的MQ如RabbitMQ、ActiveMQ、Kafka等。NSQ是一个基于Go语言的分布式实时消息平台,它基于MIT开源协议发布,由bitly公司开源出来的一款简单易用的消息中间件。 官方和第三方还为NSQ开发了众多客户端功能库,如官方提供的基于HTTP的nsqd、Go客户端

huangshulang1234的博客 1628

【数据集】ERA5(欧洲中期天气预报中心)再分析数据介绍及下载

简介EAR5数据集及下载步骤

WW、forever的博客 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

NSQ深入与实践

1. 介绍最近在研究一些消息中间件,常用的MQ如RabbitMQ,ActiveMQ,Kafka等。NSQ是一个基于Go语言的分布式实时消息平台,它基于MIT开源协议发布,...

aoho求索 194

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

我们是如何使用NSQ处理7500亿消息的

为什么80%的码农都做不了架构师?>>> ...

weixin_34178244的博客 1804

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

nsq php,Nsq从入门到实践

当nsq跑起来之后, 我们可能会遇到以下问题分布式部署处理错误(何时requeue)如何使用golang lib抱着不应该只停留在入门的态度, 笔者粗浅的研究了一下这几个问题, 希望也对有同样疑问的人有帮助.部署由于NSQ的分布式网络结构, NSQD必须广播(到lookup)自己的地址并让消费者连接, 那么多个NSQD无法做透明负载均衡.就必须为每一个NSQD分配单独的IP(或host)以保证消费...

weixin_29791743的博客 488

linux shell快速搭建NSQ集群

golang中用到了NSQ消息队列,频繁的敲命令麻烦,索性自己写个shell快速搭建NSQ集群,shell具体代码如下 #!/usr/bin/env bash ########################################################### #Author:mengdj@outlook.com #Created Time:2020.12.16 11:56 #Description:execute nsq server #Version:0.0.1 #File:nsq

Hi mengdj 463

NSQ 全视图

前段时间,基于对go语言的兴趣,又苦于没有机会实践,于是想研究一些开源框架的源码。而选择NSQ主要是因为在工作中经常需要使用的MQ,比如RabbitMQ或 RocketMQ,因此也萌发了对MQ实现原理的兴趣。 NSQ的一些介绍大家可以在百度或者官网中查看,我这就不赘述了。 下面的逻辑图是基于我对NSQ源码的研究而画,主要是NSQD和Lookupd。如果有不对的地方,欢迎大家留言指出。后期将会...

H_L_S的专栏 423

浅析NSQ客户端consume过程源码

NSQ是一个用go语言实现的分布式消息系统,本篇博客不介绍NSQ的整体架构,这方面可以自己去了解。因为曾经的工作运用到了NSQ,我这两天闲下来研究了一下NSQ的客户端是如何完成consume这整个过程的。 下面是一个关于客户端消费NSQ队列里消息的示例:package mainimport ( "fmt" "time" "github.com/nsqio/go-nsq" )/

CrocdileChan的博客 1996

NSQ学习记录

一、简介   NSQ是一个基于Go语言的开源的分布式实时消息平台,他的代码托管在GitHub上。   NSQ可用于大规模系统的实时消息服务,它的设计目标是为在分布式环境下提供一个强大的去除中心化的分布式服务架构,可以每天处理数以亿计的实时消息。NSQ的优点是无单点故障、故障容错、高可用性和信息传递的高可靠性。NSQ安装部署简单,容易水平扩展,目前已有很多公司都是采用其作为自身企业内部的实时消息...

weixin_30699465的博客 211

源码安装 NSQ

因为业务需要,要用到 NSQ。所以学习了下 NSQ。首先是安装,我在自己电脑上,倾向于源码安装。一是源码安装可以安装最新的代码,二是整个安装过程可以自己掌控。 但是,安装过程中遇到了一些坑。主要还是我对 Go 以及一些衍生工具用的不是特别熟悉,并且在网上搜索到的文章,都是抄来抄去的很多并不能解决我的问题。所以我把整个安装过程记录下来,给自...

weixin_34233679的博客 234

NSQ源码分析之概述

消息队列在互联网公司使用非常普遍,因此也促使我去学习研究消息队列的原理以及细节问题;之前也有接触过消息队列,最主要就是在异步处理方面,当然消息队列还解耦,流量削峰等功能;目前消息队列产品也比较多,例如kafka,ActiveMQ,RabbitMQ,NSQ等等;之前原本打算看kafka,但是处于学习成本(kafka是scala编写,之前scala接触的比较少),所以就先不看kafka,选择了NSQ;

andylau00j的专栏 2362
上一篇: NSQ基本概念
下一篇: 聚集索引和非聚集索引
lldouble
博客等级 码龄16年 135粉丝 8原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值