1. Java中间件的定义
在Java web开发的演进与进化中,我们对于消息系统,数据库,服务化接口的抽象等,涉及数据分离的过程中,在分离过程中,就会涉及到分离后系统间,数据库间的交互。Java中间件就是处理我们数据间交互,连接数据分离后两个系统间的通信,中间件不属于任何一个开发项目,就是让我们对应系统间或者数据库间数据流通无感知。有点像Linux下的管道。
2. 中间件应用的基本领域与代表
上面说到Java是数据间的中间件,在Java web开发中适用的范围主要应该是下面三个领域:
远程过程调用(RPC:Remote Process Call)和对象访问中间件
主要解决分布式环境下应用的互相访问问题,这也是支撑应用服务化功能的基础。
关于远程服务框架中间件,国内目前较多应用的是阿里巴巴的开源分布式服务框架Dubbo。其原理如图:
消息队列中间件
主要解决应用之间的消息传递、解耦、异步的问题。
消息队列中间件是一种EDA架构(event driven architecture):通过在低耦合的模块之间传输事件消息来完成模块之间的合作。大型网站中,消息队列采用发布/订阅模式。消息发布者发布消息到消息队列,消息消费者只要对该类消息感兴趣,就可以订阅该消息,对其他的业务没有任何的影响。其原理如图:
目前常用的消息队列产品为Apache的ActiveMQ,RabbitMQ、RocketMQ、Kafka等。
分布式服务框架和分布式消息队列是系统模块化之后主要的2种聚合方式。
数据访问中间件
主要解决应用访问数据库的共性问题的组件 。
例如:数据访问中间件就是我们使用数据库指定的数据驱动,例如:ODBC JDBC,以 JDBC 为例,数据库本地维护了一个数据访问中间件,我们在访问数据库的时候,配置的地址其实是直接连接到JDBC这个数据访问中间件,如果我们执行查询数据,或者对数据库的操作都是通过JDBC来连接数据库,然后通过JDBC查询完成数据库以后再返回给我们应用程序。作为中间件,查询过程对于我们是不可知的。