zoukankan      html  css  js  c++  java
  • nsq介绍及python3简单使用

    简介

    NSQ是1个分布式(distributed)、可扩展(scalable)、配置简单(Ops Friendly)、可集成(integrated)、实时( realtime )的消息传递平台。即消息中间件。

    可以将原本耦合、同步执行的程序 解耦成 生产端+ 消息队列+消费端模型的异步程序,加上分布式的生产者和消费者架构就可以在一定程度上支撑大并发。

    NSQ是go语言开发的消息队列,它的设计目标是为在多台计算机上运行的松散服务提供一个现代化的基础设施骨架。

    官方和第三方为NSQ开发了众多客户端功能库,如官方提供的基于HTTP的nsqd、Go客户端go-nsq、Python客户端pynsq、基于Node.js的JavaScript客户端nsqjs、异步C客户端libnsq、Java客户端nsq-java以及基于各种语言的众多第三方客户端功能库。

    组成

    img

    NSQ主要是由3个进程组成的:

    • nsqd是一个接收、排队、然后转发消息到客户端的进程。
    • nsqlookupd 管理拓扑信息并提供最终一致性的发现服务。
    • nsqadmin用于实时查看集群的统计数据(并且执行各种各样的管理任务)

    Topic 和 Channel

    每个nsqd实例旨在一次处理多个数据流。这些数据流称为“topics”,

    1个topic具有1个或N个“channels”,所有的channels都会收到topic消息的副本,实际上topic是通过channel来消费它产生的消息的。

    如果说topic是工厂,channel就是各种不同的销售渠道,那么生产者就是工人们,消费者就是来自许多不同渠道的客户们。

    topic 由生产者端指定,channel由消费者端指定

    topicchannel都相互独立地缓冲数据,防止缓慢的消费者导致其他chennel的积压(同样适用于topic级别)。

    channel可以并且通常会连接多个客户端。假设所有连接的客户端都处于准备接收消息的状态,则每条消息将被传递到随机客户端。例如:

    img

    其他概念点此了解

    部署

    建议使用 docker 部署,插拔方便,不影响主机器。

    创建一个文件夹,如 mkdir docker-compose-test , 在其中创建如下 docker-compose.yml 文件。

    docker-compose.yml 如下:

    version: '3'
    services:
      nsqlookupd:
        image: nsqio/nsq
        command: /nsqlookupd
        # networks:    # 本地部署可以删除地址绑定这三行,下同
        #   nsqnetwork:
        #    ipv4_address: 172.20.0.2
        ports:
          - "9910:4160"  # Tcp端口 广播
          - "9911:4161" # Http端口 客户端发现和管理操作
      nsqd:
        image: nsqio/nsq
        command: /nsqd --lookupd-tcp-address=nsqlookupd:4160
        depends_on:
          - nsqlookupd
        # networks:
        #   nsqnetwork:
        #      ipv4_address: 172.20.0.3
        ports:
          - "9912:4150" # tcp服务客户端
          - "9913:4151" # 提供http端口
      nsqadmin:
        image: nsqio/nsq
        command: /nsqadmin --lookupd-http-address=nsqlookupd:4161
        depends_on:
           - nsqlookupd
        # networks:
        #     nsqnetwork:
        #        ipv4_address: 172.20.0.4
        ports:
          - "9914:4171"
    

    保存退出后,使用如下命令启动

    docker-compose up
    

    后台启动则可以 使用命令 docker-compose up -d

    访问本地网址 127.0.0.1:9914 即可看到页面板。

    代码使用

    相关客户端支持可参看此链接

    因为业务相关,我们一般采用的是 HTTP 的方式生产消息。使用方式如下:

    curl -d "<message>" http://127.0.0.1:9913/pub?topic=name
    

    采用上述命令生产一个消息给 nsq 后,可在 nsq 面板(127.0.0.1:9914)看到这条消息。

    image

    主页面

    点击,即可进入内部查看具体信息。包括 NSQD 节点,具体的channel,队列中的消息数,连接数等。

    image

    nsqadmin

    image

    channel 。上图最下一行提示没有客户端(消费者)连接这个 channel。启动客户端即可。

    客户端测试代码

    # nsq_consume_yezi.py
    import nsq
    
    
    def handler(message):
        print(message)
        print(message.body)
        return True
    
    
    r = nsq.Reader(message_handler=handler, nsqd_tcp_addresses=['127.0.0.1:9912'], topic='yezi_topic', channel='ceshi01', lookupd_poll_interval=15)
    
    nsq.run()
    

    使用 python 启动此代码,

    image

    面板也显示了客户端的连接。

    image

    其他

    列出所有的 NSQD 节点:

    image

    消息的统计:

    image

    lookup主机的列表:

    image

    参考地址

  • 相关阅读:
    ThinkPHP5远程代码执行高危漏洞(附:升级修复解决方法)
    PowerDesigner 表格导出为excel
    ubuntu 18.04 配置远程ssh/远程ftp/远程vnc登陆
    Linux apache的运行用户和用户组
    mac系统 安装pip,用python读写excel(xlrd、xlwt)安装
    nvm 设置 nodejs 默认版本
    js基础
    Node.js 8 中的 util.promisify的详解
    HTTP协议中POST、GET、HEAD、PUT等请求方法以及一些常见错误
    MQTT简介
  • 原文地址:https://www.cnblogs.com/yezigege/p/13791476.html
Copyright © 2011-2022 走看看