主要目的是搭建一个测试环境,同时使用了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. TestNG系列(四)TestNG监听器

    前言 监听器实际上是一些预定义的java接口,用户创建这些接口的实现类(即implements某监听接口,并实现里面的方法),并加入到testng中,testng便会在运行的不同时刻调用这些类中你自定 ...

  2. JS获取当前时间戳及时间戳的转换

    获取现在的Unix时间戳(Unix timestamp) Math.round(new Date().getTime()/1000)  //getTime()返回数值的单位是毫秒 Unix时间戳(Un ...

  3. java基础 接口静态方法

    /** * 从java8开始,接口当中允许定义静态方法 * 格式: * public static 返回值类型 方法名称(参数列表){ * 方法体 * } * 提示:就是将abstract或者defa ...

  4. 彻底理解javascript中的this指针

    http://javascriptissexy.com/understand-javascripts-this-with-clarity-and-master-it/ https://www.benn ...

  5. jQuery事件(四)

    一.基本事件函数下面事件函数中参数相关说明:eventType:事件类型,字符串'click' 'submit'多个事件类型可以通过用空格隔开[一次性绑定'click submit']eventDat ...

  6. React组件中对子组件children进行加强

    React组件中对子组件children进行加强 问题 如何对组件的children进行加强,如:添加属性.绑定事件,而不是使用<div>{this.props.children}< ...

  7. 全网最全Selenium相关资源汇总

    官网: Selenium官网:https://docs.seleniumhq.org Selenium github: https://github.com/SeleniumHQ/selenium 文 ...

  8. centos7修改网卡命名规则

    实验目的: 修改默认的网卡命名规则,习惯于ethx的形式 实验环境: centos7 熟悉控制网卡名字的规则生产的参数biosdevname/net.ifnames   /etc/default/gr ...

  9. windows系统获取进程的pid号并终止

    ,,,* delims= " %a in ('tasklist ^| findstr "AutodeskDesktopApp.exe"') do (set commitd ...

  10. kuangbin专题专题四 Currency Exchange POJ - 1860

    题目链接:https://vjudge.net/problem/POJ-1860 大致题意:有不同的货币,有很多货币交换点,每个货币交换点只能两种货币相互交换,有佣金C,汇率R. 每次交换算一次操作, ...