NSQ消息队列调研与使用

一个自己封装的NSQ项目

nsqio/go-nsq项目的封装
https://github.com/Kevin005/nsq-std-foundation

消息队列解决的问题

  • 模块间解耦:将一个流程加入一层数据接口拆分成两个部分,上游专注通知,下游专注处理,服务接口依赖变为数据依赖
  • 消息的异步:上游发送消息以后可以马上返回,处理工作交给下游进行,最终一致性
  • 消息的缓冲:应对流量的突然上涨变更,消息队列有很好的缓冲削峰作用
  • 广播:让一个消息被多个下游进行处理

NSQ消息队列优点

高可用(无单点问题) 生产者和消费者是直接连上各个nsqd节点,因此即使nsqlookupd挂了,也不影响线上正常使用。即使某个nsqd节点挂了,生产者发布消息时,发现节点挂了,可以选择其他节点(客户端负责实现),单个节点挂了对消费者无影响(go-nsq服务会重新分配nsqd)

高性能生产者在发布消息时,可以随机发布到集群中nsqd节点(客户端负责实现),可以在一定程度上达到负载均衡。消费者同时监听着集群中所有nsqd节点

高可扩展当向集群中添加节点时,首先消费者会通过nsqlookupd发现新的节点加入,并自动连接。生产者也可以通过nsqlookupd找到活跃的nsqd节点

nsqio/go-nsq项目

1.项目结构
+-- apps                 //msqadmin、nsqd、nsqlookupd等服务入口
|
+-- msqadmin             //可视化界面服务
|
+-- nsqd                 //负责接收,排队,投递消息给客户端的服务
|
+-- nsqlookupd           //负责管理拓扑信息并提供发现的服务
  1. nsqd/topics一个可供订阅的话题,消息分类的概念,会下发消息给每个独立的channel
  2. nsqd/channel一个通道(channel)是消费者订阅了某个话题的逻辑分组。 一个Topic有可以分为多个Channel,每当一个发布者发送一条消息到一个topic,消息会被复制到所有消费者连接的channel上,从而实现多路分发,而channel上的每个消息被分发给它的订阅者,从而实现负载均衡。在消费者第一次订阅时就会创建channel,channel会将消息进行排列,如果没有消费者读取消息,消息首先会在内存中排队,当量太大时就会被保存到磁盘中。
2.消息体类型和协议

消息body字段为[]byte,可以支持JSON, Protocol Buffers等

lookupd、nsqd都有支持http、tcp协议接口

API文档地址 https://nsq.io/components/nsqd.html

3.nsqio/go-nsq客户端类型(
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值