NSQ是一个基于Go语言的分布式实时消息平台,它基于MIT开源协议发布,代码托管在GitHub。NSQ可用于大规模系统中的实时消息服务,并且每天能够处理数亿级别的消息,其设计目标是为在分布式环境下运行的去中心化服务提供一个强大的基础架构。

NSQ具有分布式、去中心化的拓扑结构,该结构具有无单点故障、故障容错、高可用性以及能够保证消息的可靠传递的特征。NSQ非常容易配置和部署,且具有最大的灵活性,支持众多消息协议。另外,官方还提供了拆箱即用Go和Python库。如果读者兴趣构建自己的客户端的话,还可以参考官方提供的协议规范。

一. 搭建主NSQ服务

1. 创建主服务器(虚拟机)

IP: 192.168.0.210

2. 拉取NSQ镜像

> docker pull nsqio/nsq  #拉取nsq镜像
> docker images #查看nsq镜像

3. 启动nsqlookupd服务

> docker run -d --name lookupd -p 4160:4160 -p 4161:4161 nsqio/nsq:latest /nsqlookupd

> #docker exec -ti lookupd /bin/sh    #进入容器,查看nsq目录结构
> #docker rm -f `docker ps -qa` #删除所有容器

最重要的服务,是整个集群的总控室,包括服务发现和节点拓扑信息的管理。nsqlookupd有以下特点:

  1. 唯一性,在集群中的节点只能指向唯一的nsqlookupd服务
  2. 去中心化,即使nsqlookupd崩溃,也会不影响正在运行的nsqd服务
  3. 充当nsqd和naqadmin信息交互的中间件
  4. 提供一个http查询服务,给客户端定时更新nsqd的地址目录

4. 启动nsqadmin管理系统

> docker run -d --name nsqadmin -p 4171:4171 nsqio/nsq /nsqadmin --lookupd-http-address=192.168.0.210:4161

nsqadmin可以部署在任何一个安装有nsq服务的机器上,只需要指定唯一的lookupd-http-address服务IP地址

浏览器打开:http://192.168.0.210:4171/ ,此时的NSQd Nodes为空

二. 部署NSQd节点服务

1.在主服务器(192.168.0.210)上开启一个nsqd节点服务

> docker run -d --name nsqd -p 4150:4150 -p 4151:4151 nsqio/nsq:latest /nsqd --broadcast-address=192.168.0.210 --lookupd-tcp-address=192.168.0.210:4160

2.创建从服务器(IP:192.168.0.159),拉取镜像docker pull nsqio/nsq,启动一个nsqd服务,此时已有两个nsqd节点

> docker run -d --name nsqd -p 4150:4150 -p 4151:4151 nsqio/nsq:latest /nsqd --broadcast-address=192.168.0.159 --lookupd-tcp-address=192.168.0.210:4160

--broadcast-address:当前服务器IP地址,--lookupd-tcp-address:指向的lookupd服务器IP地址

三. 测试

1.打开任意一个shell终端,执行:

> curl -d 't1' 'http://192.168.0.210:4151/pub?topic=p1' #一个topic可多次添加
> curl -d 't2' 'http://192.168.0.210:4151/pub?topic=p2'
> curl -d 't1' 'http://192.168.0.159:4151/pub?topic=q1'
> curl -d 't2' 'http://192.168.0.159:4151/pub?topic=q2'
> curl -d 't3' 'http://192.168.0.159:4151/pub?topic=q3'

2.nsqlookupd奔溃测试(在主服务器):

> docker stop lookupd  #停止nsqlookupd服务
> curl -d 'tpp' 'http://192.168.0.210:4151/pub?topic=pp' # topic可以正常发布
> docker stop nsqd #停止nsqd服务
> curl -d 'tpp' 'http://192.168.0.210:4151/pub?topic=pp' # topic可以正常发布
#显式: curl: (7) Failed connect to 192.168.0.210:4151; 拒绝连接

> 参考:
> https://www.cnblogs.com/li-peng/p/7729174.html

Docker搭建NSQ实时分布式消息集群的更多相关文章

  1. hbase单机环境的搭建和完全分布式Hbase集群安装配置

    HBase 是一个开源的非关系(NoSQL)的可伸缩性分布式数据库.它是面向列的,并适合于存储超大型松散数据.HBase适合于实时,随机对Big数据进行读写操作的业务环境. @hbase单机环境的搭建 ...

  2. 【分布式事务】基于RocketMQ搭建生产级消息集群?

    导读 目前很多互联网公司的系统都在朝着微服务化.分布式化系统的方向在演进,这带来了很多好处,也带来了一些棘手的问题,其中最棘手的莫过于数据一致性问题了.早期我们的软件功能都在一个进程中,数据的一致性可 ...

  3. 使用Docker Swarm搭建分布式爬虫集群

    https://mp.weixin.qq.com/s?__biz=MzIxMjE5MTE1Nw==&mid=2653195618&idx=2&sn=b7e992da6bd1b2 ...

  4. 【ELK】【docker】【elasticsearch】1. 使用Docker和Elasticsearch+ kibana 5.6.9 搭建全文本搜索引擎应用 集群,安装ik分词器

    系列文章:[建议从第二章开始] [ELK][docker][elasticsearch]1. 使用Docker和Elasticsearch+ kibana 5.6.9 搭建全文本搜索引擎应用 集群,安 ...

  5. 使用 Docker 一步搞定 ZooKeeper 集群的搭建

    背景 原来学习 ZK 时, 我是在本地搭建的伪集群, 虽然说使用起来没有什么问题, 但是总感觉部署起来有点麻烦. 刚好我发现了 ZK 已经有了 Docker 的镜像了, 于是就尝试了一下, 发现真是爽 ...

  6. Docker 一步搞定 ZooKeeper 集群的搭建

    Docker 一步搞定 ZooKeeper 集群的搭建 背景 原来学习 ZK 时, 我是在本地搭建的伪集群, 虽然说使用起来没有什么问题, 但是总感觉部署起来有点麻烦. 刚好我发现了 ZK 已经有了 ...

  7. 分布式 PostgreSQL 集群(Citus)官方示例 - 实时仪表盘

    Citus 提供对大型数据集的实时查询.我们在 Citus 常见的一项工作负载涉及为事件数据的实时仪表板提供支持. 例如,您可以是帮助其他企业监控其 HTTP 流量的云服务提供商.每次您的一个客户端收 ...

  8. cAdvisor0.24.1+InfluxDB0.13+Grafana4.0.2搭建Docker1.12.3 Swarm集群性能监控平台

    目录 [TOC] 1.基本概念 ​ 既然是对Docker的容器进行监控,我们就不自己单独搭建cAdvisor.InfluxDB.Grarana了,本文中这三个实例,主要以Docker容器方式运行. 本 ...

  9. Solr集群的搭建以及使用(内涵zookeeper集群的搭建指南)

    1   什么是SolrCloud SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud.当一个系统的索引数据量少的时候 ...

随机推荐

  1. 沉淀,再出发:百度地图api的使用浅思

    沉淀,再出发:百度地图api的使用浅思 一.前言   百度地图想必大家都使用过,但是看到别人使用百度地图的API时候是不是一头雾水呢,其实真正明白了其中的意义就像是调用豆瓣电影api的接口一样的简单, ...

  2. 低版本兼容使用Fragment (转)

    Fragment框架开发东西确实很方便,但是恼人的是从4.0才开始支持.以前的版本必须用兼容模式开发,本人在网上找了大量资料,终于找到些线索正常运行于2.1版本的安卓系统.现在浅说一下兼容版本使用Fr ...

  3. C++课堂作业(1)

    github链接: https://github.com/deepYY/object-oriented/tree/master/Circle 作业题目 Create a program that as ...

  4. window下使用SetUnhandledExceptionFilter捕获让程序的崩溃(转)

    简单使用SetUnhandledExceptionFilter()函数让程序优雅崩溃 虽然是大公司的产品,QQ它还是会在我们的折腾下崩溃的,但是它总是崩溃的很优雅,还要弹出自己的对话框来结束.并且发送 ...

  5. JavaScript获取距离某天前或后的日期

    /** * param  Date Object:Mon May 11 13:53:08 UTC+0800 2015  * n 自param 起向后多少天 * return Date Object:M ...

  6. SHA1WithRSA

    SHA1WithRSA:用SHA算法进行签名,用RSA算法进行加密.   算法说明: 在对进行SHA1算法进行签名后,要求对签名后的数据进行处理,而不是直接进行RSA算法进行加密. 要求把SHA1签名 ...

  7. canvas二三事之签名板与视频绘制

    今天,不知道怎么的就点开了语雀,然后就看到了<HTML5 Canvas 教程>,开始了canvas的研究(学习)之旅. 首先,想到的第一个东西就是签名板,上代码: <canvas i ...

  8. Java性能监控

    Java性能监控 上次介绍了如何使用jvisualvm监控java,今天做进一步讲解!Java性能监控主要关注CPU.内存和线程. 在线程页中,点击线程Dump,可以生成threaddump日志,通过 ...

  9. rman基础知识理解(一)

    rman用于对数据库的备份和恢复. 他的命令主要分成两大类:独立命令和批处理命令: 独立命令只能在rman的提示符下执行,主要的命令有: CONNECT CONFIGURE CREATE CATALO ...

  10. CentOS7.5最小化安装之后的配置

    我是最小化安装的,安装了之后很多基本使用配置没有,接下来要做一些配置,如网络之类的,使系统可用. 1.使命令分页显示(1页显示不不下,又不能上翻页) xxx | more 2.查看系统安装了哪些软件包 ...