概述

背景

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

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

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

  • 系统之间接口耦合比较严重

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

    例如:如果系统A要发送数据给系统B和系统C,发送给每个系统的数据可能有差异,因此系统A对要发送给每个系统的数据进行了组装,然后逐一发送;

    当代码上线后又新增了一个需求:

    把数据也发送给D,新上了一个D系统也要接受A系统的数据,此时就需要修改A系统,让他感知到D系统的存在,同时把数据处理好再给D。在这个过程你会看到,每接入一个下游系统,都要对系统A进行代码改造,开发联调的效率很低。其整体架构如下图

  • 面对大流量并发时,容易被冲垮

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

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

  • 等待同步存在性能问题

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

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

根据上述的几个问题,在设计系统时可以明确要达到的目标:

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

定义

  • 面向消息的中间件(message-oriented middleware)MOM能够很好的解决以上问题,是指利用高效可靠的消息传递机制与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。

  • 通过提供消息传递和消息排队模型在分布式环境下提供应用解耦,弹性伸缩,冗余存储、流量削峰,异步通信,数据同步等功能。

  • 大致的过程是这样的:

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

特点

  • 采用异步处理模式

    • 消息发送者可以发送一个消息而无须等待响应。消息发送者将消息发送到一条虚拟的通道(主题或者队列)上;

    • 消息接收者则订阅或者监听该通道。一条消息可能最终转发给一个或者多个消息接收者,这些消息接收者都无需对消息发送者做出同步回应。整个过程都是异步的。

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

    • 这样的一种通信方式,就是所谓的“异步”通信方式,对于系统A来说,只需要把消息发送给MQ,然后系统B就会异步的去进行处理了,系统A不需要“同步”的等待系统B处理完成。这样的好处是什么呢?两个字:解耦
  • 应用系统之间解耦合

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

能干什么

  • 解耦
  • 削峰
  • 异步

主要功能

  • 实现高可用,高性能,可伸缩,易用和安全的企业级面向消息服务的系统
  • 异步消息的消费和处理
  • 控制消息的消费顺序
  • 可以和Spring或Spring Boot整合简化代码
  • 配置集群容错的MQ集群

ActiveMQ安装和配置

Linux下安装

(1)从官网上下载ActiveMQ相关的版本

(2)解压即可使用

(3)普通启动模式(默认端口为61616

./activemq start

(4)普通关闭模式

./activemq stop

(5)带日志启动模式

./activemq start > activemq_2020.log

ActiveMQ控制台

  • ActiveMQ采用61616端口提供JMS服务
  • ActiveMQ采用8161端口提供管理控制台服务
  • http://127.0.0.1:8161/admin
  • 默认的用户名和密码是admin/admin

ActiveMQ基本内容及安装部署相关推荐

  1. 平台打包整合成exe安装部署(java+mysql+jar+redis+activemq+WinSW)

    上篇文章 : https://blog.csdn.net/yueyekkx/article/details/123934814 写了war包的方式,这篇写jar包. 准备工作: 1.下载免安装的Mys ...

  2. kafka 的安装部署

    Kafka 的简介: Kafka 是一款分布式消息发布和订阅系统,具有高性能.高吞吐量的特点而被广泛应用与大数据传输场景.它是由 LinkedIn 公司开发,使用 Scala 语言编写,之后成为 Ap ...

  3. Mycat 读写分离 数据库分库分表 中间件 安装部署,及简单使用

    MyCat是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个MySQL服 ...

  4. 【SVN】1. SVN 安装部署

    一. SVN概述 1. SVN 简介   Subversion 版本控制系统 简称 SVN.   SVN 是一个跨平台开放源代码的集中式版本控制系统,可以实现文件及目录的保存及版本回溯.   SVN ...

  5. DSVS7050签名服务器的网站,吉大正元数字签名服务器-安装部署手册(COM版 VCTK_S接口)2.1.1.doc...

    吉大正元数字签名服务器-安装部署手册(COM版 VCTK_S接口)2.1.1 数字签名服务器v2.1.1 安装部署手册 (VSTK接口 COM版) V2.1.1 长 春 吉 大 正 元 信 息 技 术 ...

  6. Airflow安装部署

    Airflow安装部署 新闻信息是通过爬虫获取,使用scrapy框架进行爬虫任务:使用airflow工作流监控平台对爬虫任务进行管理.监控(可使用CeleryExecutor分布式,也可使用Local ...

  7. logicaldoc 6.5 结合postgresql 9.x安装部署—基于windows平台

    2019独角兽企业重金招聘Python工程师标准>>> 湘中朱生   2012年9月于深圳 说明:原创内容,请勿转载! <1> 从官网下载部署包 官方网站提供源码包和集成 ...

  8. Centos6.0 64位MySQL 5.5.20 CMake 安装部署

    Centos6.0 64位下 MySQL 5.5.20 CMake 安装部署 一.下载所需软件 linux用 wget 下载需要的软件,保存到目录 /usr/local/src 下 wget ftp: ...

  9. Storm集群安装部署步骤【详细版】

    作者: 大圆那些事 | 文章可以转载,请以超链接形式标明文章原始出处和作者信息 网址: http://www.cnblogs.com/panfeng412/archive/2012/11/30/how ...

最新文章

  1. SQL some any all
  2. 写给那些在技术路上奔跑的人们!!!!!
  3. Python数据分析Numpy库方法简介(三)
  4. Java里String.split需要注意的用法
  5. 8步教你打开Android之门 NDK入门教程
  6. window 快捷键使用 + idear 编辑器使用
  7. pandas的自带数据集_用Python和Pandas进行数据清理:检测丢失值
  8. python提取txt字符串,教你一招!Python读取文件内容为字符串的方法
  9. 机器学习算法总结之Bagging与随机森林
  10. mysql在linux下的完整安装
  11. 帧率ffmepg 摄像头_监控摄像头的硬盘内存选择方法
  12. HNOI2019:My Dream
  13. 【YOLO家族】【论文翻译】YOLO 9000 /YOLO V2
  14. 今天的C位,必须是这位浙大卜教授!
  15. Python_随笔笔记_Python基础1
  16. poi导出excel写入公式_POI导出Excel增加公式核心代码
  17. 三星显示屏测试软件,MagicTune(三星显示器调节工具)
  18. 为什么越来越多的人从开发转测试?
  19. 计算机主板电流图形,终于找到电脑主板供电电路介绍
  20. 【014】Excel宏编程的交互解析(MsgBox)_001_#VBA

热门文章

  1. Python基础语法总结,Python初学者必备
  2. android编程fragment,Android中关于FragmentA嵌套FragmentB的问题
  3. 事务中mybatis通过id查不到但是通过其他条件可以查到_40打卡 MyBatis 学习
  4. oracle 优化器 失效,oracle 优化器 不走索引原因
  5. 带你理清Node.js 的Web框架的3个层次
  6. 【Java】 查找数组中指定元素之 顺序查找 与 二分查找
  7. 习题5-5 使用函数统计指定数字的个数 (15 分)
  8. 关于使用JAVA中JDK安装和在命令行中编译和运行程序的一些总结
  9. 解题报告:POJ 3281 Dining(最大流 / “三分图”建图)
  10. php json 数组 区别,PHP实战:JSON两种结构之对象和数组的理解