转载:
什么是中间件?_哪 吒的博客-CSDN博客_中间件是什么意思
一、什么是中间件?
1、百度百科
中间件是介于应用系统和系统软件之间的一类软件,它使用系统软件所提供的基础服务(功能),衔接网络上应用系统的各个部分或不同的应用,能够达到资源共享、功能共享的目的。目前,它并没有很严格的定义,但是普遍接受IDC的定义:中间件是一种独立的系统软件服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。
//理解中间件,类似进程间通信,如socket,比如,两台不同系统的电脑间通信,一台linux系统,一台windows系统,二者通过tcp/ip协议通信。
//从上述定义看,可以理解为tcp/ip服务。
从这个意义上可以用一个等式来表示中间件:中间件=平台+通信,这也就限定了只有用于分布式系统中才能叫中间件,同时也把它与支撑软件和实用软件区分开来。
简而言之,中间件是基于TCP/IP协议,遵循一定规范的。
2、中间件的特性
互通性、跨平台性、持久性、高可扩展性。
背后遵循TCP/IP协议,但有时并不能满足业务场景的需求,因此要在TCP/IP协议的基础上构建自己的协议,比如AMQP协议,AMQP协议是rabbitMq的默认协议,包括在信息头中增加mark,消息内容标签、队列名、交换机名、ip、连接对象内存的一些信息。
3、中间件的作用
屏蔽操作系统的复杂性,屏蔽技术之间的局限性,使框架更加灵活。
4、什么时候使用中间件
选择中间件的时候,一定是业务的驱使,项目的驱动,一定要思考到底要不要使用,不要盲目的选择与跟从,如果使用不当,则会造成学习成本的浪费、人员结构的复杂化、维护和服务器成本的加剧。
MySQL其实就是一个应用广泛的中间件。
二、什么是协议
1、所谓协议
计算机底层操作系统和应用程序通讯时共同遵守的一组规定,只有遵循共同的约定和规范,系统和底层操作系统之间才能相互交流。
和一般的网络应用程序的不同之处是,协议主要负责数据的接收和传递,所以性能比较高。
协议对数据格式和计算机之间交换数据都必须遵守规范。
2、网络协议的三要素
语义
语义是解释控制信息每个部分的意义。它规定了需要发出何种控制信息,以及完成的动作与做出什么样的响应。
语法
语法是用户数据与控制信息的结构与格式,以及数据出现的顺序。
时序
时序是对事件发生顺序的详细说明。
3、为什么消息中间件不直接使用http协议?
因为http请求报文头和响应报文头是比较复杂的,包含了cookie,数据的加密解密,状态码,响应码等附加的功能,但是对于一个消息而言,我们并不需要这么复杂,也没有这个必要,因为rabbitmq只是负责数据传递、存储、分发就够了,一定要追求高性能,尽量简洁、快速。
http大部分都是短连接,在实际的交互过程中,一个请求到响应很可能会被中断,中断以后也不会持久化,就会造成数据的丢失。这样就不适合在消息中间件中使用,因为消息中间件是一个长期的获取信息的过程,如果出现问题或故障,要进行持久化,目的是为了保证消息和数据的高可靠和高可用。
4、AMQP协议
AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。
特性:
支持分布式事务
支持消息的持久化
高性能和高可靠的消息处理
三、消息队列持久化
持久化,简单的说就是将数据存入磁盘,而不是存在内存中,不会因为服务器的重启而消失,使护具能够永久保存。
rabbitmq是以文件存储的形式进行持久化的。
四、消息的分发策略
rabbitmq支持发布订阅、轮询分发、公平分发、重发、消息拉取。
五、消息队列高可用和高可靠
集群保证高可用;
持久化保证高可靠;
往期精彩内容:
Java知识体系总结
Spring框架总结
超详细的springBoot学习笔记
常见数据结构与算法整理总结
Java设计模式:23种设计模式全面解析
Java面试题总结(附答案)
Linux知识体系总结
Redis知识体系总结
————————————————
版权声明:本文为CSDN博主「哪 吒」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/guorui_java/article/details/117266971
介于操作系统和应用程序之间的产品,中间件简单解释,你可以理解为面向信息系统交互,集成过程中的通用部分的集合,屏蔽了底层的通讯,交互,连接等复杂又通用化的功能,以产品的形式提供出来,系统在交互时,直接采用中间件进行连接和交互即可,避免了大量的代码开发和人工成本。其实,理论上来讲,中间件所提供的功能通过代码编写都可以实现,只不过开发的周期和需要考虑的问题太多,逐渐的,这些部分,以中间件产品的形式进行了替代。比如常见的消息中间件,即系统之间的通讯与交互的专用通道,类似于邮局,系统只需要把传输的消息交给中间件,由中间件负责传递,并保证传输过程中的各类问题,如网络问题,协议问题,两端的开发接口问题等均由消息中间件屏蔽了,出现了网络故障时,消息中间件会负责缓存消息,以避免信息丢失。相当于你想给美国发一个邮包,只需要把邮包交给邮局,填写地址和收件人,至于运送过程中的一系列问题你都不需要关心了
作者:FireJones
链接:https://www.zhihu.com/question/19730582/answer/16390709
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
//个人理解:中间件,屏蔽了平台、屏蔽了开发语言(开发接口问题)