zoukankan      html  css  js  c++  java
  • 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写入消息

    生产者

  • 相关阅读:
    redis 6379端口telnet不通的解决办法
    虚拟机centOS7 关闭防火墙后ping通 telnet不通 解决办法:disable seLinux
    oracle查询表名或字段查不到
    springcloud中feign使用的抗
    java分页使用本地线程方式
    PSS下载助手(PSX Download Helper)1.7.6.1发布
    Spring Cloud系列(四):Eureka源码解析之客户端
    Spring Cloud系列(三):Eureka源码解析之服务端
    Spring Cloud系列(二):Eureka应用详解
    Spring Cloud系列(一):微服务架构简介
  • 原文地址:https://www.cnblogs.com/open-yang/p/11256962.html
Copyright © 2011-2022 走看看