同步请求:浏览器 向服务器 发送一个登陆请求,若是服务器 没有及时响应,则浏览器则会一直等待状态,直至服务器响应或者超时。java
异步请求:浏览器 向服务器 发送一个登陆请求,无论服务器是否当即响应,浏览器不须要等待。数据库
在java中,在多线程的状况,也有同步,异步 阻塞的说法,多线程的状况,加了同步关键字synchronized之后,当一个线程正在执行一个方法的时候,其他线程想要执行该方法则须要等待当前正在执行的线程 执行完之后,这个过程其余线程就是阻塞状态。浏览器
同步请求,浏览器--->服务器,若是服务器有延迟,则 浏览器 会一直等待,等待服务器的响应或者Http超时,若是在一些实际项目中,例如,A 项目调用B 项目,同步请求,B 因为网络缘由或者说查询数据库过慢,致使 A 项目调用超时,则可能A 会重复提交。缓存
同步请求的缺点:超时,阻塞,数据可能重复提交服务器
以上 能够看出:网络
在客户端与服务器进行通信时.客户端调用后,必须等待服务对象完成处理返回结果才能继续执行。客户端与服务器对象的生命周期紧密耦合,客户端进程和服务对象进程都都必须正常运行;若是因为服务对象崩溃或者网络故障致使用户的请求不可达,客户端会受到异常多线程
在这种状况下,可使用消息中间件并发
什么是消息中间件:异步
发送者将消息发送给消息服务器,消息服务器将消息存放到队列中,在合适的时候再将消息转发给接收者,发送者将消息发送给队列的时候,不须要关注接收者是否接受消息,也不须要等待接收者的响应,接收者处理消息的时候,一样也不须要关注 发送者是否正常运行。这种模式下,发送和接收是异步的,发送者无需等(异步通信)高并发
消息中间件的通信方式:JMS
JMS是java的消息服务,JMS的客户端之间能够经过JMS服务进行异步的消息传输。
JMS有两种消息模型:点对点 和点对多(发布订阅)
点对点消息模型
生产者:向队列发送消息的一方(提供接口)
消费者:向队列获取消息的一方(调用接口)
消息队列:存放消息的地方(能够作持久化)
生产者向消息队列发送消息,若是消费者在,则从消息队列获取消息消费,消费成功之后,该消息在队列中清除,若是消费者不在,生产者生成的消息则会缓存到到队列之中 ,根据这个特性,能够知道中间件能够解决高并发,对消息 缓存排队,在高并发的状况下,大量的消息会缓存到队列中,消费者能够根据本身的须要选择一次性消费多少条数据,而不是直接将全部的消息 直接发送给消费者。
点对点模型特色:
因此若是但愿发送的每一个消息都应该被成功处理的话
在点对点中 一个消息只能被一个消费者消费,一旦消费成功,该消息就从队列中清除,若是不清除,则可能出现重复消费的状况
点对多 (发布与订阅)
发布者:
主题:
订阅者:
客户端将消息发送到主题。多个发布者将消息发送到Topic,系统将这些消息传递给多个订阅者。
点对多特色:
1 .发布者发布到主题的消息能够被多个订阅者订阅消费
发布者和订阅者之间有时间上的依赖性。针对某个主题(Topic)的订阅者,它必须建立一个订阅者以后,才能消费发布者的消息,并且为了消费消息,订阅者必须保持运行的状态。
为了缓和这样严格的时间相关性,JMS容许订阅者建立一个可持久化的订阅。这样,即便订阅者没有被激活(运行),它也能接收到发布者的消息。
若是你但愿发送的消息能够不被作任何处理、或者被一个消息者处理、或者能够被多个消费者处理的话,那么能够采用点对多模型
在JMS中,消息的产生和消息是异步的。对于消费来讲,JMS的消息者能够经过两种方式来消费消息。
○ 同步
订阅者或接收者调用receive方法来接收消息,receive方法在可以接收到消息以前(或超时以前)将一直阻塞
○ 异步
订阅者或接收者能够注册为一个消息监听器。当消息到达以后,系统自动调用监听器的onMessage方法。
能够理解成广播,或者电视的场景