ActiveMQ系列教程(一)基本概念
程序员文章站
2022-07-13 22:52:42
...
(一)消息中间件、JMS和ActiveMQ概述
1. 消息中间件产生的背景
同步vs异步
在客户端与服务器进行通讯时,当客户端发起请求后,通常必须等待服务对象完成处理返回结果才能继续执行(同步)。这就造成了服务请求方与服务提供方之间生命周期的紧密紧密耦合,客户进程和服务对象进程都都必须同时正常运行,是为同步。从而造成性能低下,而且如果在过程中出现任何故障,很可能导致响应数据的丢失。
2.消息中间件
隔离于应用逻辑,专门处理消息的组件。面向消息的中间件(MOM)较好的解决了以上问题。发送者将消息发送给消息服务器,消息服务器将消息存放在若干队列中,在合适的时候再将消息转发给接收者,是为异步。
这种模式下,发送和接收无需同时在线的,发送者和接收者均无需等待; 二者的生命周期也不需相同。发送消息的时候接收者不一定运行,接收消息的时候发送者也不一定运行。并且,可以做到一对多通信: 即对于一个消息可以有多个接收者。
MQ简介:
MQ全称为Message Queue(消息队列), 是一种应用程序对应用程序的通信方法。应用程序通过写和读出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用(RPC)的技术。
3.什么是JMS?
Java消息服务(Java Message Service),是一个Java平台中关于面向消息中间件(MOM),也提供了相关API接口,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。注意,JMS是规范,是接口,可以有各种实现JMS规范的具体消息队列产品。
4. 什么是ActiveMQ
是Apache下的一个实现了 JMS 规范消息中间件(MOM)框架。旨在通过提供标准的产生、发送、接收和处理消息的API实现。JMS和ActiveMQ的关系类似于 JDBC 和具体数据库厂商实现库(比如mysql jdbc driver)的关系。类似的框架还有RabbitMQ、Kafka等。
JMS和MQ的关系:
JMS是一个用于提供消息服务的技术规范,它制定了在整个消息服务提供过程中的所有数据结构和交互流程。而MQ则是消息队列服务,是面向消息中间件(MOM)的最终实现,是真正的服务提供者;MQ的实现可以基于JMS,也可以基于其他规范或标准
5. 生产者与消费者
生产者--服务的提供方(消息的生产方)
消费者--服务的请求方(消息消费方)
6.消息中间件(消息队列)的应用场景
在项目中,将一些无需即时返回且耗时的操作提取出来,进行了异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量。
应用场景举例:汽车制造企业,由库存系统开始发起相关异步消息传递
附录:面试易问之
消息中间件(比如JMS)为什么经常被用在(适用于)高并发场景:
1. 松耦合通信模式
1)消息目的地(缓存)共享:一个组件向一个目的地发送消息,接收者可以从目的地获取这个消息。这个目的地是发送者和接收者共有的。
2)发送者和接收者要建立通信,并不要求两者同时可用。发送者不需要对接收者有任何了解,接收者也不需要知道发送者是谁在哪里,只需要知道从哪里(目的地)取什么样的消息(id和格式)
3)对比紧耦合的通讯模式,比如RMI ,调用者必须知道远程应用的方法
2.异步:
1)接收端不必在客户端发送消息时实时接收消息。
2)发送端发送消息后,可以继续完成其他任务,而不必等到接收端确认接收消息。
3)接收端可以在以后的某个时间接收这些消息
3. 可靠:
消息提供者可以保证一个消息传送一次且只传送一次
下一篇我们将介绍消息队列的两种消息模型
下一篇: 许式伟谈七牛如何做HTTP服务测试
推荐阅读
-
Spring Boot2 系列教程(一) | 如何使用 IDEA 构建 Spring Boot 工程
-
Spring Boot2 系列教程 (二) | 第一个 SpringBoot 工程详解
-
Linux Shell脚本系列教程(一):Shell入门
-
深入理解 Linux Cgroup 系列(一):基本概念
-
《风的asp系列教程》(第一章 第二节)
-
JetBrains software patch2018系列激活工具一键破解使用教程(免激活)
-
实战SpringCloud响应式微服务系列教程(第一章)
-
Appium python自动化测试系列教程之移动自动化测试的前提(一)
-
《风的asp系列教程》(第一章 第一节)
-
ElasticSearch实战系列一: ElasticSearch集群+Kinaba安装教程