RabbitMQ入门基础
一、快速入门
RabbitMQ被广泛应用于分布式系统中,以实现不同组件或服务之间的异步通信。
MQ消息队列,先进先出,也就是异步调用中的Broker。
1.1同步调用的优势是什么?
- 时效性强,等待到结果后才返回。
同步调用的问题是什么?
- 拓展性差
- 性能下降
- 级联失败问题
1.2异步调用优势?
- 接触耦合,扩展性强
- 无需等待,性能好
- 故障隔离
- 缓存消息,流量削峰填谷
异步调用的问题是什么?
- 不能立即得到调用结果,时效性差
- 不确定下游业务执行是否成功
- 业务安全依赖于Broker(代理)的可靠性
1.3RabbitMQ的整体框架及核心概念
- publisher:消息发送者
- consumer:消息的消费者
- queue:队列,存储消息
- exchange:交换机,负责路由消息
- virtual-hose:虚拟主机,起到数据隔离的作用
1.4java客户端-快速入门
SpringAMQP如何收发消息?
① 引入spring-boot-starter-amqp依赖
② 配置rabbitmq服务端信息
③ 利用RabbitTemplate发送消息
④ 利用@RabbitListener注解声明要监听的队列,监听消息
二、WorkQueue
Work queue,任务模型,简单来说就是让多个消费者绑定到一个队列,共同消费队列中的消息。
work模型的使用
- 多个消费者绑定到一个队列,可以加快消息处理速度
- 同一条消息只会被一个消费者处理
- 通过设置prefetch来控制消费者预取的消息数量,处理完一条再处理下一条,实现能者多劳
三、Fanout交换机
真正生产环境都会经过exchange来发送消息,而不是直接发送到队列,交换机的类型有以下三种:
- Fanout:广播
- Direct:定向
- Topic:话题
3.1Fanout Exchange 会将接收到的消息广播到每一个跟其绑定的uqeue,所以也叫广播模式。
交换机的作用是什么?
- 接收publisher发送的消息
- 将消息按照规则路由到与之绑定的队列
- FanoutExchange的会将消息路由到每个绑定的队列
四、Direct交换机
Direct Exchange 会将接收到的消息根据规则路由到指定的Queue,因此称为定向路由。
- 每一个Queue都与Exchange设置一个BindingKey
- 发布者发送消息时,指定消息的RoutingKey
- Exchange将消息路由到BindingKey与消息RoutingKey一致的队列
五、Topic交换机
TopicExchange与DirectExchange类似,区别在于routingKey可以是多个单词的列表,并且以.分割。
Queue与Exchange指定BindingKey时可以使用通配符:
- #: 代指0个或多个单词
- *: 代指一个单词
描述下Direct交换机与Topic交换机的差异?
- Topic交换机接收的消息RoutingKey可以是多个单词,以.分割
- Topic交换机与队列绑定时的bindingKey可以指定通配符
- #: 代表0个或多个词
- *: 代表1个词
六、声明队列交换机
SpringAMQP提供了几个类,用来声明队列、交换机及其绑定关系:
- Queue:用于声明队列,可以用工厂类QueueBuilder构建
- Exchange:用于声明交换机,可以用工厂类ExchangeBuilder构建
- Binding:用于声明队列和交换机的绑定关系,可以用工厂类BindingBuilder构建
声明队列、交换机、绑定关系的Bean是什么?
- Queue
- FanoutExchange、DirectExchange、TopicExchange
- Binding
基于@RabbitListener注解声明队列和交换机有哪些常见注解?
- @Queue
- @Exchange
七、消息转换器
建议采用JSON序列化代替默认的JDK序列化,要做两件事情:
在publisher和consumer中都要引入jackson依赖:
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency>
在publisher和consumer中都要配置MessageConverter:
@Beanpublic MessageConverter messageConverter(){return new Jackson2JsonMessageConverter();}
通过以上总结,可快速掌握 RabbitMQ 的核心概念、使用场景及 SpringAMQP 的集成方法,为构建高可靠、高性能的异步通信系统提供基础支持。