消息中间件(一)–介绍

存储架构 2018-06-20 阅读原文

消息中间件(一)--介绍

一、为什么使用消息中间件

1.通过服务调用让其它系统感知事件发生

服务调用的耦合.PNG

2.通过消息中间件解耦服务调用

利用消息中间件解耦服务.PNG

此种方式,用户不需要等待短信服务和积分等其他服务处理完成才返回登录结果了。

3.消息中间件带来的好处

①解耦

②异步

③横向扩展

④安全可靠

⑤顺序保证

二、消息中间件概述

1.什么是中间件?

非底层操作系统软件,非业务应用软件,不是直接给最终用户使用的,不能直接给客户带来价值的软件统称为中间件。

2.什么是消息中间件?

关注于数据的发送和接受,利用高效可靠地异步消息传递机制集成分布式系统

消息中间件.PNG

3.什么是JMS

Java消息服务(Java Message Service)即JMS,是一个Java平台中关于面向消息中间件的API,用于在两个应用程序之间,或在分布式系统中发送消息,进行异步通信。

4.什么是AMQP

AMQP(Advanced Message Queuing Protocol)是一个提供统一消息服务的应用层标准高级消息队列协议,基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。

JMS与AMQP对比.PNG

三、常见消息中间件

1.ActiveMQ

ActiveMQ是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ是一个完全支持JMS1.1和J2EE1.4规范的JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今J2EE应用中间件仍然扮演者特殊的地位。

ActiveMQ特性:

  • 多种语言和协议编写客户端。
    语言:Java、C、C++、C#、Ruby、Perl、Python、PHP
    应用协议:OpenWire、Stomp、REST、WS Notification、XMPP、AMQP
  • 完全支持JMS1.1和J2EE1.4规范(持久化、XA消息、事务)
  • 虚拟主题、组合目的、镜像队列

2.RabbitMQ

RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

RabbitMQ特性:

  • 支持多种客户端
    如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript等
  • AMQP的完整实现(vhost、Exchange、Binding、Routing Key等)
  • 事务支持/发布确认
  • 消息持久化

3.Kafka

Kafka是一种高吞吐量的分布式发布订阅消息系统,是一个分布式、分区的、可高的分布式日志存储服务。它通过一种独一无二的设计提供了一个消息系统的功能。

Kafka特性:

  • 通过O(1)的磁盘数据结构提供消息的持久化,
    这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能
  • 高吞吐量:即使是非常普通的硬件Kafka也可以支持每秒数百万的消息
  • Partition、Consumer Group

各个消息中间件对比.PNG

四、JMS规范

1.Java消息服务定义

Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。

2.JMS相关概念

  • 提供者:实现JMS规范的消息中间件服务器
  • 客户端:发送或接收消息的应用程序
  • 生产者/发布者:创建并发送消息的客户端
  • 消费者/订阅者:接收并处理消息的客户端
  • 消息:应用程序之间传递的数据内容
  • 消息模式:在客户端之间传递消息的模式,JMS中定义了主题和队列两种模式

3.JMS消息模式:队列模式

  • 客户端包括生产者和消费者
  • 队列中的消息只能被一个消费者消费
  • 消费者可以随时消费队列中的消息

队列模型示意图:

队列模型示意图.PNG

4.JMS消息模式:主题模型

  • 客户端包括发布者和订阅者
  • 主题中的消息被所有订阅者消费
  • 消费者不能消费订阅之前就发送到主题中的消息

主题模型示意图:

主题模型示意图.PNG

5.JMS编码接口

  • ConnectionFactory:用于创建连接到消息中间件的连接工厂
  • Connection:代表了应用程序和消息服务器之间的通信链路
  • Destination:指消息发布和接收的地点,包括队列和主题
  • Session:表示一个单线程的上下文,用于发送和接收消息
  • MessageConsumer:由会话创建,用户接收发送到目标的消息
  • MessageProducer:由会话创建,用于发送消息到目标
  • Message:是在消费者和生产者之间传送的对象,消息头,一组消息属性,一个消息体

JMS编码接口之间的关系:

JMS编码接口之间的关系.PNG

简书

责编内容by:简书阅读原文】。感谢您的支持!

您可能感兴趣的

中小型研发团队架构实践三要点 如果你正好处在中小型研发团队…… 中小型研发团队很多,而社区在中小型研发团队架构实践方面的探讨却很少。中小型研发团队特别是 50 至 200 人的研发团队,在早期的业务探索阶段,更多关注业务逻辑,快速迭代以验证商业模式,很少去关注技术架构。 这时如果继续按照原有的架构及研发模式,会出现大量的...
Your API Gateway Should Actually Be a Message Queu... Or Why We Need Digital Osmosis Conventional API Gateways handle difficult things like routing and provide a uniform layer that allows outside applic...
消息队列深入解析 当前使用较多的消息队列有 RabbitMQ 、 ActiveMQ 、 RocketMQ 、 Kafka 等等,我们之前提高的redis数据库也可以实现消息队列,不过不推荐,redis本身设计就不是用来做消息队列的。 使用消息队列的场景和好处 《大型网站技术架构》第四章和第七章均有提到消息...
Understanding Jakarta EE: “I strongly believe ther... © Shutterstock / igor kisselev Confused about what’s going on with Jakarta EE? This interview series is meant to help you navigate through...
Proposed Jakarta EE Design Principles Jakarta EE is slowly emerging, and with it future enterprise specifications. In order to align the different standards and technology that are abou...