activemq后台管理 看topic消息_NSQ - 实时分布式消息平台

分布式消息平台是分布式系统中十分重要的组件,可以实现应用耦合、异步传送、流量削峰等重要特性,是大型系统中不可缺少的中间件。目前,已经有包括 Kafka、RabbitMQ、ActiveMQ 等消息队列实现,正被广泛应用。我们不妨转过视野,看看 NSQ,一个使用 Go 语言的高性能实时分布式消息平台,或许能为你带来不一样的开发体验。

b2863b1e6b1e2501ad1e13deb976572d.png

NSQ分布式消息平台

简介

NSQ,是 nsqio 组织在 Github 上开源的实时分布式消息平台,项目代码位于 https://github.com/nsqio/nsq,目前版本为 v1.2.0。NSQ 使用分布式和去中心化的架构拓扑,实现了较高的容错性和可用性,提供了可靠的消息传递保证。NSQ 无需任何中心化的消息代理,可水平扩展,其自带的服务发现机制简化了新节点的添加,支持发布-订阅方式和负载均衡方式的消息传递。NSQ 的配置和部署十分简单,并自带图形化的管理后台,部署的二进制程序没有任何额外的运行时依赖。NSQ 延迟低、吞吐量大、支持多种消息格式,能够实现实时消息传递,性能优越。

62af72c8e1291231024ab374299d627a.png

NSQ分布式消息平台

安装

NSQ 为包括 Linux、Darwin、FreeBSD 和 Windows 平台提供了预编译的安装包,可以下载安装。在 OSX 上,还可以使用 Homebrew 直接安装:

brew install nsq

NSQ 还提供了官方的 Docker 镜像,可以方便地在容器化环境下进行部署。开发者也可以从源码编译,要求 Go 语言 1.9+,对于 Go < 1.11 还需要 dep,下载源码后进行本地编译:

$ git clone https://github.com/nsqio/nsq $GOPATH/src/github.com/nsqio/nsq$ cd $GOPATH/src/github.com/nsqio/nsq$ dep ensure$ make
659b16d92ecf41de7db5f85836b7088c.png

NSQ Github

示例

NSQ 包括三个组件:

  • nsqd:NSQ 主服务,接收、处理并传递消息
  • nsqlookupd:服务发现,用于管理服务拓扑和节点扩展
  • nsqadmin:Web UI 形式的图形化管理后台

在 NSQ 中,数据的流动模型是树状的数据流和消费者。主题(topic)表示一个独立的数据流,通道(channel)是一组订阅特定主题的一组消费者。单个 nsqd 可以拥有多个主题,而每个主题可以拥有多个通道。每个通道接收其所订阅的主题的所有消息的副本,以多播的方式实现多通道时的负载均衡。

814cd4b150327c4c44feb439986934bf.gif

nsqd内部数据流

NSQ 使用简单,首先启动 nsqlookupd 服务发现:

$ nsqlookupd

然后,启动主服务 nsqd,并配置其服务地址:

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

再启动管理后台 nsqadmin,配置服务地址:

$ nsqadmin --lookupd-http-address=127.0.0.1:4171

此时,我们可以推送一条初始消息,调用 nsq 提供的 HTTP 接口发送,并指定主题的名字,nsq 会为其自动创建一个新的主题:

$ curl -d 'hello world 1' 'http://127.0.0.1:4151/pub?topic=test'

想要看到服务运行的效果,我们需要订阅消息。使用 NSQ 提供的工具 nsq_to_file,其可以订阅特定主题的消息,并把消息写入文件中:

$ nsq_to_file --topic=test --output-dir=/tmp --lookupd-http-address=127.0.0.1:4161

在这里,我们使用 nsq_to_file 订阅了位于 4161 的 nsqd 的 test 主题,当接收到新消息时,就会把消息写入目标文件夹 /tmp 中的日志文件 test.*.log 中。我们不妨再发送几条消息:

$ curl -d 'hello world 2' 'http://127.0.0.1:4151/pub?topic=test'$ curl -d 'hello world 3' 'http://127.0.0.1:4151/pub?topic=test'

此时,我们可以查看日志文件,已经写入了 hello world 的消息,也可以在浏览器打开 http://127.0.0.1:4171/ 来访问 NSQ 的管理后台,查看统计数据。

f68ab242bee710d2c85d29a5c422a7fa.png

nsq管理后台

NSQ 提供 HTTP API 来进行消息推送,和消息队列的管理,常用的接口包括:

  • /ping:检测服务是否可用
  • /info:NSQ 服务信息
  • /pub:推送一条消息到主题
  • /mpub:推送多条消息到主题
  • /topic/create:创建一个新的主题
  • /channel/create:创建一个新的通道

NSQ 还提供了多种语言的客户端,进行消息的推送和订阅等操作,包括 Java、Python 和 Javascript 等,可以选用熟悉的编程语言进行使用。

8e28edc02a3f97b7c10b1292c39c3b21.png

NSQ客户端库

在使用 NSQ 时,我们需要注意它的几个特性:

  • NSQ 主要提供的是内存中的消息服务,不能依赖于它的持久化
  • NSQ 中每条消息保证至少传递一次,当出现超时、连接断开、重复入列等情况时,客户端应负责处理重复消息的问题
  • NSQ 不保证消息的顺序,不可以依赖与消费者得到消息的顺序
  • NSQ 中的服务发现保证最终一致性,消费者最终会找到所有主题的生产者

总结

NSQ 作为一个分布式消息平台,性能优越,去中心化程度高,无需使用 broker,自带服务发现和图形化管理后台,支持多种形式的客户端接入。NSQ 目前已被广泛应用,包括 Docker、码云、字节跳动等都把 NSQ 应用到了各自的内部服务开发中,前景广阔,值得关注。

0d4560c2ba4f0ab2c3c86e509583375a.png

NSQ使用者众多

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值