nsq

NSQ Docker Swarm

时光总嘲笑我的痴心妄想 提交于 2019-12-04 17:56:51
I'm trying to use NSQ in Docker Swarm without success mhlg/rpi-nsq is a Docker image built for the Raspberry Pi ARM7 board and I can confirm is working correctly if run as a normal Docker container Running NSQ in Docker (OK) # crete a bridged network $ docker network create nsq_network # run lookupd $ docker run --name nsqlookupd --network nsq_network -p 4160:4160 -p 4161:4161 mhlg/rpi-nsq nsqlookupd # run nsqd $ docker run --name nsqd --network nsq_network -p 4150:4150 -p 4151:4151 mhlg/rpi-nsq nsqd --broadcast-address=nsqd --lookupd-tcp-address=nsqlookupd:4160 # run nsqadmin $ docker run -

NSQ

我只是一个虾纸丫 提交于 2019-12-04 00:54:14
NSQ是目前比较流行的一个分布式的消息队列,本文主要介绍了NSQ及Go语言如何操作NSQ。 NSQ NSQ介绍 NSQ是Go语言编写的一个开源的实时分布式内存消息队列,其性能十分优异。 NSQ的优势有以下优势: NSQ提倡分布式和分散的拓扑,没有单点故障,支持容错和高可用性,并提供可靠的消息交付保证 NSQ支持横向扩展,没有任何集中式代理。 NSQ易于配置和部署,并且内置了管理界面。 NSQ的应用场景 通常来说,消息队列都适用以下场景。 异步处理 参照下图利用消息队列把业务流程中的非关键流程异步化,从而显著降低业务请求的响应时间。nsq应用场景1 应用解耦 通过使用消息队列将不同的业务逻辑解耦,降低系统间的耦合,提高系统的健壮性。后续有其他业务要使用订单数据可直接订阅消息队列,提高系统的灵活性。nsq应用场景1 流量削峰 类似秒杀(大秒)等场景下,某一时间可能会产生大量的请求,使用消息队列能够为后端处理请求提供一定的缓冲区,保证后端服务的稳定性。nsq应用场景1 安装 官方下载页面根据自己的平台下载并解压即可。 NSQ组件 nsqd nsqd是一个守护进程,它接收、排队并向客户端发送消息。 启动nsqd,指定-broadcast-address=127.0.0.1来配置广播地址 ./nsqd -broadcast-address=127.0.0.1

nsq 初学使用日记

烈酒焚心 提交于 2019-12-03 05:54:51
win下更加直观一些,所以不使用liunx 第一步下载 nsq 下载地址 https://github.com/nsqio/nsq.git 使用git clone或者go get 下载下来 第二部 编译文件 文件中,能看到这是nsq的核心源码 其中最重要的是 nsqlookupd(注册管理地址),nsqd(node节点),nsqadmin(web管理界面),先进行三个文件夹中进行一个编译 go build . 得到三个可执行的.exe文件 第三步 启动一个nsqlookupd 先启动 nsqlookupd,不需要任何参数 其中nsqlookup开启了 http端口4161 和 tcp端口4160 注意其中tcp端口是给nsqd节点连接使用的,http则是给一些输出文件使用,比如数据经过节点会发送请求之类的 现在是开启了一个管理其他节点的注册,聚合一体的程序 第四步 开启一个nsqd的节点 讲解一下,使用执行nsqd.exe 开启节点服务 其中参数--lookupd-tcp-address=127.0.0.1:4160 分开来看分别是 --lookupd 表示连接开启的lookupd服务,节点一般都是tcp减少每次连接的消耗 -tcp (-http) 表示用什么样的方式连接lookupd服务来进行注册以及存活检测 -address 表示lookupd的服务器ip地址在哪

NSQ源码分析之概述

匿名 (未验证) 提交于 2019-12-03 00:26:01
消息队列在互联网公司使用非常普遍,因此也促使我去学习研究消息队列的原理以及细节问题;之前也有接触过消息队列,最主要就是在异步处理方面,当然消息队列还解耦,流量削峰等功能;目前消息队列产品也比较多,例如kafka,ActiveMQ,RabbitMQ,NSQ等等;之前原本打算看kafka,但是处于学习成本(kafka是scala编写,之前scala接触的比较少),所以就先不看kafka,选择了NSQ;NSQ主要是golang编写,本人刚好非常喜欢golang这门语言,因此在学习NSQ的同时,也可以学习NSQ是如何优雅地使用golang; 目前,看了nsqlookupd的代码,写的真的很精美,我觉得代码可以和redis相媲美,这等后续分析代码时再详说;关于NSQ的特性,可以查看 NSQ官网 ;这篇文章主要分析以下几点: NSQ提供了三大组件以及一些工具,三大组件为: nqsd NSQ主要组件,用于存储消息以及分发消息; nsqlookupd 用于管理nsqd集群拓扑,提供查询nsqd主机地址的服务以及服务最终一致性; nsqadmin 用于管理以及查看集群中的topic,channel,node等等; NSQ的拓扑结构和文件系统的拓扑结构类似,有一个中心节点来管理集群节点;我们从图中可以看出: nsqlookupd服务同时开启tcp和http两个监听服务,nsqd会作为客户端

docker 部署 nsq

匿名 (未验证) 提交于 2019-12-03 00:09:02
这篇文章主要介绍如何使用 docker 部署 nsq 组件 本文基于一台 ubuntu 虚拟机试验 docker 安装方式 使用 docker version 命令检查 docker 是否安装成功 apt-get install docker-compose nsq 主要有三个组件: nsqlookupd, nsqd, nsqadmin。这三个组件都包含在 nsqio/nsq 镜像中, 每一个组件都可以通过指定组件名的方式去启动,启动命令的形式如下: docker run nsqio/nsq /command`` 首先拉取基础镜像 docker pull nsqio/nsq ## docker部署 ### nsqlookupd docker run --name lookupd -p 4160:4160 -p 4161:4161 -d nsqio/nsq /nsqlookupd 说明: * -p 是映射端口 * -d 是后台运行容器 * /nsqlookupd 就是启动命令 ### nsqd 首先通过 ifconfig 获取虚拟机的 ip, 以本机 ip 172.16.49.92为例, nsq 的启动命令如下: docker run --name nsqd -p 4150:4150 -p 4151:4151 -d nsqio/nsq /nsqd --broadcast

剖析nsq消息队列(一) 简介及去中心化实现原理

匿名 (未验证) 提交于 2019-12-02 23:56:01
分布式消息队列 nsq ,简单易用,去中心化的设计使 nsq 更健壮, nsq 充分利用了 go 语言的 goroutine 和 channel 来实现的消息处理,代码量也不大,读不了多久就没了。后期的文章我会把 nsq 的源码分析给大家看。 主要的分析路线如下 分析 nsq 的整体框架结构,分析如何做到的无中心化分布式拓扑结构,如何处理的单点故障。 分析 nsq 是如何保证消息的可靠性,如何保证消息的处理,对于消息的持久化是如何处理和扩展的。 分析 nsq 是如何做的消息的负载处理,即如何把合理的、不超过客户端消费能力的情况下,把消息分发到不同的客户端。 分析 nsq 提供的一些辅助组件。 这篇帖子,介绍 nsq 的主体结构,以及他是如何做到去中心化的分布式拓扑结构,如何处理的单点故障。 几个组件是需要先大概说一下 nsqd 消息队列的主体,对消息的接收,处理和把消息分发到客户端。 nsqlookupd nsq 拓扑结构信息的管理者,有了他才能组成一个简单易用的无中心化的分布式拓扑网络结构。 go-nsq nsq 官方的go语言客户端,基本上市面上的主流编程语言都有相应的客户端 在这里 还有可视化的组件 nsqadmin 和一些工具像 nsq_to_file 、 nsq_stat 、等等,这些在后期的帖子里会介绍 nsqd 是独立运行的,我们可以直接使用部署几个 nsqd

java调用NSQ消息服务

匿名 (未验证) 提交于 2019-12-02 21:53:52
java调用NSQ消息服务 如果还不懂的怎么安装部署nsq的童鞋,可以先看看这里: http://blog.csdn.net/fs_sky/article/details/65441918 nsq 提供了丰富的客户端调用库,根据官网提供 我这里使用的是JavaNSQClient,可以从 https://github.com/brainlag/JavaNSQClient 下载相应的jar包,例子中使用maven构建,构建完成后,可以自己根据例子完成消费者,生存的配置功能。 生产者: public void nsqProducer(){ NSQProducer producer = new NSQProducer(); producer.addAddress("127.0.0.1",4150).start(); try { producer.produce("test", "message go go go 2".getBytes()); } catch (NSQException e) { e.printStackTrace(); } catch (TimeoutException e) { e.printStackTrace(); } } 消费者: public void nsqConsumer(){ NSQLookup lookup = new DefaultNSQLookup(

去中心化分布式服务实时消息平台-NSQ

折月煮酒 提交于 2019-12-02 18:01:56
NSQ是一个基于Go语言的开源的分布式实时消息平台 NSQ可用于大规模系统的实时消息服务,它的设计目标是为在分布式环境下提供一个强大的去除中心化的分布式服务架构,可以每天处理数以亿计的实时消息 简介: http://www.oschina.net/p/nsq?fromerr=IbkI6VH8 官方网站: http://nsq.io/ NSQ的四大组件 nsqlookupd:管理nsqd节点拓扑信息并提供最终一致性的发现服务的守护进程 nsqd:负责接收、排队、转发消息到客户端的守护进程,并且定时向nsqlookupd服务发送心跳 nsqadmin:nsq的web统计界面,可实时查看集群的统计数据和执行一些管理任务 utilities:常见基础功能、数据流处理工具,如nsq_stat、nsq_tail、nsq_to_file、nsq_to_http、nsq_to_nsq、to_nsq 最主要的优势在如下三个方面: 1,性能。在多个著名网站生产环境中被采用,每天能够处理数亿级别的消息。参见官方提供的 性能说明文档 2,易用性。非常易于部署(几乎没有依赖)和配置(所有参数都可以通过命令行进行配置)。 3,可扩展性。具有分布式且无单点故障的拓扑结构,支持水平扩展,在无中断情况下能够无缝地添加集群节点。还具有强大的集群管理界面,参见nsqadmin RabbitMQ和NSQ的一些特点的比较

Go语言操作NoSql

心已入冬 提交于 2019-12-02 10:57:30
NSQ平台 NSQ是目前比较流行的一个分布式的消息队列,本文主要介绍了NSQ及Go语言如何操作NSQ。 NSQ NSQ介绍 NSQ 是Go语言编写的一个开源的实时分布式内存消息队列,其性能十分优异。 NSQ的优势有以下优势: NSQ提倡分布式和分散的拓扑,没有单点故障,支持容错和高可用性,并提供可靠的消息交付保证 NSQ支持横向扩展,没有任何集中式代理。 NSQ易于配置和部署,并且内置了管理界面。 NSQ的应用场景 通常来说,消息队列都适用以下场景。 异步处理 参照下图利用消息队列把业务流程中的非关键流程异步化,从而显著降低业务请求的响应时间。 应用解耦 通过使用消息队列将不同的业务逻辑解耦,降低系统间的耦合,提高系统的健壮性。后续有其他业务要使用订单数据可直接订阅消息队列,提高系统的灵活性。 流量削峰 类似秒杀(大秒)等场景下,某一时间可能会产生大量的请求,使用消息队列能够为后端处理请求提供一定的缓冲区,保证后端服务的稳定性。 安装 官方下载页面 根据自己的平台下载并解压即可。 NSQ组件 nsqd nsqd是一个守护进程,它接收、排队并向客户端发送消息。 启动 nsqd ,指定 -broadcast-address=127.0.0.1 来配置广播地址 ./nsqd -broadcast-address=127.0.0.1 如果是在搭配 nsqlookupd

NSQ系列之nsqlookupd代码分析四(详解nsqlookupd中的RegitrationDB)

本小妞迷上赌 提交于 2019-12-01 09:50:34
NSQ系列之nsqlookupd代码分析四(详解nsqlookupd中的RegitrationDB操作方法) 上一章我们大致了解了 nsqlookupd 的 tcpServer 中的 IOLoop 协议的处理逻辑,里面有提到一个存储 nsqd 的 PeerInfo 以及 topic channel 数据信息的 RegitrationDB 的一些操作方法。今天我们就来讲解一下关于 RegitrationDB 的操作方法 废话不多说,直接上代码吧(代码位于nsq/nsqlookupd/regitration_db.go这个文件中) type RegistrationDB struct { sync.RWMutex //读写锁用于并发操作 registrationMap map[Registration]Producers //定义一个一Regitration为key producer指针的slice为value的map } type Registration struct { Category string Key string SubKey string } type Registrations []Registration //用于记录client相关信息 type PeerInfo struct { lastUpdate int64 //client 心跳包最后接收时间 id