zoukankan      html  css  js  c++  java
  • ActiveMQ 笔记(一)概述与安装

    个人博客网:https://wushaopei.github.io/    (你想要这里多有)

    一、消息中间件的产生背景

    1、前言:考虑消息中间件的使用场景?

    •   在何种场景下需要使用消息中间件
    •   为什么要在系统里引入消息中间件

    2、根据上述问题列举:从生活Case到实际生产案例

    基于微服务架构背景下:链式调用是我们在写程序时候的一般流程,为了完成一个整体功能会将其拆分成多个函数(或子模块),比如模块A调用模块B,模块B调用模块C,模块C调用模块D。但在大型分布式应用中,系统间的RPC交互繁杂,一个功能背后要调用上百个接口并非不可能,从单机架构过渡到分布式微服务架构的通例。
    意:此时考虑这些架构会有哪些问题?

    系统之间直接调用实际工程落地和存在的问题:

    • 系统之间接口耦合比较严重
    • 面对大流量并发时,容易被冲垮
    • 等待同步存在性能问题

    (1)系统之间接口耦合比较严重

    每新增一个下游功能,都要对上游的相关接口进行改造;

    举个例子:如果系统A要发送数据给系统B和系统C,发送给每个系统的数据可能有差异,因此系统A对要发送给每个系统的数据进行了组装,然后逐一发送;
    当代码上线后又新增了一个需求:
    把数据也发送给D,新上了一个D系统也要接受A系统的数据,此时就需要修改A系统,让他感知到D系统的存在,同时把数据处理好再给D。在这个过程你会看到,每接入一个下游系统,都要对系统A进行代码改造,开发联调的效率很低。其整体架构如下图

            

    (2)面对大流量并发时,容易被冲垮

    每个接口模块的吞吐能力是有限的,这个上限能力如果是堤坝,当大流量(洪水)来临时,容易被冲垮。

    举个例子秒杀业务:
    上游系统发起下单购买操作,我就是下单一个操作
    下游系统完成秒杀业务逻辑
    (读取订单,库存检查,库存冻结,余额检查,余额冻结,订单生产,余额扣减,库存减少,生成流水,余额解冻,库存解冻)

    (3)等待同步存在性能问题

    RPC接口上基本都是同步调用,整体的服务性能遵循“木桶理论”,即整体系统的耗时取决于链路中最慢的那个接口。

    比如A调用B/C/D都是50ms,但此时B又调用了B1,花费2000ms,那么直接就拖累了整个服务性能。

           

    3、解决方案:

    在设计系统时可以明确要达到的目标:

    (1)要做到系统解耦,当新的模块接进来时,可以做到代码改动最小;能够解耦
    
    (2)设置流量缓冲池,可以让后端系统按照自身吞吐能力进行消费,不被冲垮;能削峰
    
    (3)强弱依赖梳理能将非关键调用链路的操作异步化并提升整体系统的吞吐能力;能够异步

    二、消息中间件的概述

    1、定义

    面向消息的中间件(message-oriented middleware)MOM能够很好的解决以上问题,是指利用高效可靠的消息传递机制与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。
    通过提供消息传递和消息排队模型在分布式环境下提供应用解耦,弹性伸缩,冗余存储、流量削峰,异步通信,数据同步等功能。

    消息传递的过程:发送者把消息发送给消息服务器,消息服务器将消息存放在若干队列/主题topic中,在合适的时候,消息服务器回将消息转发给接受者。在这个过程中,发送和接收是异步的,也就是发送无需等待,而且发送者和接受者的生命周期也没有必然的关系;尤其在发布pub/订阅sub模式下,也可以完成一对多的通信,即让一个消息有多个接受者。

              

    2、特点

    主要特点有两个: ①采用异步处理模式、②使用应用系统之间解耦合

    (1)采用异步处理模式

    消息发送者可以发送一个消息而无须等待响应。消息发送者将消息发送到一条虚拟的通道(主题或者队列)上;
    消息接收者则订阅或者监听该爱通道。一条消息可能最终转发给一个或者多个消息接收者,这些消息接收者都无需对消息发送者做出同步回应。整个过程都是异步的。

    案例:也就是说,一个系统跟另一个系统之间进行通信的时候,假如系统A希望发送一个消息给系统B,让他去处理。但是系统A不关注系统B到底怎么处理或者有没有处理好,所以系统A把消息发送给MQ,然后就不管这条消息的“死活了”,接着系统B从MQ里面消费出来处理即可。至于怎么处理,是否处理完毕,什么时候处理,都是系统B的事儿,与系统A无关。

                   

    (2)应用系统之间解耦合

    • 发送者和接受者不必了解对方,只需要确认消息
    • 发送者和接受者不必同时在线

    3、整体架构:

                 

    4、消息中间件的作用:

        解决了耦合调用、异步模型、抵御洪峰流量,保护了主业务,消峰。

    5、下载与相关功能的使用

    (1)下载:

    ActiveMQ官网: http://activemq.apache.org/

               

    (2)主要功能:

    实现高可用,高性能,可伸缩,易用和安全的企业级面向消息服务的系统

    (3)使用方式:

    • 异步消息的消费和处理
    • 控制消息的消费顺序
    • 可以和Spring或者SpringBoot整合简化代码
    • 配置集群容错的MQ集群

    三、Activemq的下载与安装

    1、官网下载 

    http://activemq.apache.org/

    2、linux安装

    上传: 使用 rz 和 sz 命令进行上传下载

    • /opt目录下面
    • 解压缩apache-activemq-5.15.9-bin
    • 在根目录下mkdir /myactiveMQ
    • cp -r apache-activemq-5.15.9 /myactiveMQ/
    • 普通启动mq: ./activemq start
    • actvemq  的默认进程端口是61616
    • 查看后台进程的方法:
      ps -ef | grep activemq | grep -v grep    // grep -v  grep 可以不让显示grep 本来的信息
      netstat -anp | grep 61616     // activemq 的默认后台端口是61616
      lsof -i:61616

    3、启动:

    (1)普通启动  默认端口为61616

           

    关闭:  ./activemq stop

    (2)带运行日志的启动方式

    让启动的日志信息不在控制台打印,而放到专门的文件中:

    ./activemq start >  /myactivemq/myrunmq.log

    4、Apache ActiveMQ控制台

            http://127.0.0.1:8161/admin

    默认的用户名和密码是admin/admin  

            

    5、备注:

    • ActiveMQ采用61616端口提供JMS服务
    • ActiveMQ采用8161端口提供管理控制台服务
  • 相关阅读:
    算法--枚举策略
    1344 走格子
    1381 硬币游戏
    POJ 2492 A Bug's Life
    零基础学并查集算法
    Codeforces 777C Alyona and Spreadsheet
    HDU 1039 Easier Done Than Said?
    Codeforces 591B Rebranding
    目录书籍
    对话机器学习大神Yoshua Bengio(上)
  • 原文地址:https://www.cnblogs.com/wushaopei/p/12288607.html
Copyright © 2011-2022 走看看