MQ (message queue)
mq消息队列就是基础队列的中间件
MQ在消息中间件的应用
在一些需要异步调用的服务,和一些不需要遵守强一致性的服务,可以先将服务存入消息队列中,再异步的调用执行
分类
JMS : 适用于java代码的工程 可以传输多种类型的数据
AMQP : 可以适用任何 数据只能是byte[]类型
RabbitMQ(AMQP)
Route _key
Exchange会根据Route_可以 进行模式匹配
Exchange
exchange 有5种模式 : Direct , Fanout , Topic , Header
Direct : 只会匹配和route_key名字相同的消息队列 (点对点模式)
Fanout : 会发送给所有消息队列 (广播模式)
Toic : 会根据key 和消息队列名称关键字进行模糊匹配
Header : 根据头 效率很低
进行测试
创建三种交换机 (head不测试) 创建两个消息队列 全部互相绑定
在fanout交换机中发送消息message
所有消息队列都收到了消息
创建springboot工程 导入rabbitmq依赖
代码中进行测试direct
绑定路由键
使用springboot01键 使用rabbitTemplate发送消息
可以看到springboot01队列收到消息message
使用rabbitTemplate接受消息
可以看到打印出刚刚发送的消息
取到数据后队列会将消息出队
刚才使用converterAndSend方法默认使用java序列化进行传输 若希望使用json进行传输可以更改默认调用的converter
新建一个类 定义一个bean 使用Jackson2JsonMessageConverter
在rabbitmq的自动配置中会自动导入这个bean 不需要额外配置
这次发送一个map数据
可以看到消息是json格式 接受的数据也可以反序列化
使用注解监听消息
创建一个service用来监听消息 打开rabbit注解支持
启动 用测试代码发送消息 可以接受到消息
传入message可以获得整个message的信息 这次监听springboot02的消息
收到信息
使用amqpAdmin代码创建交换机和消息队列
在测试类中注入amqpadmin
运行后再浏览器端口看到绑定成功