ActiveMQ( 一) 同步,异步,阻塞 JMS 消息模型
同步请求:浏览器 向服务器 发送一个登录请求,如果服务器 没有及时响应,则浏览器则会一直等待状态,直至服务器响应或者超时。
异步请求:浏览器 向服务器 发送一个登录请求,不管服务器是否立即响应,浏览器不需要等待。
在java中,在多线程的情况,也有同步,异步 阻塞的说法,多线程的情况,加了同步关键字synchronized以后,当一个线程正在执行一个方法的时候,其余线程想要执行该方法则需要等待当前正在执行的线程 执行完以后,这个过程其他线程就是阻塞状态。
同步请求,浏览器--->服务器,如果服务器有延迟,则 浏览器 会一直等待,等待服务器的响应或者Http超时,如果在一些实际项目中,例如,A 项目调用B 项目,同步请求,B 由于网络原因或者说查询数据库过慢,导致 A 项目调用超时,则可能A 会重复提交。
同步请求的缺点:超时,阻塞,数据可能重复提交
以上 可以看出:
在客户端与服务器进行通讯时.客户端调用后,必须等待服务对象完成处理返回结果才能继续执行。客户端与服务器对象的生命周期紧密耦合,客户端进程和服务对象进程都都必须正常运行;如果由于服务对象崩溃或者网络故障导致用户的请求不可达,客户端会受到异常
在这种情况下,可以使用消息中间件
什么是消息中间件:
发送者将消息发送给消息服务器,消息服务器将消息存放到队列中,在合适的时候再将消息转发给接收者,发送者将消息发送给队列的时候,不需要关注接收者是否接受消息,也不需要等待接收者的响应,接收者处理消息的时候,同样也不需要关注 发送者是否正常运行。这种模式下,发送和接收是异步的,发送者无需等(异步通讯)
消息中间件的通讯方式:JMS
JMS是java的消息服务,JMS的客户端之间可以通过JMS服务进行异步的消息传输。
JMS有两种消息模型:点对点 和点对多(发布订阅)
点对点消息模型
生产者:向队列发送消息的一方(提供接口)
消费者:向队列获取消息的一方(调用接口)
消息队列:存放消息的地方(可以做持久化)
生产者向消息队列发送消息,如果消费者在,则从消息队列获取消息消费,消费成功以后,该消息在队列中清除,如果消费者不在,生产者生成的消息则会缓存到到队列之中 ,根据这个特性,可以知道中间件可以解决高并发,对消息 缓存排队,在高并发的情况下,大量的消息会缓存到队列中,消费者可以根据自己的需要选择一次性消费多少条数据,而不是直接将所有的消息 直接发送给消费者。
点对点模型特点:
- 每个消息只有一个消费者(即一旦被消费,消息就不再在消息队列中)
- 发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息之后,不管接收者有没有正在运行,它不会影响到消息被发送到队列
- 接收者在成功接收消息之后需向队列应答成功
所以如果希望发送的每个消息都应该被成功处理的话
在点对点中 一个消息只能被一个消费者消费,一旦消费成功,该消息就从队列中清除,如果不清除,则可能出现重复消费的情况
点对多 (发布与订阅)
发布者:
主题:
订阅者:
客户端将消息发送到主题。多个发布者将消息发送到Topic,系统将这些消息传递给多个订阅者。
点对多特点:
1 .发布者发布到主题的消息可以被多个订阅者订阅消费
发布者和订阅者之间有时间上的依赖性。针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息,而且为了消费消息,订阅者必须保持运行的状态。
为了缓和这样严格的时间相关性,JMS允许订阅者创建一个可持久化的订阅。这样,即使订阅者没有被激活(运行),它也能接收到发布者的消息。
如果你希望发送的消息可以不被做任何处理、或者被一个消息者处理、或者可以被多个消费者处理的话,那么可以采用点对多模型
在JMS中,消息的产生和消息是异步的。对于消费来说,JMS的消息者可以通过两种方式来消费消息。
○ 同步
订阅者或接收者调用receive方法来接收消息,receive方法在能够接收到消息之前(或超时之前)将一直阻塞
○ 异步
订阅者或接收者可以注册为一个消息监听器。当消息到达之后,系统自动调用监听器的onMessage方法。
可以理解成广播,或者电视的场景
ActiveMQ( 一) 同步,异步,阻塞 JMS 消息模型的更多相关文章
- (转)同步异步,阻塞非阻塞 和nginx的IO模型
同步异步,阻塞非阻塞 和nginx的IO模型 原文:https://www.cnblogs.com/wxl-dede/p/5134636.html 同步与异步 同步和异步关注的是消息通信机制 (sy ...
- 哪5种IO模型?什么是select/poll/epoll?同步异步阻塞非阻塞有啥区别?全在这讲明白了!
系统中有哪5种IO模型?什么是 select/poll/epoll?同步异步阻塞非阻塞有啥区别? 本文地址http://yangjianyong.cn/?p=84转载无需经过作者本人授权 先解开第一个 ...
- {Python之进程} 背景知识 什么是进程 进程调度 并发与并行 同步\异步\阻塞\非阻塞 进程的创建与结束 multiprocess模块 进程池和mutiprocess.Poll
Python之进程 进程 本节目录 一 背景知识 二 什么是进程 三 进程调度 四 并发与并行 五 同步\异步\阻塞\非阻塞 六 进程的创建与结束 七 multiprocess模块 八 进程池和mut ...
- 操作系统介绍-操作系统历史,IO,进程的三态,同步异步阻塞非阻塞
1.操作系统历史 2.进程,IO,同步异步阻塞非阻塞 操作系统历史: 手工操作: 1946年第一台计算机诞生--20世纪50年代中期,计算机工作还在采用手工操作方式.此时还没有操作系统的概念. 手工操 ...
- Java IO 学习(一)同步/异步/阻塞/非阻塞
关于IO,同步/异步/阻塞/非阻塞,这几个关键词是经常听到的,譬如: “Java oio是阻塞的,nio是非阻塞的” “NodeJS的IO是异步的” 但是这些东西听多了就容易迷糊,比方说同步是否就是阻 ...
- 进程&线程 同步异步&阻塞非阻塞
2015-08-19 15:23:38 周三 线程 线程安全 如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码 线程安全问题都是由全局变量及静态变量引起的 若每个线程中对 ...
- python 并发编程 操作系统 进程 并发.并行 及 同步/异步,阻塞/非阻塞
操作系统: 多道技术背景: 提高工作效率(充分利用IO阻塞的时间) 同时执行多个任务 多道技术 空间复用:充分的利用内存空间 时间复用:充分利用IO阻塞时间 分时系统: 并发:提高了程序的工作效率 两 ...
- GIL 线程池 进程池 同步 异步 阻塞 非阻塞
1.GIL 是一个全局解释器锁,是一种互斥锁 为什么需要GIL锁:因为一个python.exe进程中只有一份解释器,如果这个进程开启了多个线程都要执行代码 多线程之间要竞争解释器,一旦竞争就有可能出现 ...
- python 之 并发编程(进程池与线程池、同步异步阻塞非阻塞、线程queue)
9.11 进程池与线程池 池子使用来限制并发的任务数目,限制我们的计算机在一个自己可承受的范围内去并发地执行任务 池子内什么时候装进程:并发的任务属于计算密集型 池子内什么时候装线程:并发的任务属于I ...
随机推荐
- springboot +mybatis 搭建完整项目
springboot + mybatis搭建完整项目 1.springboot整合mybatis注解版 转:https://blog.csdn.net/u013187139/article/detai ...
- 5--Postman上传文件
请求: charles抓到请求信息: request: --21b63bd3-1543-46cf-ab25-eaa5adf82688Content-Disposition: form-data; na ...
- CMD如何快速打开当前文件夹窗口
/******************************************************************************* * CMD如何快速打开当前文件夹窗口 ...
- [转]如何正确学习JavaScript
原文:How to Learn JavaScript Properly(2014-2-7) 学习时长:6-8周 学习前提:中学水平,无需编程经验 更新(2014-1-7) 在Reddit上创建了一个学 ...
- 二、Windows 下 ShellCode 编写初步
第二章.Windows 下 ShellCode 编写初步 (一)shellcode 定义:最先的 Shell 指的是人机交互界面,ShellCode 是一组能完成我们想要的功能的机器代码,通常以十六进 ...
- pycrypto安装各种方法试了,最后这种最快速最方便
需要安装vs,然后按照如下步骤 这个不是在cmd中执行 而是在vs的命令行中执行
- JAVA日常之三
一.Main方法的args参数 args[] 是程序运行前可传入的参数,比如 java HelloWorld a,那么在HelloWorld的main方法里面 args就是{"a" ...
- Python全栈之路----目录
Module1 Python基本语法 Python全栈之路----编程基本情况介绍 Python全栈之路----常用数据类型--集合 Module2 数据类型.字符编码.文件操作 Python全栈之路 ...
- 脚手架方式搭建vue项目
一.首先基于node环境,我想应该每一个前端开发者都应该懂的吧,这里安装运行什么的就不多说了. 搭建成功之后在文件夹的任何(如果是全局的话)一个位置都能按住shift键同时鼠标右键在工具框中就会出来一 ...
- 20164318 毛瀚逸 Exp3 免杀原理与实践
1实验要求 1.1 正确使用msf编码器(0.5分),msfvenom生成如jar之类的其他文件(0.5分),veil-evasion(0.5分),加壳工具(0.5分),使用shellcode编程(1 ...