• 12.1 Go nsq


    12.1 Go nsq

    1.nsq是Go语言编写的,开源的内存分布式消息队列中间件

    2.可以大规模的处理每天数以十亿级别的消息

    3.分布式和去中心化拓扑结构,无单点故障

    4.地址https://github.com/nsqio/nsq

    1.1. nsq应用场景

    1.异步处理,把非关键流程异步化,提高系统的响应时间和健壮性

    2.应用解耦,通过消息队列。

    想必同学们都点过外卖,点击下单后的业务逻辑可能包括:检查库存、生成单据、发红包、短信通知等,如果这些业务同步执行,完成下单率会非常低,如发红包,短信通知等不必要的流程,异步执行即可。

    此时使用MQ,可以在核心流程(扣减库存、生成订单记录)等完成后发送消息到MQ,快速结束本次流程。消费者拉取MQ消息时,发现红包、短信等消息时,再进行处理。

    场景:双11是购物狂节,用户下单后,订单系统需要通知库存系统,传统的做法就是订单系统调用库存系统的接口。

    这种做法有一个缺点:

    • 当库存系统出现故障时,订单就会失败。(这样马云将少赚好多好多钱钱。。。。)
    • 订单系统和库存系统高耦合.

    引入消息队列

    • 订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功。
    • 库存系统:订阅下单的消息,获取下单消息,进行库操作。 就算库存系统出现故障,消息队列也能保证消息的可靠投递,不会导致消息丢失(马云这下高兴了,钞票快快的来呀~~)。

    1.2. nsq架构原理

    nsq组件

    nsqd        负责接收,保存以及发送消息给消费者,的一个进程
    nsqlookupd    负责维护所有nsqd的状态,提供服务发现的进程
    nsqadmin    一个web管理平台,实时监控集群以及各种管理任务,(如topic,channel等任务)
    

    架构图

    概念

    topic主题概念,对应一个具体的队列,如订单数据放到order_queue这个topic
    channel概念,每个消费者对应一个channel,实现消息可重复消费
    

    nsq特性

    消息默认不持久化,可配置成持久化
    每条消息至少传递一次,保证消息不丢失,可能重复消费,需要业务去重
    消息不保证有序
    

    1.3. nsq使用

    下载地址

    https://nsq.io/deployment/installing.html
    

    组件

    nsqd 消息发送,存储,转发
    nsqlookupd 服务发现
    nsqadmin 管理后台
    
    启动步骤:https://nsq.io/overview/quick_start.html
    
    启动nsqlookupd  默认监听4160
    启动nsqd --lookupd-tcp-address=127.0.0.1:4160
    启动nsqadmin --lookupd-http-address=127.0.0.1:4161
    
    可以访问http://127.0.0.1:4171/lookup看到后台,在Lookup视图创建topic
    

    1.4. 创建topic/channel

    1.5. nsq写入消息

    生产者

  • 相关阅读:
    python_控制台输出带颜色的文字方法
    模拟数据库作业
    js笔记
    CSS 笔记
    html 笔记
    必备技能-Git 使用规范流程
    python 闭包
    30个python编程技巧!
    python 面向对象
    python 线程
  • 原文地址:https://www.cnblogs.com/open-yang/p/11256962.html
Copyright © 2020-2023  润新知