美文网首页
NSQ消息队列

NSQ消息队列

作者: 渺小Y | 来源:发表于2018-08-29 11:51 被阅读596次

    1.安装

    根据官方安装指引页面下载最新稳定版的二进制包
    https://nsq.io/deployment/installing.html
    wget https://s3.amazonaws.com/bitly-downloads/nsq/nsq-1.1.0.linux-amd64.go1.10.3.tar.gz
    解压安装
    tar zxvf nsq-1.1.0.linux-amd64.go1.10.3.tar.gz
    mv nsq-1.1.0.linux-amd64.go1.10.3 /usr/local/
    cd /usr/local/
    做个软链, 最终 /usr/local/nsq 将作为使用目录
    ln -s nsq-1.1.0.linux-amd64.go1.10.3 nsq

    1.1启动进程

    nsqlookupd

    • nsqlookupd的主要职责是维护拓扑信息, 并且接受客户端请求发现指定topic的nsqd生产节点是哪些, 并返回给客户端;
    • nsqd节点会广播话题和channel信息给nsqlookupd;
    • nsqlookupd可以有多个

    [root@localhost bin]# ./nsqlookupd
    [nsqlookupd] 2018/08/29 10:24:57.331679 INFO: nsqlookupd v1.1.0 (built w/go1.10.3)
    [nsqlookupd] 2018/08/29 10:24:57.332409 INFO: TCP: listening on [::]:4160
    [nsqlookupd] 2018/08/29 10:24:57.332448 INFO: HTTP: listening on [::]:4161
    监听的端口:
    4160 TCP 用于接收nsqd的广播
    4161 HTTP 用于接收客户端发送的管理和发现操作请求(增删话题,节点等管理查看性操作等, 真正的生产与消费使用的是nsqd的4151端口)

    nsqd

    • nsqd 服务器多个才有集群的意义
    • nsqd 才是真正服务生产者与消费者的进程
    • nsqd 必须指定lookupd-tcp-address 上报自己的信息和状态
    • 在生产环境请不要使用e2e-processing-latency*相关参数, 会消耗大量CPU资源

    启动nsqd
    [root@localhost bin]# ./nsqd --lookupd-tcp-address=192.168.1.211:4160 -broadcast-address 192.168.1.211 -data-path /data/nsq_data
    参数说明:
    --lookupd-tcp-address 指定nsqlookupd的ip和端口, 广播自身信息和状态给nsqlookupd
    -broadcast-address 是用指定的地址与各个组件进行通信, 默认会使用主机名, 主机名不通时使用ip地址代替
    -data-path 落地数据保存的地方
    监听端口:
    4150 TCP
    4151 HTTP

    nsqadmin

    nsqadmin 提供WEB UI界面(看板)

    启动nsqadmin
    [root@localhost bin]# ./nsqadmin --lookupd-http-address=192.168.1.211:4161
    参数:
    --lookupd-http-address 指定从那个nsqlookupd服务读取信息
    监听端口:
    4171 HTTP
    浏览器打开UI界面
    http://x.x.x.x:4171

    NSQ UI界面

    1.2测试

    生产消息

    curl -d 'hello world 12456' 'http://192.168.1.200:4151/pub?topic=test'

    说明: 生产者是直接请求nsqd, 将消息入列的, 并不会经过nsqlookupd.
    所以这里会存在一个问题, 当有多台nsqd的时候, 应该使用第三方负载均衡设备或服务进行自动负载与均衡.
    topic无需事先创建, 直接指定即可, nsqd会自动创建这个topic

    消费消息

    nsq_tail --nsqd-tcp-address 192.168.1.200:4150 --topic test
    nsq_tail --lookupd-http-address 192.168.1.211:4161 --topic test
    说明: 消费时, 可以直接请求nsqd, 也可以请求nslookupd; 但建议请求nslookupd进行消费, 反对直接请求nsqd进行消费.

    channel

    一个topic可以在多个nsqd里存在, topic可以有channel, 也可由没有channel;
    每个channel相当于是一个消息通道的副本. 比如同一个topic里面有A和B两个channel, 当A中的消息被消费后, B中的消息并未被消费.


    topic channel

    当topic中存在channel时, 消费请求必须指定channel名称
    nsq_tail --lookupd-http-address 192.168.1.211:4161 --topic test --channel name

    1.3 nsqadmin 说明

    image.png

    相关文章

      网友评论

          本文标题:NSQ消息队列

          本文链接:https://www.haomeiwen.com/subject/xydqwftx.html