NSQ消息队列

消息队列的作用

1️⃣ 程序解耦
举个栗子:
用户注册成功会发送注册成功的短信通知。
传统模式下需要将用户信息持久化到数据库后,再调用发送短信接口。当短信平台暂时出现连通性问题,则会导致用户注册失败,也就是数据库存储失败,说明注册模块与短信功能高耦合,违反程序设计原则高内聚低耦合。

引用消息队列,将用户注册数据持久化到数据库后,把消息写入消息队列然后返回用户注册成功,短信平台通过从消息队列中获取消息为用户发送通知。

2️⃣ 异步处理
被调用者维度(内核):同步&异步
同步:在调用者A发起对被调用者B的调用后,B在未生成结果之前不会向A返回结果
异步:在调用者A发起对被调用者B的调用后,B直接返回,待生成结果后通过状态、通知或回调调用者A告知结果

调用者维度(用户):阻塞和非阻塞
阻塞:在调用者A发起对调用者B的调用后,A在未得到B告知的结果之前一直处于等待状态(线程挂起,不能进行其他操作)
非阻塞:在调用者A发起对调用者B的调用后,A可以进行的其他操作

3️⃣ 日志处理
日志采集客户端:负责日志数据采集和解析,并将日志数据 实时/定时 写入到消息队列
消息队列:负责日志数据的接收,存储和转发
日志处理应用:订阅消息队列,并消费日志数据
常见应用:ELK

4️⃣ 流量削峰
常见于商城秒杀活动,为解决访问量过大,导致流量暴增,应用挂掉。
常在服务器接收用户数据后,写入消息队列,后台业务根据消息队列中的请求信息继续后续逻辑处理。

5️⃣ 消息通信
消息队列一般都内置了高效的通信机制,可用于在消息通讯。比如实现点对点、广播消息队列,或者聊天室等场景。

NSQ介绍

什么是NSQ

用go语言开发的消息队列
在这里插入图片描述

NSQ组件

1️⃣ nsqd
用于接收、分发、传递消息到客户端的守护程序。
常侦听两个TCP端口,4150用于TCP客户端连接,4151用于提供HTTP APl,也可启用HTTPS API

2️⃣ nsqlookupd
用于管理nsqd拓扑信息的守护程序。
(消费者)客户端查询nsqlookupd以发现nsqd特定topic的生产者,常侦听两个TCP端口,4160用于nsqd的通信,4161用于提供HTTP API

3️⃣ nsqadmin
提供一个Web UI,用于实时查看群集信息并进行各种任务管理

NSQ工具

在这里插入图片描述

NSQ架构

在这里插入图片描述
根据上图梳理NSQ数据流

  • 生产者客户端连接到nsqd,并将数据消息发送到指定topic中
  • nsqd将topic中数据分发到所有关联的channel中
  • nsqd将channel中消息推送到订阅channel的某个客户中进行处理(比如上图中,最后的消息会发送给consumerA 或 B 的其中一个进行处理)

NSQ部署

单机部署

1️⃣ 启动nsqd

nsqd.exe --data-path=./datas

2️⃣ 启动nsqdadmin

nsqdadmin.exe --nsqd-http-address="localhost:4151"

3️⃣ 测试

  • 生产者发送消息:启动to_nsq从控制台将消息发送到test主题
to_nsq.exe --nsqd-tcp-address="localhost:4150" --topic=test
  • 消费者订阅消息:启动nsq _tail订阅test主题channel管道并将消息打印到控制台
nsqd_tail.exe --nsqd-tcp-address="localhost:4150" --topic test --channel test

集群部署

1️⃣ 启动nsqlookupd

nsqlookupd.exe 

2️⃣ 启动nsqd

nsqd.exe --data-path=./datas --lookupd-tcp-address="localhost:4160"

3️⃣ 启动nsqdadmin

nsqdadmin.exe --nsqd-http-address="localhost:4161"

4️⃣ 测试

  • 生产者发送消息:启动to_nsq从控制台将消息发送到test主题
to_nsq.exe --nsqd-tcp-address="localhost:4150" --topic=test
  • 消费者订阅消息:启动nsq _tail订阅test主题channel管道并将消息打印到控制台
nsqd_tail.exe --lookupd-tcp-address="localhost:4161 --topic test --channel test
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值