消息中间件(一)

SOA(Service-Oriented-Architecture)面向服务架构
组件模型,将应用程序的不同功能单元(服务)通过良好的接口契约联系起来。
通过中立的接口定义
目的是:为服务之间解耦和,提高灵活性,使得应用程序下的每一个服务都能灵活调整与修改。
既然是提高服务的灵活性,那一定是业务驱动的
特点:
可重用:一个服务可以为多个应用程序或业务流程提供接口服务
松耦合:服务请求者无需知道服务提供者的开发语言和开发平台
明确定义的接口(WSDL):
优势:
服务为精确的业务流程提供灵活性
可以迅速的新建和扩展应用程序和业务流程
重用原来的服务成果,缩短开发周期
降低应用程序的服务的复杂性,降低成本
不替换原有服务,无限增强和补充

面向服务的体系结构中的角色:
服务请求者:所谓服务请求者可以是应用程序、一个功能模块也可以是调用一个服务的另一个服务,请求过程为,请求者对注册中心发起服务查询,通过传输绑定服务,并且执行服务功能。服务请求者根据接口契约来执行服务。
服务提供者:提供一个可通过网络寻址的实体,它接受和执行来自请求者的请求,将自己的访问契约和接口契约发布到注册中心,以便请求者可以发现和访问服务
注册中心:提供服务发现,服务的存储库。
面向服务的体系结构中的操作:
发布:将服务发布到注册中心
查询:其实就是发现服务,到注册中心找到满足要求的服务
绑定和调用:在检索完绑定服务后,根据服务描述中的信息找到服务
面向服务的体系结构中的构件:
服务
服务描述(WSDL Web Service Describe Languge 通过XML的形式):制定服务请求者和服务提供者的交互方式,制定请求和响应的格式。
SOAP:传输层,用来为服务请求者和服务提供者之间传递消息
UDDI:用来注册和查找服务

MOM(Message-Oriented-MiddleWare)面向消息中间件

JMS(Java Message Service) Java消息服务应用程序接口,是java平台中面向MOM的API(消息通信API),绝大多数MOM多支持JMS。

JMS与制造MOM的厂商无关,用来访问消息收发系统,类似于JDBC(Java DataBase Connectivity),JDBC就是用来访问不同的关系型数据库的API。

JMS以消息为对象,消息类型包括:简单文本(TextMessage)、可序列化的对象 (ObjectMessage)、属性集合 (MapMessage)、字节流 (BytesMessage)、原始值流 (StreamMessage),还有无有效负载的消息 (Message)。

JMS规范支持两种消息模型:点对点(Point To Point , queue)(一条消息只供一个消费者使用)和发布/订阅(publish/subscribe,topic)(一条消息可供多个消费者使用)。

点对点模型中,一条消息被一个消费者使用后,移除消息队列,自然实现负载均衡
发布/订阅模型中,消息会被不同的消费者重复使用,所以实现了消费能力线性扩展

RabbitMQ和kafka不支持JMS规范,那他们是如何实现负载均衡的

RabbitMQ实现了AQMP协议,AQMP协议定义了消息路由规则和方式,发布端根据路由规则发送消息到不同的queue,消费者根据queue的名字获取消息,(订阅关系和消费状态保存到服务端)
消费完以后,立即删除,所以支持多订阅时,消息会多个拷贝(占用内容,影响效率)
消费端为推模型

kafka
只支持消息持久化
消费状体和订阅关系保存在服务端
消息消费完后不会立即删除,会保留历史消息。因此支持多订阅时,消息只会存储一份就可以了(节约开销)
消费端为拉模型

你可能感兴趣的:(消息中间件(一))