• go笔记 NSQ (1) (认识与操作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 个人理解为连接消息生产端与消息服务端的中间程序,用来保证一致性,类似于zookeeper。nsqd个人理解为接收消息推送,以及发送消息的组件,可以理解为类似kafka。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 
    ",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,分别对应中间件,生产组件,消费组件。可以发现使用起来还是很简单的,直接支持rest api 推送消息和消费消息。

  • 相关阅读:
    更改文件默认打开方式
    python数据分析高频词提取,pyecharts词云制作并保存
    pyecharts V1.x版本使用Map绘制地图修改主题背景色等
    设置随机请求头和使用代理
    【重学前端】JS基础-原型和原型链
    【重学前端】JS基础-变量和类型
    Bootstrap blog整页制作
    拉勾网 移动端流式布局与rem布局整页制作
    PC端管理后台整页制作
    QQ飞车官方首页(部分)制作
  • 原文地址:https://www.cnblogs.com/hetutu-5238/p/12932447.html
Copyright © 2020-2023  润新知