一、消息
消息发送方:生产者
消息接收方:消费者
类型:
同步消息
异步消息
![](https://img-blog.csdnimg.cn/fba67b7f5dba4b6cbdcbd486c73cd494.png)
企业级应用中广泛
使用的三
种异步
消息传递
技术:
JMS(Java Message Service)
AMQP(advanced message queuing protocol)
MQTT(Message Queueing Telemetry Transport)
JMS
JMS
:一个规范,等同于
JDBC
规范 提供了与消息服务相关的
API
接口
JMS
消息
模型:
u
peer-2-peer
:点对点模型
,
消息发送
到一个
队列中,队列保存消息。队列的消息只能被一个消费者消费,或超时。
publish-subscribe
:发布
订阅模型,消息可以被多个消费者消费,生产者和消费者完全独立,不需要感知对方的
存在。
JMS
消息种类:
TextMessage
MapMessage
BytesMessage
StreamMessage
ObjectMessage
Message
(只有消息头和属性
)
JMS
实现
:
ActiveMQ
、
Redis
、
HornetMQ
、
RabbitMQ
、
RocketMQ
(没有完全遵守
JMS
规范)
AMQP
AMQP
:一
种协议(高级消息队列协议,也
是消息
代理规范),规范了网络交换的
数据格式,兼容
JMS。
优点:具有跨平台性,服务器供应商,生产者,消费者可以使用不同的语言来实现。
AMQP消息
模型
direct exchange
fanout
exchange
topic exchange
headers exchange
system exchange
AMQP
消息种类:
byte
AMQP
实现
:
RabbitMQ
、
StormMQ
、
RocketMQ
MQTT
MQTT:
消息队列遥测
传输,专为
小
设备设计
,
是
物联网(
IOT
)生态系统中主要成分
之一
二、部分消息中间件
ActiveMQ
RabbitMQ
RocketMQ
Kafka(一种高吞吐量的分布式发布订阅消息系统,提供实时消息功能)
消息案例——订单短信通知
订单Service接口
消息Service接口
订单Controller
消息Controller
未使用消息时:
订单接口实现
消息接口实现
ActiveMQ
启动服务:activemq.bat
访问服务器:http://127.0.0.1:8161/
服务端口:61616,管理后台端口:8161
初次访问用户名&密码:admin
SpringBoot整合ActiveMQ
# 导入SpringBoot整合ActiveMQ坐标
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
# 配置ActiveMQ(采用默认配置)
spring:
activemq:
broker-url: tcp://localhost:61616
jms:
pub-sub-domain: true
template:
default-destination: tttttt
Service实现
生产与消费消息(使用默认消息存储队列)
生产与消费消息(指定消息存储队列)
使用消息监听器对消息队列监听
流程性业务消息消费完转入下一个消息队列
RabbitMQ
启动服务:rabbitmq-service.bat start
关闭服务:rabbitmq-service.bat stop
查看服务状态:rabbitctl status
# 导入SpringBoot整合RabbitMQ坐标
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
# 配置RabbitMQ (采用默认配置)
spring:
rabbitmq:
host: localhost
port: 5672
1.点对点方式 (direct)
Service实现
配置config:定义消息队列
简单的:
![](https://img-blog.csdnimg.cn/de390a6c400541c588f2e7893e5a8922.png)
本次案例:
![](https://img-blog.csdnimg.cn/7e50a88ad5534ebdae0de29c160f240d.png)
使用消息监听器对消息队列监听:
![](https://img-blog.csdnimg.cn/9fbd07bf913d4caa957356841d8fe4cb.png)
2.话题发布方式 (topic)
Service实现
定义消息队列
(topic)
使用消息监听器对消息队列监听
RocketMQ
不同的业务服务器注册到命名服务器,这时生产者与消费者不用连接不同的业务服务器,只需连接命名服务器即可
# 导入SpringBoot整合RocketMQ坐标
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>2.2.1</version>
</dependency>
# 配置RocketMQ (采用默认配置)
rocketmq:
name-server: localhost:9876
producer:
group: group_rocketmq
生产同步消息
生产异步消息
使用消息监听器对消息队列监听
Kafka
# 导入SpringBoot整合Kafka坐标
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
# 配置Kafka (采用默认配置)
spring:
kafka:
bootstrap-servers: localhost:9092
consumer:
group-id: order
生产消息
使用消息监听器对消息队列监听
![](https://img-blog.csdnimg.cn/19908846af834aa0a32f1c81535be047.png)