解锁快速上手NSQ的新姿势

解锁快速上手NSQ的新姿势

1. 介绍

​ NSQ是Go语言编写的,开源的分布式消息队列中间件,具有分布式和去中心化拓扑结构,该结构具有无单点故障、故障容错、高可用性以及能够保证消息的可靠传递的特征,同时支持横向扩展,操作友好,是一个成熟的、已在大规模生成环境下应用的产品。

2. 消息中间件应用场景

2.1 异步处理

参照下图利用消息队列把业务流程中的非关键流程异步化,从而显著降低业务请求的响应时间。
image-20211007015833575]

2.2 应用解耦

​ 通过使用消息队列将不同的业务逻辑解耦,降低系统间的耦合,提高系统的健壮性。后续有其他业务要使用订单数据可直接订阅消息队列,提高系统的灵活性。

image-20211007020037770

2.3 流量削峰

​ 类似秒杀(大秒)等场景下,某一时间可能会产生大量的请求,使用消息队列能够为后端处理请求提供一定的缓冲区,保证后端服务的稳定性。

image-20211007020203832

3. 组件

3.1 nsqd

​ nsqd是一个守护进程,它接收、排队并向客户端发送消息。默认监听了两个tcp端口,一个(4150)用来服务客户端,一个(4151)用来提供http端口,此外还可以选择性地监听一个可选的https端口。

3.2 nsqlookupd

​ nsqlookupd是维护所有nsqd状态、提供服务发现的守护进程。它能为消费者查找特定topic下的nsqd提供了运行时的自动发现服务。 **它不维持持久状态,也不需要与任何其他nsqlookupd实例协调以满足查询。**因此根据你系统的冗余要求尽可能多地部nsqlookupd节点。它们消耗的资源很少,可以与其他服务共存。我们的建议是为每个数据中心运行至少3个集群。

3.3 nsqadmin

一个实时监控集群状态、执行各种管理任务的Web管理平台。

4. NSQ架构设计

4.1 流程图

nsq架构设计

4.2 Topic和Channel
  • 每个nsqd实例旨在一次处理多个数据流。这些数据流称为“topics”,一个topic具有1个或多个“channels”。每个channel都会收到topic所有消息的副本,实际上下游的服务是通过对应的channel来消费topic消息。

  • topicchannel不是预先配置的。topic在首次使用时创建,方法是将其发布到指定topic,或者订阅指定topic上的channelchannel是通过订阅指定的channel在第一次使用时创建的。

  • topicchannel都相互独立地缓冲数据,防止缓慢的消费者导致其他chennel的积压(同样适用于topic级别)。

  • channel可以并且通常会连接多个客户端。假设所有连接的客户端都处于准备接收消息的状态,则每条消息将被传递到随机客户端。例如:nsq架构设计

    总而言之,消息是从topic -> channel(每个channel接收该topic的所有消息的副本)多播的,但是从channel -> consumers均匀分布(每个消费者接收该channel的一部分消息)。

4.3 NSQ接收和发送消息流程

nsq架构设计

4.4 特性
  • 消息默认不持久化,可以配置成持久化模式。nsq采用的方式时内存+硬盘的模式,当内存到达一定程度时就会将数据持久化到硬盘。
    • 如果将--mem-queue-size设置为0,所有的消息将会存储到磁盘。
    • 服务器重启时也会将当时在内存中的消息持久化。
  • 每条消息至少传递一次
  • 消息不保证有序

5. 安装和使用教程

5.1 安装

下载地址: https://nsq.io/deployment/installing.html,选择对应的环境去下载NSQ

image-20211007015140615

image-20211007021628113

5.2 使用教程

双击nsqlookupd.exe启动

image-20211007021812776

监听了4160的tcp端口和4161的http端口

打开bin的cmd界面 输入命令指定nsqlookupd地址

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

image-20211007022117434

指定nsqadmin地址 打开nsqadmin

nsqadmin -lookupd-http-address=127.0.0.1:4161

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值