ActiveMQ(为什么要使用消息中间件,JMS传输模型)
为什么要使用消息中间件:
同步请求:当客户端向服务器发送一条请求的时候,此时服务器由于网络,或者处理一些比较大的数据的时候,可能有延迟,客户端 会处于一直等待的状态。只有等待服务器返回处理结果,或者请求超时,客户端才能继续执行

因此可以看出同步请求一些场景上面使用有些弊端:客户与服务器对象的生命周期紧密耦合,客户进程和服务对象进程都都必须正常运行;如果由于服务对象崩溃或者网络故障导致用户的请求不可达,客户会受到异常
在实际项目中有项目 A 它产生了 一系列的数据,需要将该数据存放到数据库,但是如果由A 项目 直接 存放到数据库,可能导致A项目执行变慢,所以想将A 项目产生的数据,交由 B 项目 然后由B 项目提交到数据库,B 提交数据库的时候,不管B 执行的时间或者成功失败,不影响A 的运行

实现这种情况,可以使用消息中间件。
什么是消息中间件:
消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。例如:A项目将数据发送给消息服务器,消息服务器将消息存放到队列之中,在合适的时候,消息服务器将消息发送给B 项目
这种模式下,发送和接收是异步的,发送者无需等待; 二者的生命周期未必相同: 发送消息的时候接收者不一定运行,接收消息的时候发送者也不一定运行;
什么是JMS
既然学习消息中间件,用的又是java,所以有必要知道JMS 是什么:JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。可以理解成:JMS是java的消息服务,JMS的客户端之间可以通过JMS服务进行异步的消息传输
JMS可以看成一种技术规范,接口
JMS支持两种消息模型:
点对点消息模型:
消息队列:存放消息(可以看成是一个地址)
生产者:产生消息的一端
消费者:接受消息的一端
生产者将消息发送到队列,消费者从队列中获取消息消费

点对点的特点:
1.生产者生产的消息只能被一个消费者消费,消费成功以后,则将该消息从队列中清除
2.生产者和消费者在时间上面没有什么关联,生产者生产消息的时候,消费者 可以不再,消费者消费消息的时候,不需要关注生产者是否存在
3.接收者在成功接收消息之后需向队列应答成功
发布订阅消息模型:
主题
发布者
订阅者
发布者将消息发布到主题中,订阅者订阅主题(可以有多个订阅者)

发布订阅特点:
1.每个消息可以有多个消费者
2.发布者和订阅者之间有时间上的依赖性。针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息,而且为了消费消息,订阅者必须保持运行的状态。为了缓和这样严格的时间相关性,JMS允许订阅者创建一个可持久化的订阅。这样,即使订阅者没有被激活(运行),它也能接收到发布者的消息。
如何理解 点对点 和点对消费时候的时间关联性:
点对点消息模型:生产者 生产消息存放到队列以后,如果消费者者此时 没有开启,运行。则消息不会被消费,会保存到队列之中,消费者 开启运行以后,则会从队列中拉取消息进行消费,正常情况,这条消息是保证会被消费者消费。
发对订阅:发布者发布消息的时候,订阅者 订阅了主题,还必须保证在运行,如果没有开启运行,则不会消费到这条消息,即使开启运行以后,也没法在消费该消息了。
如何选择JMS 哪种消息模型 进行传输消息:
如果你希望发送的每个消息都应该被成功处理的话,那么你需要点对点模式。
如果你希望发送的消息可以不被做任何处理、或者被一个消息者处理、或者可以被多个消费者处理的话,那么可以采用发布/订阅模型
在JMS中,消息的产生和消息是异步的。对于消费来说,JMS的消息者可以通过两种方式来消费消息。
同步消费:
订阅者或接收者调用receive方法来接收消息,receive方法在能够接收到消息之前(或超时之前)将一直阻塞
异步 消费:
订阅者或接收者可以注册为一个消息监听器。当消息到达之后,系统自动调用监听器的onMessage方法。
消息中间件使用场景:
用户注册账号 服务器将数据存入数据库,然后在给用户发送短信或者邮件

设想 可以使用多线程技术:在创建一个线程来负责发送注册邮件,但是 如果发送失败 则没有后续的补偿机制。
此时可以考虑使用 消息中间件

从这样来看,使用消息中间件 可以降低响应的时间。
所以 学习 消息中间件是当前需要掌握的一种技能,消息中间件有很多产品 例如:RabbitMQ,Redis,ActiveMQ,Kafka/Jafka,学习一两种 傍身,讲述ActiveMQ的使用
ActiveMQ(为什么要使用消息中间件,JMS传输模型)的更多相关文章
- 以ActiveMQ为例JAVA消息中间件学习【1】
前言 在慢慢的接触大型的javaweb的项目就会接触到很多的中间件系统. 其中消息中间件在很多场景下会被运用. 这里主要就对最近所学习到的消息中间件知识做一个笔记,为以后的实际运用打下一个良好的基础. ...
- ActiveMQ安装与入门程序 & JMS的消息结构
1.Activemq安装 直接到官网下载:记住apache的官网是域名反过来,比如我们找activemq就是activemq.apache.org. 最新版本要求最低的JDK是8,所以最好在电脑装多个 ...
- Windows7 64位环境6sv2.1大气传输模型修改源码添加国产高分卫星GF-1 GF-2光谱响应支持
下面开始添加国产卫星光谱响应的支持: 以下主要参考文章“6S大气传输模型修改源码添加.自定义卫星光谱响应(以HJ-1B CCD为例)”网址:http://blog.csdn.net/sam92/art ...
- JMS编程模型
(1) ConnectionFactory创建Connection对象的工厂,针对两种不同的jms消息模型,分别有QueueConnectionFactory和TopicConnectionFacto ...
- 传输模型,网络层次划分,三次握手,四次挥手,IP与端口,套接字socket
了解套接字之前,需要先了解基本的传输模型 其次,还需要了解网络的七层划分和四层结构 在python中,数据链路层相当于硬件层,python不需要了解,只用在传输层进行学习就足够了 其中,传输层分为TC ...
- ActiveMQ( 一) 同步,异步,阻塞 JMS 消息模型
同步请求:浏览器 向服务器 发送一个登录请求,如果服务器 没有及时响应,则浏览器则会一直等待状态,直至服务器响应或者超时. 异步请求:浏览器 向服务器 发送一个登录请求,不管服务器是否立即响应,浏览器 ...
- ActiveMQ消息队列从入门到实践(1)—JMS的概念和JMS消息模型
1. 面向消息的中间件 1.1 什么是MOM 面向消息的中间件,Message Oriented Middleware,简称MOM,中文简称消息中间件,利用高效可靠的消息传递机制进行平台无关的数据交流 ...
- ActiveMQ下载与安装(消息中间件JMS)
下载 官方网站下载:http://activemq.apache.org/ 1.3.2安装(Linux) (1)将apache-activemq-5.12.0-bin.tar.gz 上传至服务器 (2 ...
- ActiveMQ 笔记(三)JMS规范和落地产品、小知识Broker
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.JMS规范概述 1.JavaEE 概述及主要核心规范 JavaEE是一套使用Java进行企业级应用开 ...
随机推荐
- linux下怎么判断网卡速率?
我们都知道ifconfig -a 可以列出所有网卡,但是怎么判读是千兆网卡还是百兆网卡呢? 1. 判断是千兆网卡还是百兆网卡 ethtool ethx 查看支持的速率 实际网卡速率可以看Speed 1 ...
- Django REST framewor
4.1 RESTfull 4.1.1.前后端不分离 前端看到什么效果,由后端决定,前端页面看到的效果是有后端控制的 前后端耦合度很高 比较适合纯网页设计,如果有APP,还需要开发APP后端借口 4 ...
- python初学之缓存清理:完全相同的代码与环境但是其中一个文件可以执行成功,一个执行不成功
在使用python写接口测试脚本时,想要引入logging模块来在控制台输出当前执行进度日志,但是遇到了奇葩问题,困扰了一整个下午: 代码如下: __author__ = 'test'#!/usr/b ...
- 路径定义前+r
定义文件路径时前面加个r 例如 firstfolder = r"C:\Users\1261\Desktop\" 不对其中的符号进行转义
- linux怎么实时查看目录下是否有文件生成
inotify-tools 是为linux下inotify文件监控工具提供的一套c的开发接口库函数,同时还提供了一系列的命令行工具,这些工具可以用来监控文件系统的事件. inotify-tools是用 ...
- AI之旅(6):神经网络之前向传播
前置知识 求导 知识地图 回想线性回归和逻辑回归,一个算法的核心其实只包含两部分:代价和梯度.对于神经网络而言,是通过前向传播求代价,反向传播求梯度.本文介绍其中第一部分. 多元分类:符号转换 ...
- jmeter 报错Error in NonGUIDriver java.lang.IllegalArgumentException: Report generation requires csv output format, check 'jmeter.save.saveservice.output_format' property
设置jmeter报个的时候报下面错 只要细心看问题就是把它jmeter.save.saveservice.output_format'的格式改为csv就对 这个属性是在jmeter.propertie ...
- C#实现按键计算器功能2(增强版)
1. 实验目的 ( 1)熟悉C#语言的使用和语法知识 2. 实验要求 (1)设计简单的含交互界面的计算器软件,具有较强的用户体验感. (2)使用C#语言进行编程,创建窗体应用程序. (3)实 ...
- MySQL-02-进阶
大纲 1)数据约束 2)数据库设计(表设计) 3)存储过程 4)触发器 5)mysql权限问题 数据约束 2.1什么数据约束 对用户操作表的数据进行约束 2.2 默认值 作用: 当用户对使用默认值的字 ...
- Kali Linux Web后门工具、Windows操作系统痕迹清除方法
Kali Linux Web后门工具 Kali的web后门工具一共有四款,今天只介绍WebaCoo 首先介绍第一个WeBaCoo(Web Backdoor Cookie) WeBaCoo是一款隐蔽的脚 ...