NSQ简介及连接模式

nsqadmin参数解析 nsqadmin 阅读详情

1、 NSQ简介

NSQ是一个实时的分布式的消息处理平台。

主要有以下特点:

  • 支持分布式的拓扑结构,没有SPOF(单点故障)
  • 支持横向水平扩展(没有 brokers 等任何集中式代理)
  • 性能优越,基于推送的低延迟的消息传递模式
  • 结合负载均衡和多路广播类型的消息路由
  • 擅长面向流(streaming)(高吞吐量)和 任务(Job)导向的工作负载
  • 主要是基于内存的(超过高水位线消息将透明的存储到磁盘中)
  • 运行时的服务发现
  • 传输层安全性(TLS)
  • 数据格式不可知
  • 很少的依赖项,容易部署,具有健全的、有边界的、默认的配置项
  • 简单的TCP协议,支持任何语言的客户端库
  • 具有HTTP接口,用于统计、管理行为以及生产者操作(不需要客户端库额外发布)
  • 集成 statsd 用于实时监测
  • 强大的集群管理接口 (nsqadmin)

2、主要组件

  • nsqd 消息队列的核心,是一个守护进程,负责接收、队列和投递信息给客户端。
  • nsqlookupd 管理拓扑信息,是一个守护进程,并提供最终一致的服务发现功能。
  • nsqadmin 是一个Web 管理界面,用于实时的检测集群信息,并能够执行各种管理任务。

3、连接方式

分为两种,直连模式和通过nsqlookupd进行连接

4、直连模式

NSQ 客户端通过TCP连接到提供指定主题的所有实例。没有中间代理 brokers,没有单点故障。

直接从所有生产者中消费消息。从技术来上来讲,哪个客户端连接到哪个NSQ实例并不重要,只要有足够的客户端连接到所有的生产者以满足消息总量就可以,并保证所有的消息最终都会被处理。

 

 

实验:在一台虚拟机上,模拟启动两个 nsqd 实例

(1)启动第一个实例, tcp端口地址为:8000,http端口地址为:8001,存储磁盘备份消息的路径为/nsq_data

./nsqd -tcp-address ":8000" -http-address ":8001" -data-path=/nsq_data

启动成功后,在存储路径nsq_data会生成文件nsq.dat

 

其中文件内容为JSON格式的信息:

 

{
	"topics": [{
		"channels": [{
			"name": "HelloWordChan",
			"paused": false
		}],
		"name": "HelloWordTopic",
		"paused": false
	}],
	"version": "1.2.1-alpha"
}

 

 

 

(2)启动第二个实例, tcp端口地址为:7000,http端口地址为:7001,存储磁盘备份消息的路径为/nsq_data_2

./nsqd -tcp-address ":7000" -http-address ":7001" -data-path=/nsq_data_2

 

启动成功后,在存储路径nsq_data_2 会生成文件nsq.dat

其中文件内容为JSON格式的信息:

 

{
	"topics": [{
		"channels": [{
			"name": "HelloWordChan",
			"paused": false
		}],
		"name": "HelloWordTopic",
		"paused": false
	}],
	"version": "1.2.1-alpha"
}

(3) 因资源有限,现创建一个Consumer端 应用程序

 

package main

import (
   "fmt"
   "github.com/nsqio/go-nsq"
   "log"
   "os"
   "os/signal"
   "syscall"
)

type  StdoutHandler struct {
   topicName  string
}

func (sh *StdoutHandler) HandleMessage( m *nsq.Message)  error {
   _, err := os.Stdout.WriteString(sh.topicName)
   if err != nil  {
      log.Fatalf("ERROR: failed to write to os.Stdout - %s",err)
   }

   _, err = os.Stdout.WriteString(" | ")
   if err != nil {
      log.Fatalf("Error: failed to write to os.Stdout - %s",err)
   }

   _, err = os.Stdout.Write(m.Body)
   if err != nil {
      log.Fatalf("Error: failed to write to os.Stdout - %s",err)
   }

   _, err = os.Stdout.WriteString("\n")
   if err != nil {
      log.Fatalf("Error: failed to write to os.Stdout - %s",err)
   }
   return nil
}

func main() {

   cfg := nsq.NewConfig()
   nsqdTCPAddrs := []string {"192.168.1.18:7000","192.168.1.18:8000"}
   topicName := "HelloWordTopic"
   channel := "HelloWordChan"

   // 设置信号量
   sigChan := make(chan os.Signal,1)
   signal.Notify(sigChan,syscall.SIGINT,syscall.SIGTERM)

   fmt.Println("job is running......")

   //创建 Consumer
   consumer, err := nsq.NewConsumer(topicName, channel, cfg)
   if err != nil {
      log.Fatal(err)
   }

    // 创建 Handler
    stdOutHandler := &StdoutHandler{topicName: topicName}

    //为Consumer添加Handler
    consumer.AddHandler(stdOutHandler)
    //连接NSQDS
   err = consumer.ConnectToNSQDs(nsqdTCPAddrs)
   if err != nil {
      log.Fatal(err)
   }

   //取得当前连接信息
   stats := consumer.Stats()
   if stats.Connections == 0 {
      log.Fatal("stats report 0 connections (should be > 0)")
   }

   <- sigChan
}

主要是通过语句 err = consumer.ConnectToNSQDs(adds),连接多个NSQD服务。

正常启动应用程序,会输出如下结果:

(4) 选择一个NSQD 服务,向指定的主题发布消息

 

curl -d '8001 message info' 'http://192.168.1.18:8001/pub?topic=HelloWordTopic'
curl -d '7001 message info' 'http://192.168.1.18:7001/pub?topic=HelloWordTopic'

如果发送消息成功,会得到响应信息:OK:

NSQD 会根据消息路由算法,把消息推送至一个客户端。

客户端应用的输出如下:

 

可以看到无论在哪个NSQD应用下发布的消息都会推送至客户端。

(5)在磁盘备份消息的路径下,也会同步备份消息文件:

查看文件内容:

 

(6)尝试停止一个NSQD服务,查看客户端应用是否会检查NSQD服务的状态

 

客户端应用输出如下信息:

 

2021/02/03 15:18:07 ERR 1 [HelloWordTopic/HelloWordChan] (192.168.1.18:7000) IO error - EOF

2021/02/03 15:18:07 INF 1 [HelloWordTopic/HelloWordChan] (192.168.1.18:7000) beginning close

2021/02/03 15:18:07 INF 1 [HelloWordTopic/HelloWordChan] (192.168.1.18:7000) readLoop exiting

2021/02/03 15:18:07 INF 1 [HelloWordTopic/HelloWordChan] (192.168.1.18:7000) breaking out of writeLoop

2021/02/03 15:18:07 INF 1 [HelloWordTopic/HelloWordChan] (192.168.1.18:7000) writeLoop exiting

2021/02/03 15:18:07 INF 1 [HelloWordTopic/HelloWordChan] (192.168.1.18:7000) finished draining, cleanup exiting

2021/02/03 15:18:07 INF 1 [HelloWordTopic/HelloWordChan] (192.168.1.18:7000) clean close complete

2021/02/03 15:18:07 WRN 1 [HelloWordTopic/HelloWordChan] there are 1 connections left alive

2021/02/03 15:18:07 INF 1 [HelloWordTopic/HelloWordChan] (192.168.1.18:7000) re-connecting in 1m0s

客户端会尝试进行重连,重连的规则摘自官网内容:

  • If the consumer is configured with a specific list of nsqd instances, reconnection should be handled by delaying the retry attempt in an exponential backoff manner (i.e. try to reconnect in 8s, 16s, 32s, etc., up to a max).

 

(7)通过另外一个活着的NSQD服务,发布一条消息,查看客户端应用是否会接收到

 

curl -d '8001 Connection Handling' 'http://192.168.1.18:8001/pub?topic=HelloWordTopic'

客户端应用也会收到消息:

同时,也可以看出,如果向关闭的NSQD服务,发布消息,会返回错误信息:

5、直接连接方式总结

(1)如果NSQD实例出现异常,客户端会不断的进行重连,如果想要去掉这个连接信息,就需要额外做一些处理。

(2)如果需要对NSQD进行水平扩展,需要修改客户端应用程序,比如ConnectToNSQDs方法。

 

6、去中心化的连接模式NSQLOOKUPD

nsqlookupd 可以提供运行时的服务发现,为消费者查找到指定主题的nsqd生产者实例。

通过运行多个实例来实现高可用,它们不直接相互通信,并且数据保持最终一致性。实现去中心化。

消费者轮询其配置的所有的nsqlookupd实例并联合它们的响应。异常节点不会导致系统停止运行。

 

示例图中,运行着多个nsqd实例和多个nsqlookupd实例,客户端应用根据NSQLOOKUPD 来查找可用的NSQD实例

注意:nsqlookupd 有两个接口:一个是TCP接口(默认端口:4160),nsqd使用它进行广播。

一个是 HTTP接口(默认端口:4161),客户端库使用它进行服务发现和其他管理操作。

实验:

(1)先启动两个 nsqlookupd

./nsqlookupd -tcp-address "192.168.1.18:8200" -http-address "192.168.1.18:8201"

 

./nsqlookupd -tcp-address "192.168.1.18:7200" -http-address "192.168.1.18:7201"

(2)为了验证运行时服务发现,先启动两个nsqd

 

./nsqd -tcp-address ":8000" -http-address ":8001" --lookupd-tcp-address=192.168.1.18:8200 --lookupd-tcp-address=192.168.1.18:7200 -broadcast-address='192.168.1.18' -data-path=/nsq_data

./nsqd -tcp-address ":7000" -http-address ":7001" --lookupd-tcp-address=192.168.1.18:8200 --lookupd-tcp-address=192.168.1.18:7200 -broadcast-address='192.168.1.18' -data-path=/nsq_data_2

 

注意:此种情况,在启动nsqd的时候,需要指定-broadcast-address,否则客户端会无法连接至 nsqd.

此参数的主要作用是指明要广播注册到nsqlookupd中的nsqd 自身的地址

 

(3)启动一个客户端应用

 

package main

import (
   "fmt"
   "github.com/nsqio/go-nsq"
   "log"
   "os"
   "os/signal"
   "syscall"
)

type  StdoutHandler struct {
   topicName  string
}

func (sh *StdoutHandler) HandleMessage( m *nsq.Message)  error {
   _, err := os.Stdout.WriteString(sh.topicName)
   if err != nil  {
      log.Fatalf("ERROR: failed to write to os.Stdout - %s",err)
   }

   _, err = os.Stdout.WriteString(" | ")
   if err != nil {
      log.Fatalf("Error: failed to write to os.Stdout - %s",err)
   }

   _, err = os.Stdout.Write(m.Body)
   if err != nil {
      log.Fatalf("Error: failed to write to os.Stdout - %s",err)
   }

   _, err = os.Stdout.WriteString("\n")
   if err != nil {
      log.Fatalf("Error: failed to write to os.Stdout - %s",err)
   }
   return nil
}

func main() {

   cfg := nsq.NewConfig()

   //nsqdTCPAddrs := []string {"192.168.1.18:7000","192.168.1.18:8000"}
   lookupdHTTPAddrs := []string {"192.168.1.18:7201","192.168.1.18:8201"}
   topicName := "HelloWordTopic"
   channel := "HelloWordChan"

   // 设置信号量
   sigChan := make(chan os.Signal,1)
   signal.Notify(sigChan,syscall.SIGINT,syscall.SIGTERM)

   fmt.Println("job is running......")

   //创建 Consumer
   consumer, err := nsq.NewConsumer(topicName, channel, cfg)
   if err != nil {
      log.Fatal(err)
   }

    // 创建 Handler
    stdOutHandler := &StdoutHandler{topicName: topicName}

    //为Consumer添加Handler
    consumer.AddHandler(stdOutHandler)
    //连接NSQDS
   //err = consumer.ConnectToNSQDs(nsqdTCPAddrs)
   //连接 NSQLOOKUPD
   err = consumer.ConnectToNSQLookupds(lookupdHTTPAddrs)
   if err != nil {
      log.Fatal(err)
   }

   //取得当前连接信息
   stats := consumer.Stats()
   if stats.Connections == 0 {
      log.Fatal("stats report 0 connections (should be > 0)")
   }

   <- sigChan

}

 

正常情况下,输出结果如下:

 

主要通过方法

err = consumer.ConnectToNSQLookupds(lookupdHTTPAddrs)

连接nsqlookupd.

底层是通过发起一个HTTP方法:

http://192.168.1.18:7201/lookup?topic=HelloWordTopic

http://192.168.1.18:8201/lookup?topic=HelloWordTopic

来获取到指定主题(topic=HelloWordTopic)的nsqd列表信息,然后再对所有的nsqd实例进行连接。

 

(3)客户端轮询

官方文档中写道:

  • If the consumer is configured to discover instances via nsqlookupd, reconnection should be handled automatically based on the polling interval (i.e. if a consumer disconnects from an nsqd, the client library should only attempt to reconnect if that instance is discovered by a subsequent nsqlookupd polling round). This ensures that consumers can learn about nsqd that are introduced to the topology and ones that are removed (or failed).

意思是:如果消费者使用nsqlookupd进行服务发现,客户端应用会基于配置的轮询间隔自动的进行重连。比如,如果一个消费者断开了与一个nsqd 的连接,那么客户端应用应该只能在该实例被随后的nsqlookupd轮询发现时才会尝试重新连接。这使得客户端能够充分了解网络拓扑中的nsqd的生命状态(正常、失败或被删除的等)。

在客户端实例代码的打印日志中可以看出

客户端每隔一分钟就会查询一次nsqlookupd,来获知nsqd实例的状态。

同时在后端的nsqdlookup的日志中,也记录了这次查询:

 

(4)启动nsqadmin,查看所有的 topic

./nsqadmin  --lookupd-http-address=192.168.1.18:8201 --lookupd-http-address=192.168.1.18:7201

 

浏览器中输入:http://192.168.1.18:4171/

 

会发现topics的相关信息:

 

(5)水平扩展nsqd,验证服务发现

 

./nsqd -tcp-address ":6000" -http-address ":6001" --lookupd-tcp-address=192.168.1.18:8200 --lookupd-tcp-address=192.168.1.18:7200 -broadcast-address='192.168.1.18' -data-path=/nsq_data_3

同时两个nsqlookupd实例,会监听到新加入的nsqd实例

 

由于新建立的nsqd实例还没有指定topic,因此需要指定要处理的topic

curl -X POST 'http://192.168.1.18:6001/topic/create?topic=HelloWordTopic'

在客户端的输出日志中,可以看到已经连接到新增加的nsqd实例

(6)手动关闭一个nsqd实例,验证服务发现功能

关闭 -tcp-address ":8000"这个nsqd实例

 

客户端输出日志如下:

 

可以看出,客户端通过nsqlookupd查询的nsqd 实例都是有效可用的。

 

 

 

 

 

 

 

 

 

NSQ消息队列 异步任务与消息队列 同步任务:一定要等任务执行完了,得到结果,才执行下一个任务。 异步任务:不用等任务执行完,直接执行下一个任务。 异步任务最简单可以用异步线程实现,golang 中可以用goroutine实现,但受时间和不确定因素限制,进程有可能超时、退出或者被杀死,消息队列可以定义任何时间的延迟,几天都可以。异步线程、goroutine只是单机的实现,消息队列是分布式的,可以跨语言夸系统。消息队列是独立的,跨线程概念的,实现跨主机的分布式并发。 消息队列实现分布式的异步任务,利用分布式架构,实现可扩展性 阅读详情

相关推荐

Golang 运用 NSQ 构建消息广播系统

本文旨在帮助开发者理解如何使用 Golang 和 NSQ 构建可靠的消息广播系统。我们将覆盖从基础概念到高级应用的完整知识体系。介绍 NSQ 的核心概念和架构讲解 Golang 与 NSQ 的集成方式演示完整的消息广播系统实现探讨实际应用场景和优化策略NSQ:一个实时的分布式消息平台,设计用于大规模处理消息Topic:消息的逻辑分类,生产者发布消息到特定主题Channel:主题的逻辑分组,消费者通过通道接收消息Producer:消息生产者,负责创建和发送消息Consumer。

AI Agent Harness Engineering 1117

NSQ系列(一)nsq 介绍

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

会哭的雨@的博客 7967

Golang 搭配 NSQ 实现异步任务处理

在现代分布式系统中,异步任务处理已成为构建可扩展、高可用应用程序的关键技术。本文旨在为开发者提供使用Golang和NSQ实现异步任务处理的全面指南,涵盖从基础概念到高级优化的所有方面。介绍NSQ的核心概念和架构详细讲解Golang与NSQ的集成方式提供完整的代码实现和优化建议探讨实际应用场景和最佳实践分析未来发展趋势和挑战NSQ:一个实时分布式消息平台,设计用于大规模处理消息Topic:消息的逻辑分类,生产者将消息发布到特定TopicChannel。

AI Agent Harness Engineering 849

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

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

CoLiuRs 2842

NSQ介绍

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

飞越蓝天的专栏 806

Nsq安装环境详细过程

1 背景         最近在研究nsq的相关源码。在研究源码之前,要搞明白nsq的使用,因此需要搭建nsq的环境。从nsq的官方文档上看,nsq安装一般也就是如下几种方法。首先需要说明的是,本人是mac电脑,安装过程也许不适用与非mac系统! 2 二进制方式         对于mac系统来说,只需要如下指令即可搞定: brew instal

飞越蓝天的专栏 1005

Golang之NSQ

1 NSQ 1.1 NSQ简介 NSQ是一个基于go语言开发的一个比较流行的分布式的消息队列。 1.2 NSQ优势 不存在单点故障,容错性能高以及高可用性,可靠的消息交付 支持横向扩展,没有集中式代理 配置和部署简单 1.2.1 NSQ适用于异步处理 参照下图利用消息队列把业务流程中的非关键流程异步化,从而显著降低业务请求的响应时间。 1.2.2 NSQ适用于应用解耦 通过使用消息队列将不同...

franky专栏 1470

NSQ介绍以及使用Go操作NSQ

NSQ是Go语言编写的一个开源的实时分布式内存消息队列,其性能十分优异。NSQ提倡分布式和分散的拓扑,没有单点故障,支持容错和高可用性,并提供可靠的消息交付保证NSQ支持横向扩展,没有任何集中式代理。NSQ易于配置和部署,并且内置了管理界面。

yonggeit的博客 3265

Go之NSQ简介,原理和使用

/* 1. NSQ提倡分布式和分散的拓扑,没有单点故障,支持容错和高可用性, 并提供可靠的消息交付保证. 2. NSQ支持横向扩展,没有任何集中式代理 3. NSQ易于配置和部署,并且内置了管理界面 / / 1. 支持无 SPOF 的分布式拓扑 2. 水平扩展(没有中间件,无缝地添加更多的节点到集群) 3. 低延迟消息传递 (性能) 4. 结合负载均衡和多播消息路由风格 5. 擅长面向流媒体(高通量)和工作(低吞吐量)工作负载 6. 主要是内存中(除了高水位线消息透明地保存在磁盘上) 7. 运行时发现消费者

526

Golang 装饰器模式以及在NSQ中的使用

最近在研究NSQ这款中间件,发现了一些有意思的东西,装饰器模式就是其中一个。在整个项目中,装饰器模式的使用随处可见,因此有了这篇文章。 装饰器模式属于设计模式的一种,它的定义,简单来说,就是在不改变对象的内部结构情况下,动态地扩展对象的功能。通过创建一个装饰器,包装真实的对象,给对象增加新的功能特性。在Java中,IO就是典型的应用到了装饰器模式;Python中,更是在语法上原生支持,这大大提高了装饰模式在 Python 中的应用。 我们举个例子来看一下装饰器的应用。首先

飞越蓝天的专栏 512

基于Python的网络拓扑图绘制

最近写论文画了许多图,在这里记录一些。当然,如果仅仅是展示性图片的话也可以使用visio,但是这里我仍然想探究一下如何使用pyhon画出美观的网络拓扑图。(1)根据邻接矩阵画出网络拓扑图(2)画出网络拓扑图,并对节点和链路进行表示,包括对节点和链路的标号,颜色区分,以及尺寸区分。

m0_53961910的博客 7093

NSQ 安装与配置指南

NSQ 是一个实时的分布式消息平台,设计用于在大规模环境中运行,每天可以处理数十亿条消息。它支持分布式和去中心化的拓扑结构,没有单点故障,从而实现了容错性和高可用性,同时保证了可靠的消息传递。NSQ 易于配置和部署,所有参数都在命令行中指定,编译后的二进制文件没有运行时依赖。 NSQ 使用 Go 语言编写,但也支持多种客户端库,包括官方的 Go 和 Python 库。 ## 2. 项目使用的关...

gitblog_01136的博客 1048

【故障排查】telnet连接失败:端口23不可达的深度分析与解决方案

本文深度解析telnet连接失败时端口23不可达的常见原因与解决方案。从快速自查目标地址、端口到服务端排查,涵盖服务状态检查、防火墙配置及安全组设置,并提供进阶诊断工具与抓包分析方法。文章强调telnet协议的安全风险,建议在生产环境中改用SSH等加密协议进行远程管理。

weixin_28323057的博客 395

深入理解NSQ的Go客户端实现:go-nsq核心用法解析

NSQ是一个高性能、分布式消息队列系统,而go-nsq是其官方提供的Go语言客户端库。本文将深入解析go-nsq的核心功能和使用方法,帮助开发者快速掌握这一强大的消息队列工具。 ## 核心概念与架构 go-nsq库提供了两个主要组件:Consumer(消费者)和Producer(生产者),它们分别对应消息的消费和生产场景。该库既提供了高级别的封装类型,也保留了底层NSQ协议的通信能力,让开发者

gitblog_00445的博客 593

STM32实战:5分钟搞定MXL90614红外测温模块的I2C驱动(附完整代码)

本文提供了一份快速集成MLX90614红外测温模块的STM32实战指南。通过详细的软件I2C驱动代码,重点解析了SMBus通信协议、CRC校验及温度数据转换,帮助开发者避开常见陷阱,实现5分钟内完成模块驱动并读取准确温度值。

wasm7browser的博客 353

COMSOL解的继承

COMSOL解的继承1. 应用场景2. 实现方法2.1. 添加研究步骤2.2. 引用研究 根据参考文献整理而来,原文见: http://blog.sina.com.cn/s/blog_4a0a8b5d010126w5.html https://www.zhihu.com/question/371867999/answer/1309194094 个人学习笔记,如有疏漏,欢迎补充 1. 应用场景 在COMSOL模拟中,一次求解之后往往遇到以下几种情况需要用到解的继承: 1)瞬态求解的继续运算。例如初始设定求解1

jessica0307的博客 1万+

Go操作NSQ

Go操作NSQ 目录 NSQ介绍 NSQ应用场景 安装 NSQ组件 NSQ架构 NSQ特性 Go操作NSQ NSQ是目前比较流行的一个分布式的消息队列,本文主要介绍了NSQ及Go语言如何操作NSQ。 1. NSQ介绍 NSQ是Go语言编写的一个开源的实时分布式内存消息队列,其性能十分优异。 NSQ的优势有以下优势: NSQ提倡分布式和分散的拓扑,没有单点故障,支持容错和高可用性,并提供可靠的消息交付保证 NSQ支持横向扩展,没有任何集中式代理。 NSQ易于配置和部署,并且内置了管理界面。

努力努力再努力L 404

告别手动归档:基于Allegro Skill的XTools一键生成Gerber与生产文件实践

本文详细介绍了基于Allegro Skill的XTools工具如何实现一键生成Gerber与生产文件,大幅提升PCB设计效率。通过自动化流程,解决了传统手动归档中的重复劳动、人为失误和标准不统一等问题,特别适合需要频繁输出生产文件的工程师。文章包含安装配置、实战操作、问题排查及进阶技巧,帮助用户快速掌握这一高效工具。

weixin_30505225的博客 461

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

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

weixin_34178244的博客 1804

STM32----SPI+DMA高效读写外部Flash的配置与实战

本文详细介绍了STM32通过SPI+DMA高效读写外部Flash的配置与实战方法。针对大量数据传输场景,使用DMA技术可显著提升系统效率,释放CPU资源。文章包含完整的代码实现、常见问题调试技巧以及性能优化建议,帮助开发者快速掌握这一关键技术。

pea55的博客 1031

知识图谱本体建模之RDF、RDFS、OWL详解

(一)知识图谱本体建模之RDF、RDFS、OWL详解 1.语义网体系 知识图谱于2012年由Google提出,并不是新概念,而是由语义网络(Semantic Network)衍生而来。语义网络由相互连接的节点和边组成,节点表示概念或者对象,边表示他们之间的关系。RDF,RDFS与OWL都是基于语义网的知识表示框架,在节点和边的取值上做了约束,制定了统一标准,为多源数据的融合提供了便利。RDF,RDFS/OWL 属于语义网技术栈,它们的提出,使得语义网克服了语义网络的缺点。其语义网技术栈如下所示。 2.RD

周周的专栏 1万+

NSQ VS Kafka

针对Kafka跟NSQ进行分析,选择最佳方案

xiao_1xu的博客 1159

Far planner 代码系列(35)动态障碍物预处理_激光雷达部分

主要讲解动态障碍物在激光雷达部分的剔除机制

博客 1057

go操作nsq

[TOC] nsq介绍 nsq是go语言编写的一个开源的实时分布式内存消息队列,性能优异。 nsq提倡分布式和分散的拓扑,没有单点故障,支持容错和高可用性,并提供可靠的消息交付保证 nsq支持横向扩展,没有任何集中式代理 nsq易于配置和部署,并且内置了管理界面 应用场景 异步处理 利用消息队列把业务流程中的非关键流程异步化,从而显著降低业务请求的响应时间 应用解耦...

kismile 661

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

蓝牙模块HM-10手册

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

nsq

安装 brew install nsq 启动nsqlookupd,开放端口4161(http)和4160(tcp) cd /usr/local/bin ./nsqlookupd 显示结果 [nsqlookupd] 2021/04/27 10:00:46.800332 INFO: nsqlookupd v1.2.0 (built w/go1.13.5) [nsqlookupd] 2021/04/27 10:00:46.800911 INFO: HTTP: listening on [::]:41.

zy_whynot的博客 426

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

下一篇: NSQD启动分析以及对flag包的使用
DreamCatcher
博客等级 码龄20年 23粉丝 151原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DreamCatcher

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值