首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >NSQ分布式消息基础入门

NSQ分布式消息基础入门

作者头像
陌无崖
发布2020-07-27 14:13:22
1K0
发布2020-07-27 14:13:22
举报

作者 | 陌无崖

转载请联系授权

介绍

NSQ是一个基于Go语言的分布式实时消息平台,可以大规模的运用于实时消息服务,每天可以处理数亿级别的消息,设计目标是为在分布式环境下运行的去中心化服务提供一个强大的基础架构。

NSQ核心组件

nsqlookupd

用于守护进程负责管理拓扑信息,它使用tcp(默认端口4160)管理nsqd服务,使用http(默认端口4161)管理nsqadmin服务。同时为客户端提供查询功能。

特点 1、具有唯一性,在一个Nsql服务中只有一个nsqlookupd服务。 2、去中心化,即使该组件崩溃,也不影响正常运行。 3、充当nsqd和naqadmin信息交互的中间件。 4、提供一个http查询服务,给客户端定时更新nsqd的地址目录。

nsqadmin

一套 WEB UI,用来汇集集群的实时统计,并执行不同的管理任务。

功能 1、提供一个对topic和channel统一管理的操作界面以及各种实时监控数据的展示。 2、展示所有message的数量。 3、能够在后台创建topic和channel。 4、nsqadmin的所有功能都必须依赖于nsqlookupd,nsqadmin只是向nsqlookupd传递用户操作并展示来自nsqlookupd的数据。

nsqd

nsqd 是一个守护进程,负责接收,排队,投递消息给客户端

功能或特性 1、对订阅了同一个topic,同一个channel的消费者使用负载均衡策略(不是轮询) 2、只要channel存在,即使没有该channel的消费者,也会将生产者的message缓存到队列中(注意消息的过期处理) 3、保证队列中的message至少会被消费一次,即使nsqd退出,也会将队列中的消息暂存磁盘上(结束进程等意外情况除外)。 4、限定内存占用,能够配置nsqd中每个channel队列在内存中缓存的message数量,一旦超出,message将被缓存到磁盘中。 5、topic,channel一旦建立,将会一直存在,要及时在管理台或者用代码清除无效的topic和channel,避免资源的浪费。

官方图展示:

Nsq服务端与客户端的关系

消费者

1、消费者直接连接nsqd,缺点是服务无法实现动态伸缩(可以自己实现)。 2、通过http查询nsqlookupd获取该nsqlookupd上的所有nsqd的连接地址。然后分别建立连接,这种方式是传统的轮询方式,属于官方推荐的做法。如下图:

生产者

生产者直接去nsqd去投递message

消息的生命周期

1、生产者往nsqd中发送消息,开启一个连接,发送一个带有topic和消息体的pun的命令到nsqd中 2、topic会对消息进行copy,发送至各个channel中 3、在channel中的每条消息都会被放进队列中,直到消息被worker消费掉,如果队列超出了内存的限制,消息则会被写进磁盘中

Nsq安装

docker部署

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 up -d

界面

image.png

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 golang技术杂文 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • NSQ核心组件
    • nsqlookupd
      • nsqadmin
        • nsqd
        • Nsq服务端与客户端的关系
          • 消费者
            • 生产者
              • 消息的生命周期
              • Nsq安装
                • docker部署
                相关产品与服务
                容器镜像服务
                容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档