主要目的是搭建一个测试环境,同时使用了nodejs 客户端sdk

nsq 简单了解

nsqd:一个负责接收、排队、转发消息到客户端的守护进程
nsqlookupd:管理拓扑信息并提供最终一致性的发现服务的守护进程
nsqadmin:一套Web用户界面,可实时查看集群的统计数据和执行各种各样的管理任务
utilities:常见基础功能、数据流处理工具,如nsq_stat、nsq_tail、nsq_to_file、nsq_to_http、nsq_to_nsq、to_nsq

环境准备

具体参数的意思,参考官方文档

  • docker-compose 文件
version: "3"
services:
   ysdp-nsq-admin:
     image: nsqio/nsq:v1.1.0
     command: /nsqadmin -lookupd-http-address ysdp-nsq-nsqlookupd1:4161 -lookupd-http-address ysdp-nsq-nsqlookupd2:4261
     ports:
     - "4171:4171"
   ysdp-nsq-nsqd1:
     image: nsqio/nsq:v1.1.0
     hostname: ysdp-nsq-nsqd1
     command: /nsqd -tcp-address 0.0.0.0:4150 -data-path /usr/local/nsq/bin/data --http-address 0.0.0.0:4151 -lookupd-tcp-address ysdp-nsq-nsqlookupd1:4160 -lookupd-tcp-address ysdp-nsq-nsqlookupd2:4260 -broadcast-address ysdp-nsq-nsqd1
     volumes:
     - "./data1:/usr/local/nsq/bin/data"
     ports:
     - "4150:4150"
     - "4151:4151"
   ysdp-nsq-nsqd2:
     image: nsqio/nsq:v1.1.0
     hostname: ysdp-nsq-nsqd2
     command: /nsqd -tcp-address 0.0.0.0:4250 -data-path /usr/local/nsq/bin/data -http-address 0.0.0.0:4251 -lookupd-tcp-address ysdp-nsq-nsqlookupd1:4160 -lookupd-tcp-address ysdp-nsq-nsqlookupd2:4260 -broadcast-address=ysdp-nsq-nsqd2
     volumes:
     - "./data2:/usr/local/nsq/bin/data"
     ports:
     - "4250:4250"
     - "4251:4251"
   ysdp-nsq-nsqd3:
     image: nsqio/nsq:v1.1.0
     hostname: ysdp-nsq-nsqd3
     command: /nsqd -tcp-address 0.0.0.0:4350 -data-path /usr/local/nsq/bin/data --http-address 0.0.0.0:4351 -lookupd-tcp-address ysdp-nsq-nsqlookupd1:4160 -lookupd-tcp-address ysdp-nsq-nsqlookupd2:4260 -broadcast-address=ysdp-nsq-nsqd3
     volumes:
     - "./data3:/usr/local/nsq/bin/data"
     ports:
     - "4354:4350"
     - "4355:4351"
   ysdp-nsq-nsqlookupd1:
     image: nsqio/nsq:v1.1.0
     command: /nsqlookupd -http-address 0.0.0.0:4161 -tcp-address 0.0.0.0:4160 -broadcast-address ysdp-nsq-nsqlookupd1
     ports:
     - "4160:4160"
     - "4161:4161"
   ysdp-nsq-nsqlookupd2:
     image: nsqio/nsq:v1.1.0
     command: /nsqlookupd -http-address 0.0.0.0:4261 -tcp-address 0.0.0.0:4260 -broadcast-address ysdp-nsq-nsqlookupd2
     ports:
     - "4260:4260"
     - "4261:4261"

启动集群

  • 启动
docker-compose up -d
  • 效果

使用

  • 本地hosts 文件配置
    因为基于nsqlookupd 的数据发现需要访问broadcast-address 暴露的地址,所以需要配置,同时都需要加上
 
127.0.0.1 ysdp-nsq-nsqd1
127.0.0.1 ysdp-nsq-nsqd2
127.0.0.1 ysdp-nsq-nsqd3
  • nodejs 项目使用
    初始化项目
 
yarn init -y

添加依赖

yarn add nsqjs

package.json

{
  "name": "api",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "dependencies": {
    "nsqjs": "^0.12.1"
  },
  "scripts": {
    "app":"node consumer"
  }
}
 

调用代码

const nsq = require('nsqjs')
const reader = new nsq.Reader('sample_topic', 'test_channel', {
  lookupdHTTPAddresses: ['127.0.0.1:4161','127.0.0.1:4261']
})
reader.connect()
reader.on('error',err => {
   console.log(JSON.stringify(err))
})
reader.on('message', msg => {
  console.log('Received message [%s]: %s', msg.id, msg.body.toString())
  msg.finish()
})

测试

  • 启动 nodejs 项目
yarn  app
  • 发送消息
curl -d "it really tied the room together" http://localhost:4151/pub?topic=sample_topic
  • 效果

admin 效果

说明

以上是一个简单的测试,以及集群的搭建

参考资料

https://nsq.io/overview/design.html
https://github.com/rongfengliang/nsq-cluster-docker-compose

基于docker-compose部署 简单nsq 集群的更多相关文章

  1. 基于Docker Compose部署分布式MinIO集群

    一.概述 Minio 是一个基于Go语言的对象存储服务.它实现了大部分亚马逊S3云存储服务接口,可以看做是是S3的开源版本,非常适合于存储大容量非结构化的数据,例如图片.视频.日志文件.备份数据和容器 ...

  2. 基于Docker一键部署大规模Hadoop集群及设计思路

    一.背景: 随着互联网的发展.互联网用户的增加,互联网中的数据也急剧膨胀.每天产生的数据量数以万计,本地文件系统和单机CPU已无法满足存储和计算要求.Hadoop分布式文件系统(HDFS)是海量数据存 ...

  3. ActiveMQ此例简单介绍基于docker的activemq安装与集群搭建

    ActiveMQ拓展连接 此例简单介绍基于Docker的activemq安装与集群搭建 一 :安装 1.获取activemq镜像 docker pull webcenter/activemq 2.启动 ...

  4. 基于docker实现redis高可用集群

    基于docker实现redis高可用集群 yls 2019-9-20 简介 基于docker和docker-compose 使用redis集群和sentinel集群,达到redis高可用,为缓存做铺垫 ...

  5. 基于 Docker 搭建 Consul 多数据中心集群

    本文介绍了在 Windows 10 上基于 Docker 搭建 Consul 多数据中心集群的步骤,包括 Consul 镜像的拉取和容器的创建,每个数据中心对应服务端节点和客户节点的创建,节点之间相互 ...

  6. Docker Compose 搭建 Redis Cluster 集群环境

    在前文<Docker 搭建 Redis Cluster 集群环境>中我已经教过大家如何搭建了,本文使用 Docker Compose 再带大家搭建一遍,其目的主要是为了让大家感受 Dock ...

  7. Docker:部署PXC8.0集群时,启动容器报错New joining cluster node didn‘t find all needed SSL artifacts

    使用docker部署mysql PXC集群8.0版本,启动第二个节点的时候遇到报错,New joining cluster node didn't find all needed SSL artifa ...

  8. 使用 Docker Compose 快速构建 TiDB 集群

    本文档介绍如何在单机上通过 Docker Compose 快速一键部署一套 TiDB 测试集群.Docker Compose 可以通过一个 YAML 文件定义多个容器的应用服务,然后一键启动或停止. ...

  9. 基于Docker的Consul服务发现集群搭建

    在去年的.NET Core微服务系列文章中,初步学习了一下Consul服务发现,总结了两篇文章.本次基于Docker部署的方式,以一个Demo示例来搭建一个Consul的示例集群,最后给出一个HA的架 ...

随机推荐

  1. Java学习:Debug调试程序

    Debug追踪 Debug调试程序: 可以让代码逐行执行,查看代码执行的过程,调试程序中出现的bug 使用方式: 在行号的右边,鼠标左键单击,添加断点(每个方法的第一行,哪里有bug添加到哪里) 右键 ...

  2. LinkedList、ArrayList、Vector三者的关系与区别?

    LinkedList.ArrayList.Vector三者的关系与区别? 区分ArrayList,Vector,LinkedList的区别 ArrayList,Vector的区别: 1.出现版本:Ar ...

  3. JS实现文件自动上传

    JS引用: <script type="text/javascript" src="~/bootstrap/js/fileinput.min.js"> ...

  4. Wireshark教程之一:认识Wireshark界面

    1.下载与安装 官网地址:https://www.wireshark.org/ 官网下载地址:https://www.wireshark.org/#download 本文以windows环境为例来说明 ...

  5. 谈谈游戏服务端SDK接入

    “接sdk其实本质上就是一个对着接口文档写adaptor的工作,重复和无味.” 团队减员,身负多职,上一次调SDK已经可以回溯到游戏测试前夕了... 一般SDK只包含验证和支付功能,绝少部分SDK包含 ...

  6. 浅析ORACLE ERP系统维护方法

    笔者曾从事ORACLE ERP系统客户服务工作多年,在ERP系统维护工作中,深深体会到:ERP的系统维护工作看似平常,实则大有学问. ORACLE ERP系统是一个大型集成的软件系统,是一个企业全面共 ...

  7. MySQL倒序索引测试2

    测试环境 MySQL Community Server 8.0.17 准备测试数据 DROP TABLE TB001; CREATE TABLE TB001(ID INT PRIMARY KEY AU ...

  8. flask通过nginx代理后base_url拿不到正确的url_scheme2016-04-14 12:31

    http://www.axiaoxin.com/article/210/ Nginx配置了https请求后,用户发起https请求时首先和Nginx建立连接,完成SSL握手,而后Nginx作为代理是以 ...

  9. go语言每个工程是不是都要单独设置GOPATH?

      go语言每个工程是不是都要单独设置GOPATH?比如我的go项目都统一管理在d:/workspace/go_work/目录下面,该目录下有3个项目project_01,project_02,pro ...

  10. Python线程join和setDaemon

    看一下线程的setDaemon()方法 import time import threading import ctypes import inspect def sayHello(): for i ...