ActiveMQ基础之JMS简介和ActiveMQ简介

1 MOM简介

1.1 JMS基础

JMS全称:Java Message Service 中文: Java 消息服务。
JMSJava 的一套API 标准, 最初的目的是为了使应用程序能够访问现有的MOM 系统
MOMMessage Oriented Middleware 的英文缩写, 指的是利用高效可靠的消息传递机制进行平台无关的数据交流, 并基于数据通信来进行分布式系统的集成
常见MOM系统包括ApacheActiveMQ、阿里巴巴的RocketMQIBMMQSeriesMicrosoftMSMQBEARabbitMQ等。(并非全部的MOM系统都遵循JMS规范)
基于JMS 实现的MOM, 又被称为 JMS Provider

1.2 消息

消息是在两台计算机间传送的数据单位。消息可以非常简单, 例如只包含文本字符串;也可以更复杂, 可能包含嵌入对象。
消息被发送到队列中。 消息队列是在消息的传输过程中保存消息的容器。 消息队列管理器在将消息从它的源中继到它的目标时充当中间人。
队列的主要目的是提供路由并保证消息的传递; 如果发送消息时接收者不可用, 消息队列会保留消息, 直到可以成功地传递它。

1.2.1 异步解耦

消息队列的主要特点是异步处理, 主要目的是减少请求响应时间解耦。 所以主要的使用场景就是将比较耗时而且不需要即时(同步)返回结果的操作作为消息放入消息队列。 同时由于使用了消息队列,只要保证消息格式不变,消息的发送方和接收方并不需要彼此联系,也不需要受对方的影响, 即解耦和
如:跨系统的异步通信, 所有需要异步交互的地方都可以使用消息队列。 就像我们除了打电话(同步) 以外, 还需要发短信, 发电子邮件(异步) 的通讯方式。

多个应用之间的耦合, 由于消息是平台无关和语言无关的, 而且语义上也不再是函数调用, 因此更适合作为多个应用之间的松耦合的接口。 基于消息队列的耦合, 不需要发送方和接收方同时在线。

在企业应用集成(EAI) 中, 文件传输, 共享数据库, 消息队列, 远程过程调用都可以作为集成的方法。
应用内的同步变异步: 比如订单处理, 就可以由前端应用将订单信息放到队列, 后端应用从队列里依次获得消息处理, 高峰时的大量订单可以积压在队列里慢慢处理掉。 由于同步通常意味着阻塞, 而大量线程的阻塞会降低计算机的性能。

消息驱动的架构(EDA), 系统分解为消息队列,消息制造者和消息消费者, 一个处理流程可以根据需要拆成多个阶段(Stage), 阶段之间用队列连接起来, 前一个阶段处理的结果放入队列, 后一个阶段从队列中获取消息继续处理。

2 ActiveMQ简介

多种语言和协议编写客户端。 语言: Java,C,C++,C#,Ruby,Perl,Python,PHP。 应用协议:OpenWire,Stomp REST,WS Notification,XMPP,AMQP

2.1 优点

  • 完全支持JMS1.1J2EE 1.4规范 (持久化,XA 消息, 事务)
  • Spring 的支持, ActiveMQ 可以很容易内嵌到使用 Spring 的系统里面去
  • 通过了常见 J2EE 服务器(如 Geronimo,JBoss 4,GlassFish,WebLogic)的测试, 其中通过JCA 1.5 resource adaptors的配置, 可以让 ActiveMQ 可以自动的部署到任何兼容 J2EE 1.4 商业服务器上
  • 支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
  • 支持通过 JDBCjournal 提供高速的消息持久化
  • 从设计上保证了高性能的集群, 客户端-服务器, 点对点支持 Ajax
  • 支持与 Axis 的整合, WebServices
  • 可以很容易的调用内嵌 JMS provider, 进行测试

2.2 名称解释

2.2.1 Destination

目的地, JMS Provider(消息中间件) 负责维护, 用于对 Message 进行管理的对象。MessageProducer 需要指定 Destination才能发送消息,MessageConsumer 需要指定 Destination才能接收消息。

2.2.2 Producer

消 息 生成 者 (客 户 端、 生 成 消 息 ), 负 责 发送 Message 到 目 的地 。 应 用 接口 为MessageProducer。 在 JMS 规范中, 所有的标准定义都在javax.jms 包中。

2.2.3 Consumer(Receiver)

消息消费者(处理消息), 负责从目的地中消费(处理|监听|订阅)Message。 应用接口为 MessageConsumer

2.2.4 Message

消息(Message), 消息封装一次通信的内容。常见类型有: StreamMessage、BytesMessage、TextMessage、 ObjectMessage、 MapMessage

2.2.5 ConnectionFactory

链接工厂, 用于创建链接的工厂类型。
注意, 不能和 JDBC 中的 ConnectionFactory混淆。

2.2.6 Connection

链接. 用于建立访问 ActiveMQ 连接的类型, 由链接工厂创建.
注意, 不能和JDBC中的Connection 混淆。

2.2.7 Session

会话, 一次持久有效有状态的访问. 由链接创建. 是具体操作消息的基础支撑。

2.2.8 Queue & Topic

Queue 是队列目的地, Topic 是主题目的地。 都是 Destination 的子接口。
Queue特点: 队列中的消息, 默认只能由唯一的一个消费者处理。 一旦处理消息删除。
Topic 特点: 主题中的消息, 会发送给所有的消费者同时处理。 只有在消息可以重复处理的业务场景中可使用。

2.2.9 PTP

Point to Point:点对点消息模型。 就是基于 Queue 实现的消息处理方式。

2.2.10 PUB & SUB

Publish & Subscribe : 消息的发布/订阅模型。 是基于Topic实现的消息处理方式

发布了334 篇原创文章 · 获赞 186 · 访问量 31万+

猜你喜欢

转载自blog.csdn.net/u012060033/article/details/104397054