RabbitMQ概念
异步调用的优势是什么?
耦合度低,扩展性强
异步调用,无需等待,性能好
故障隔离,下游服务故障不影响上游业务
缓存消息,流量削峰填谷
异步调用的问题:
不能立刻得到调用结果,时效性差。
不确定下游业务执行是否成功。
业务安全依赖于Broker的可靠性。
MQ,中文是消息队列,字面来看就是存放消息的队列,也就是异步调用中的Broker。
Work模型的使用:
多个消费者绑定到一个队列,可以加快消息处理速度
同一个消息只会被一个消费者处理
通过设置prefetch来控制消费者预取的消息数量,处理完一条在处理下一条,实现能者多劳。
fanout交换机
fanout Exchange 会将接收到的消息广播到每一个跟其绑定的queue,所以也叫广播模式。
交换机的作用是什么?
接收publisher发送的消息。
将消息按照规则路由到与之绑定的队列
FanoutExchange的会将消息路由到每个绑定的队列。
Diect交换机
Direct Exchange 会将接受到的消息根据规则路由到指定的Queue,因此称为定向路由。
每一个Queue都与Exchange设置一个BindingKey
发布者发送消息时,指定消息的routingKey.
exchange将消息路由到BindingKey与RoutingKey一致的队列。
Topic交换机
TopicExchange与DirectExchange类似,区别在于routingKey可以时多个单词的列表,并且以.分割。
声明队列和交换机
SpingAMQP提供了几个类,用来声明队列、交换机及其绑定关系:
Queue:用于声明队列,可以用工厂类QueueBuilder构建
Exchage:用于声明交换机,可以用工厂类ExchangeBuilder构建
Binding:用于声明队列和交换机的绑定关系,可以用工厂类BindingBuilder构建