消息中间件认识
消息中间件是指一类软件,是基于分布式处理的软件,最突出的特点是其网络通信功能
也可认为中间件是位于平台和应用之间的通用服务,这些服务具有标准的程序接口和协议。针对不同的操作系统和硬件平台,可以有符合接口和协议的多种实现
消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成.通过提供消息传递和消息排队模型,可以在分布式环境下扩展进程间的通信.
消息中间件可以即支持同步方式,又支持异步方式。异步中间件比同步中间件具有更强的容错性,在系统故障时可以保证消息的正常传输,异步中间件技术又分为两类:广播方式和发布/订阅
方式。由于发布/订阅方式可以指定哪种类型的用户可以接受哪种类型的消息,更加有针对性,
为什么要使用 ?作用场景
越来越多的企业面临着各种各样的数据集成和系统整合,基于消息的异步处理模型采用非阻塞的调用特性,发送者将消息发送给消息服务器,消息服务器在合适的时候再将消息转发给接收者;
发送和接收是异步的,发送者无需等待,二者的生命周期也可以不必相同,而且发送者可以将消息间接传给多个接收者,大大提高了程序的性能、可扩展性及健壮性,这使得异步处理模型在
分布式应用上比起同步处理模型更具有吸引力。
中间件在操作系统软件,网络和数据库之上,应用软件之下,总的作用是为处于自己上层的应用软件提供运行于开发的环境,帮助用户灵活、高效的开发和集成复杂的应用软件。
优缺点
灵活 在各个应用程序进程中灵活的消息传递,以及对消息持久化处理等
不足就是消息中间件对消息传递还是有不足 如在消息传送失败的时候,重新发送时发送顺序,以及发送的时间效应还存在不足
总的来说,中间件屏蔽了底层操作系统的复杂性,使程序开发人员面对一个简单而统一的开发环境,减少了程序设计的复杂性,将注意力集中与自己的业务上,不必再为程序在不同软件系统
上的移植而重复工作,从而大大减少了技术上的负担。
实现原理
两个应用程序之间通过消息中间件进行消息传递
自己思考的消息中间件问题
流程
消息发布者发送消息到消息中间件,即messageserver通过messageserver对消息的保持处理再发送回执和消息发布者,完成后再与订阅者也就是消息接收者通讯,messageserver投递消息给订
阅者
发布者发送消息到message server,当message server收到消息,首先保存消息,然后发送成功响应给发布者,这样正常情况下发布者会收到message的回执
发送失败时
当网络异常时(网络中断,或者网络延迟),此时messageserver和消息还没有任何关系,发布者会收到发送失败的回执(message client发的,即发布者底层的message依赖的jar包中的网络层
,message client和message server建立socket连接后才可能发送消息),消息投递成功,这个时候发布者的业务处理代码可以根据这个发送失败的回执进行相应的处理:继续发送消息或者忽
略.
当发布者发送消息给message server,message server保存消息时有问题的话,message server会发送一个失败的回执给发布者,此时如果回执发送给发布者的时候,网络异常,这个时候在
发布者这端的message client是有超时设置的,当超时一段时间没有接收到回执消息的时候,message client就认定此次发送是失败了,自己生产失败消息返回给业务代码,再由发布者自行
处理怎么操作。
message server投递给订阅者时,发送不成功的话,message server有超时处理的,超时后会重新发送,重试的策略是时间间隔越来越长的,所以先到达message server的消息不一定在后到
达的消息前面被投递成功。
message server投递给订阅者时,发送成功了,但是订阅者业务处理失败,发送失败回执或者订阅者发送成功回执时网络异常(比如超时)了,message server会认为发送失败,这样就会重
新发送
常用的几种,每种的区别
JMS
jms提供者:连接面向消息中间件的,JMS接口的一个实现。提供者可以是Java平台的JMS实现,也可以是非Java平台的面向消息中间件的适配器。
jms客户:生产或消费基于消息的Java的应用程序或对象。
jms生产者:创建并发送消息的JMS客户。
jms消费者:接收消息的JMS客户。
jms消息:包括可以在JMS客户之间传递的数据的对象
jms队列:一个容纳那些被发送的等待阅读的消息的区域。队列暗示,这些消息将按照顺序发送。一旦一个消息被阅读,该消息将被从队列中移走。
jms主题:一种支持发送消息给多个订阅者的机制。
JMS消息中间件的应用部署一般都是主备两个Server,消息的发送和接收应用平时和主Server相连,有问题时切换到备 Server,主备Server共用公共的存储设备来保存消息。
jms接收端主动接收消息, JMS 消息中间件在 IP 层使用点对点的一对一传输方式
JMS已知的典型应用场景是异步发送邮件
消息队列
消息发送者把需要发送的消息存放在一个容器内,再保存到系统共用空间的消息队列中,本地或异地的消息接收者再从这个队列中去取相应的消息。
消息队列包括有消息队列接口,消息队列管理器,消息队列,消息通道,安全管理
消息包括消息头,消息属性和消息体
消息头包括消息发送目标对象名称,消息发送模式,消息优先级,消息生命期,消息标识等
消息属性则是标准特定于供应商或者特定去程序的可选消息信息,常用于消息的过滤
消息体包含要发送接收者的内容,字节流信息,映射消息,java对象消息,文本消息等
消息发送模式,点对点和订阅模式
点对点:多个发送者,但是只有一个接收者 即多进一出
订阅模式:支持离线发送,定义消息主题,则预定了该主题的接受者都能接收。