go笔记 (认识与操作NSQ)

时间:2020-05-21
本文章向大家介绍go笔记 (认识与操作NSQ),主要包括go笔记 (认识与操作NSQ)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

  之前知乎上在go有关学习经验中看到有人推荐可以通过学习NSQ来学习go语言,并且还能顺道了解消息队列的设计,可谓一举两得。所以去了解了下NSQ,发现截止本文编写时间,NSQ在github上已经累积了17.7K 的star,发现比大家经常用到的kafka,rabbitmq的star还要高。汗,看来自己真是孤陋寡闻了。

  就从基本使用开始入手吧

 1.克隆源代码,并切换到dev分支

  https://github.com/nsqio/nsq.git

  

   这儿使用go mod管理   记得装好依赖

 2.应用包app

  本文主要介绍安装使用,所以主要看app包中

  

   将会用到这四个包,其中nsqlookupd 个人理解为连接消息生产端与消息服务端的中间程序。nsqd个人理解为接收消息推送的组件,nsq_to_ xx个人理解为消费消息的组件,nsqadmin则顾名思义为管理程序,可以用来查看message,topic,channel等情况。

  所以我们依次启动nsqqlookupd,nsqd,nsq_to_http,nsqadmin。

2.1 启动nsqlookupd

  

   可以看到控制打印

   通过打印我们可以知道其监听了两个端口,http 4161,tcp 4160 。

2.2启动NSQD

  即消息推送组件

  

  由于其依赖nsqlooupd,所以启动参数记得加上    --lookupd-tcp-address=127.0.0.1:4160   即2.1中监听的tcp端口

  

   启动成功后控制台应该打印如上,这儿注意也开启了 http端口 4151,tcp端口 4150

2.3启动消费组件

   这儿为了方便就直接用nsq_to_http组件

    

   启动必要参数只有三个,一个是消费topic  我们使用nsq_my   ,一个是连接我们的中间组件即nsqlookupd的地址,一个是消费的webapi接口,

   --topic nsq_my --lookupd-http-address 127.0.0.1:4161 --get http://localhost:8888/msg?msg=%s

  这儿注意--get即代表get请求,也可以使用post请求,即--post  但是使用post请求注意加上 --content-type  

  http://localhost:8888/msg?msg=%s即自己的api服务,这儿可以建一个web服务

package main

import (
    "github.com/gin-gonic/gin"
    "web_application/controller/animal"
    "web_application/controller/nsq"
)

func main() {
    
    ctx :=gin.Default()
    ctx.GET("/msg",nsq.Consumer)
    ctx.Run(":8888")
}
package nsq

import (
    "github.com/gin-gonic/gin"
    "log"
)

func Consumer(con *gin.Context)  {
    msg := con.Query("msg")

    log.Printf("成功获取到消息: %s \n",msg)
}

  内容很简单,就是消费并打印即可,监听端口为8888,拦截/msg 的get请求地址(记得启动web服务)

  启动nsq_to_http成功后控制台会打印如下

  这儿会报错,提示没有nsq_my这个topic   这是因为我们还没创建 

测试

  按照官方测试用例我们可以测试消息发送, 像topic 为nsq_my发送一条消息this is the fisrt message  如果这个topic不存在则NSQ会自动创建

    curl -d 'this is the fisrt message' 'http://127.0.0.1:4151/pub?topic=nsq_my'     记住这儿的4151即nsqd组件监听的http端口

  会发现我们创建的web服务已经成功消费到了数据

   到此,NSQ的消息推送与消费就已经成功了

2.4 nsqadmin

之前提到了nsqadmin,这是nsq官方出的web界面管理器,方便我们查看消息消费情况,启动方式也很简单。找到nsqadmin包下的main方法并启动

   不过既然是管理器,其肯定也要在启动参数前连接到我们的nsqlookupd中间件才行   --lookupd-http-address=127.0.0.1:4161

启动成功后控制台打印会如下

   可以看到其监听了4171的http端口,所以我们直接访问localhost:4171,可以看到我们刚才创建的topic,其他两个是我之前创建的。

  点进去后可以看到消息消费情况

到此nsq的基本操作就结束了,可以看到主要的组件有nsqlookupd,nsqd,nsq_to_xx,分别对应中间件,生产组件,消费组件。

原文地址:https://www.cnblogs.com/hetutu-5238/p/12932447.html