一、消息
1、介绍
使用消息服务中间件可以提升异步通信,解耦能力和进行流量削峰。
消息服务中有两个概念消息代理和目的地。消息的发送者将消息发送至消息代理服务器,由消息代理服务器进行消息管理,使消息能够到达正确的目的地。
两种形式的目的地:
1、队列:点对点通信,一个消息只能被一个接收者接收
2、主题:发布/订阅消息通信,一个消息发布可以被多个订阅者接收
两个消息服务的规范:
1、JMS:JAVA消息服务,ActiveMQ、HornetMQ由JMS实现
2、AMQP:高级消息队列协议,RabbitMQ由AMQP实现
2、RabbitMQ
介绍
Message | 消息,由消息头和消息体组成 |
Publisher | 消息的发送方 |
Exchange | 交换器,接收到消息后分配给对应的队列。有四种类型:direct根据路由key一对一分配,fanout广播每条消息,topic根据路由key模糊查询分配消息, |
Queue | 消息队列,存储消息 |
Binding | 将队列与交换器进行绑定 |
Connection | 网络连接,如TCP连接 |
Channel | 信道,采用多路复用的方式 |
Consumer | 消息从消息队列中取出送达的客户端 |
消息由Publisher 产出,送到消息代理服务器中的Exchange,根据消息中的路由key送到该Exchange对应Binding的Queue中去。取出信息时,通过TCP连接,在Channel中采用多路复用的方式送达Consumer
topic方式的模糊查询:* 匹配一个单词,# 匹配0个或多个单词
整合RabbitMQ
1、可以直接使用网页 host:port 访问RabbitMQ进行操作
2、使用编码的方式
- 导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
- 配置连接
spring:
rabbitmq:
host: 127.0.0.1
port: 5672
username: guest
password: guest
- 使用到两个类RabbitTemplate和AmqpAdmin
RabbitTemplate:发送与接收消息
AmqpAdmin:管理组件,创建Exchange,Queue 和 Binding等
使用RabbitTemplate时涉及到了消息的序列化操作,因为默认采用java的序列化方法所以我们需要自定义一个MessageConverter
- RabbitMQ的消息监听器,消息队列中一有消息则接收消息
主程序上用 @EnableRabbit 开启注解的功能
@RabbitListener(queue = “xx”)选择监听哪个队列
2、任务
异步任务
发送邮件或者处理数据的同时不阻塞线程
- 使用 @EnableAsync 开启注解功能
- 使用 @Async 标记方法
定时任务
定时执行,可用于日志的分析等
- 使用 @EnableScheduling 开启注解功能
- 使用 @Scheduled(cron=“xx”) 标记方法,cron表达式说明执行的时间
邮件任务
- 导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
- 配置 application.properties
## 发件人邮箱
spring.mail.username=xxxxxx@qq.com
## 生成的授权码
spring.mail.password=xxxxxx
## QQ的SMIP地址
spring.mail.host=smtp.qq.com
## 配置安全连接
spring.mail.properties.mail.smtp.ssl.enable=true
- 自动注入 JavaMailSenderImpl,新建消息对象SimpleMailMessage或MimeMessage操作消息内容,发送对象等。由JavaMailSenderImpl对象发送