nsq安装与使用

nsq安装与使用


前言

网上很多nsq教程都挺简单明了的,但还是想做一次自己实践的使用教程

一、NSQ是什么?

NSQ是一个实时分布式消息传递平台,旨在大规模运行,每天处理数十亿条消息。

它促进了没有单点故障的分布式和分散式拓扑,从而实现了容错能力和高可用性,并提供了可靠的消息传递保证。查看功能和保证。

从操作上讲,NSQ易于配置和部署(所有参数均在命令行上指定,并且编译的二进制文件不具有运行时相关性)。为了获得最大的灵活性,它与数据格式无关(消息可以是JSON,MsgPack,协议缓冲区或其他任何东西)。官方提供了Go和Python库(以及许多其他客户端库),并且,如果您有兴趣构建自己的库,则有一个协议规范。

我们发布了针对linux,darwin,freebsd和Windows的二进制发行版,以及官方Docker映像

项目地址:https://github.com/nsqio/nsq

二、概述

1.快速开始


下面的步骤将在本地机器上运行一个小型NSQ集群,并将消息发布、使用和归档到磁盘。
1.按照安装文档中的说明操作。

安装

二进制发行版本

可以下载用于linux,darwin,freebsd和Windows的预构建二进制文件:

当前稳定版本:当前稳定版本v1.2.0
nsq-1.2.0.darwin-amd64.go1.12.9.tar.gz
nsq-1.2.0.linux-amd64.go1.12.9.tar.gz
nsq-1.2.0.freebsd-amd64.go1.12.9.tar.gz
nsq-1.2.0.windows-amd64.go1.12.9.tar.gz

较旧的稳定版本
nsq-1.1.0.darwin-amd64.go1.10.3.tar.gz
nsq-1.1.0.linux-amd64.go1.10.3.tar.gz
nsq-1.1.0.freebsd-amd64.go1.10.3.tar.gz
nsq-1.1.0.windows-amd64.go1.10.3.tar.gz

Docker

请参阅有关使用Docker部署NSQ的文档。

在Docker容器中部署和运行nsq二进制文件。有一个包含所有NSQ二进制文件的最小nsq镜像。通过在运行Docker时将二进制文件指定为命令可以运行每个二进制文件。
基本格式为:

docker run nsqio/nsq/<conmand>

注意命令前的/nsq。 例如:

docker run nsqio/nsq /nsq_to_file
Docker和镜像链接

docker
nsq image

拉取并运行nsqlookupd
docker pull nsqio/nsq
docker run --name lookupd -p 4160:4160 -p 4161:4161 nsqio/nsq /nsqlookupd
运行nsqd

首先,获取Docker主机的IP:

ifconfig | grep addr

其次,运行nsqd容器:

docker pull nsqio/nsq
docker run --name nsqd -p 4150:4150 -p 4151:4151 \
    nsqio/nsq /nsqd \
    --broadcast-address=<host> \
    --lookupd-tcp-address=<host>:<port>

将–lookupd-tcp-address标志设置为先前运行的主机的IP和TCP端口 nsqlookupd,即dockerIP:4160:

例如,假设主机IP为172.17.42.1:

docker run --name nsqd -p 4150:4150 -p 4151:4151 \
    nsqio/nsq /nsqd \
    --broadcast-address=172.17.42.1 \
    --lookupd-tcp-address=172.17.42.1:4160

请注意,此端口使用port 4160,这是我们启动nsqlookupd容器时公开的端口(它也是的默认端口nsqlookupd)。

如果要使用非默认端口,请更改-p参数:

docker run --name nsqlookupd -p 5160:4160 -p 5161:4161 nsqio/nsq /nsqlookupd

这将使nsqlookupd在端口5160和5161的Docker主机IP上可用。

使用TLS

要将TLS与容器化的NSQ二进制文件一起使用,您需要包括证书文件,私钥和根CA文件。Docker映像具有/etc/ssl/certs/为此目的可用的卷装载。将包含文件的主机目录挂载到该卷,然后照常在命令行中指定文件:

docker run -p 4150:4150 -p 4151:4151 -p 4152:4152 -v /home/docker/certs:/etc/ssl/certs \
    nsqio/nsq /nsqd \
    --tls-root-ca-file=/etc/ssl/certs/certs.crt \
    --tls-cert=/etc/ssl/certs/cert.pem \
    --tls-key=/etc/ssl/certs/key.pem \
    --tls-required=true \
    --tls-client-auth-policy=require-verify

这会将证书从/home/docker/certsDocker容器加载到运行时使用。

持久化NSQ数据

要将nsqd数据存储在主机磁盘上,请将该 /data目录 用作您的数据目录,该目录可让您挂载到仅数据的Docker容器 或挂载到主机目录:

docker run nsqio/nsq /nsqd \
    --data-path=/data
使用docker-compose

要启动nsqd,nsqlookupd以及nsqadmin共同使用docker-compose,然后创建一个docker-compose.yml。

version: '3'
services:
  nsqlookupd:
    image: nsqio/nsq
    command: /nsqlookupd
    ports:
      - "4160"
      - "4161"
  nsqd:
    image: nsqio/nsq
    command: /nsqd --lookupd-tcp-address=nsqlookupd:4160
    depends_on:
      - nsqlookupd
    ports:
      - "4150"
      - "4151"
  nsqadmin:
    image: nsqio/nsq
    command: /nsqadmin --lookupd-http-address=nsqlookupd:4161
    depends_on:
      - nsqlookupd  
    ports:
      - "4171"

要开始从与docker-compose.yml先前创建的目录相同的目录中运行以下命令。

docker-compose up -d

将创建一个专用网络,并使用该专用网络启动三个容器。在本地主机上,每个容器将具有一个随机端口,该端口映射到中暴露的端口docker-compose.yml。

查看正在运行的容器状态和映射的端口。

docker-compose ps

查看正在运行的容器中的日志。

docker-compose logs

假设nsqlookupd已将主机端口31001映射到容器端口4161,则可以使用进行简单的ping curl。

curl http://127.0.0.1:31001/ping

OSX

 $ brew install nsq
源码编译
先决条件

golang(1.9+需要版本)
dep(依赖管理器)(仅适用于<1.11的golang)

编译中锚链接:编译
NSQ使用go模块或 dep管理依赖关系并生成可靠的构建。

$ git clone https://github.com/nsqio/nsq $GOPATH/src/github.com/nsqio/nsq
$ cd $GOPATH/src/github.com/nsqio/nsq
$ dep ensure
$ make

NSQ保持go get兼容,但不建议这样做,因为它不能保证生成可靠的内部版本(固定的依赖关系需要手动满足)。

测试

$ ./test.sh

2.在一个shell中,启动nsqlookupd:

$ nsqlookupd

3.在另一个shell中,开始nsqd:

$ nsqd --lookupd-tcp-address=127.0.0.1:4160

4.在另一个shell中,开始nsqadmin:

$ nsqadmin --lookupd-http-address=127.0.0.1:4161

5.发布初始消息(也在集群中创建主题):

$ curl -d 'hello world 1' 'http://127.0.0.1:4151/pub?topic=test'

6.最后,在另一个shell中,开始nsq_to_file:

$ nsq_to_file --topic=test --output-dir=/tmp --lookupd-http-address=127.0.0.1:4161

7.发布更多消息至nsqd:

$ curl -d 'hello world 2' 'http://127.0.0.1:4151/pub?topic=test'
$ curl -d 'hello world 3' 'http://127.0.0.1:4151/pub?topic=test'

8.为了验证事情是否按预期进行,请在打开的网络浏览器http://127.0.0.1:4171/中查看nsqadminUI并查看统计信息。另外,检查test.*.log写入的日志文件()的内容/tmp。

这里重要的一课是,nsq_to_file没有明确告知(客户端)test 主题的产生地,它从中检索该信息,nsqlookupd并且尽管连接定时,也不会丢失任何消息。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值