zoukankan      html  css  js  c++  java
  • Golang消息队列之NSQ

    NSQ

    NSQ是一个实时分布式消息传递平台,设计用于大规模操作,能每天处理数十亿条消息。

    它促进了没有单点故障的分布式和分散拓扑,支持容错和高可用性,并提供可靠的消息传递保证。

    优缺点
    优点:
    1、部署非常方便,没有任何环境的依赖,一个二进制可执行文件
    2、轻量级没有过多的配置参数,只需要简单配置即可直接使用
    3、性能极高(基于go编写)
    4、消息不存在丢失的情况
    缺点:
    1、消息无顺序
    2、节点之间没有消息复制
    3、没有鉴权

    消息队列场景

    场景介绍来自于

    异步执行

    将注册信息写入数据库成功后,同时进行发送注册邮件和发送注册短信的操作。而所有任务执行完成后,返回信息给客户端。同串行方式相比,并行方式可以提高执行效率,减少执行时间。
    并行方式:

    异步方式:

    应用解耦

    场景说明:用户下单以后,订单系统需要通知库存系统。

    传统的做法为:订单系统调用库存系统接口。如下图所示:

    传统方式具有如下缺点:
    1、假设库存系统访问失败,则订单减少库存失败,导致订单创建失败
    2、订单系统同库存系统过度耦合

    那么如何解决上述的缺点呢?需要引入消息队列,引入消息队列后的架构如下图所示:

    • 订单系统:用户下单后,订单系统进行数据持久化处理,然后将消息写入消息队列,返回订单创建成功
    • 库存系统:使用拉/推的方式,获取下单信息,库存系统根据订单信息,进行库存操作。

    流量削锋

    应用场景:秒杀活动,一般会因为流量过大,导致流量暴增,应用挂掉。为解决这个问题,一般需要在应用前端加入消息队列。

    1、可以控制参与活动的人数;
    2、可以缓解短时间内高流量对应用的巨大压力;
    流量削锋处理方式系统图如下:

    • 服务器在接收到用户请求后,首先写入消息队列。这时如果消息队列中消息数量超过最大数量,则直接拒绝用户请求或返回跳转到错误页面;
    • 秒杀业务根据秒杀规则读取消息队列中的请求信息,进行后续处理。

    NSQ组件

    nsqd:一个守护进程,它接收、排队并向客户端发送消息
    nsqlookupd:汇总节点信息,提供查询和管理topic等服务
    nsqadmin:管理端展示UI界面,能有一个web页面去查看和操作

    NSQ安装

    NSQ github

    1.下载nsq软件包

    $ wget https://github.com/nsqio/nsq/releases/download/v1.2.0/nsq-1.2.0.linux-amd64.go1.12.9.tar.gz
    

    2.启动nsqlookupd

    $ ./nsqlookupd &
    

    3.启动nsqd,并注册到指定lookupd

    $ ./nsqd -broadcast-address=127.0.0.1 -lookupd-tcp-address=127.0.0.1:4160 &
    

    4.启动nsqweb界面

    $ ./nsqadmin --lookupd-http-address=127.0.0.1:4161 &
    
    5.访问nsqadmin
    ![](https://img2018.cnblogs.com/blog/1679739/202003/1679739-20200301162720259-1060774575.png)
  • 相关阅读:
    打印水仙花数
    打印从1到k之间的所有素数
    Fibonacci数列小程序
    Fibonacci数
    水仙花数
    猴子吃桃问题
    5个数求最值—南阳acm
    三个数从小到大排序—南阳acm
    南阳acm奇偶数分离
    find the safest road--hdu1596
  • 原文地址:https://www.cnblogs.com/jasonminghao/p/12387558.html
Copyright © 2011-2022 走看看