作用:提升系统异步通信,扩展解耦能力。
系统发送消息到消息代理接管,消息代理保证消息传送到指定目的地。
主要的两种形式:
1.队列(Queue):点对点通信
每一条消息只有一个接收者获取,当某条消息被一个接收者获取后,该消息将被移出队列,其余接收者无法获取该消息。
2.发布(Publish)/ 订阅(Subscribe)
多个接收者监听(订阅)了这个队列,队列中的新消息将到达每一个接收者,订阅了这个队列的接收者将同时收到消息。
JMS(Java消息服务) | AMQP(高级消息队列协议) | |
定义 | Java API | 网络线级协议 |
跨语言 | 否 | 是 |
跨平台 | 否 | 是 |
消息模型 |
1.点对点 2.发布/订阅 |
1.direct exchange(点对点) 2.fanout exchange(发布/订阅) 3.topic exchange(发布/订阅) 4.headers exchange(发布/订阅) 5.system exchange(发布/订阅) 本质上讲,后四种都属于发布/订阅,仅在 路由机制上作了更加详细的区分 |
支持消息类型 |
1.TextMessage 2.MapMessage 3.BytesMessage 4.StreamMessage 5.ObjectMessage 6.Message(只有消息头和属性) |
byte[] 当实际应用时,有复杂的消息可以将消息序列化 后发送。 |
综合评价 |
JMS定义了Java API层面的标准,在Java 体系中,多个Client均可以通过JMS进行 交互,不需要应用修改代码,但其对跨平台 的支持较差 |
AMQP定义了wire-level层的协议标准,天然具有跨语言、 跨平台的特性。 |
Sping的支持
Spring-jms提供了对JMS的支持 |
Spring-rabbit提供了对AMQP的支持 |
需要ConnectionFactory的实现类来连接消息代理 |
提供JmsTemplate、RabbitTemplate来发送消息 |
@JmsListener(JMS)、@RabbitListener(AMQP)注解在方法上监听消息代理发布的消息 |
@EnableJms、@EnableRabbit开启支持 |
SpringBoot的支持
starter(启动器) | AutoConfiguration(自动配置类) | |
JMS |
spring-boot-starter-activemq spring-boot-starter-artemis |
JmsAutoConfiguration |
AMQP | spring-boot-starter-amqp | RabbitAutoConfiguration |