NSQ消息发送机制

NSQ是Go语言编写的,开源的分布式消息队列中间件,其设计的目的是用来大规模地处理每天数以十亿计级别的消息。NSQ 具有分布式和去中心化拓扑结构,该结构具有无单点故障、故障容错、高可用性以及能够保证消息的可靠传递的特征,是一个成熟的、已在大规模生成环境下应用的产品。

nsq组件

nsqd

单个nsqd实例可以用来树立多个数据流。

topic

数据流也叫topic, 一个topic可以有多个channel。

channel

每一个channel都接收该topic下面的所有消息,然后发送给消费者。channel会均匀的发送消息给消费者,不重复消费。

Topics and channels 都没有优先级,topic在两种情况下会被使用到,在发送数据到一该topic时候首次使用,或者有消费者订阅该topic下的某个channel时候。channel在有消费者订阅了该channle的时候使用。


这里写图片描述

nsqlookupd

这是一个辅助应用,启动目录服务保存着nsqd的地址,consumer可以通过nsqlookupd查询到它消费的channel、topic对应的nsqd服务。consumer不需要了解producer的信息。

nsqadmin

提供了一个webUI,我们可以查询到topics/channels/consumers这些信息,便于监管。

nsq消息传递确保

nsq可以确保发送过来的消息至少被一个消费者消费;为了确保消息消费,重复消费是不可避免的。nsq通过以下来确保消息消费

  1. 客户端表示它们可以接收消息
  2. NSQ发送消息,暂时将消息存在本地
  3. 客户端回复FIN 或者 REQ 表示成功或者重发。如果客户端未能及时发送,则NSQ将重复发送消息给该客户端。

nsq的安装使用(mac)

安装: brew install nsq
使用(命令行):

启动

在一个shell中:nsqlookupd
另一个shell中:nsqd –lookupd-tcp-address=127.0.0.1:4160
第三个shell中:nsqadmin –lookupd-http-address=127.0.0.1:4161

发送接收

curl -d ‘hello world 1’ ‘http://127.0.0.1:4151/pub?topic=test’ //发送消息

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值