1.最新理解
使用一个配置类就可以指定使用什么类型的队列
@Bean 产生一个对象归Spring管理。产生这个Bean对象的方法只会调用一次,然后就会放入IOC容器归Spring 管理
@Bean("chooseExchange") public Exchange directExchange() { return ExchangeBuilder.directExchange("amq.direct").durable(true).build(); }
@Bean("choosePlan") public Queue directQueue(){ return new Queue("choosePlan", true, true, true); }
2.原理
RabbitMq拿到消息之后不是直接就放进队列中的,他是先交给交换机,(Exchange(交换器) 有4种类型,不同的类型对应着不同的路由策略:direct(默认),fanout, topic, 和 headers)交换机再根据预先设定的不同绑定( Bindings )策略,来确定要发给哪个队列。
3.有四种模式:fanout,direct,topic,header
fanout:广播模式,消息来了会交给所有队列
direct:指定队列模式,消息来了交给指定队列,其他的队列都收不到
topic:那么这里的主题模式是什么意思呢? 如图所示消息来源有: 美国新闻,美国天气,欧洲新闻,欧洲天气。
如果你想看 美国主题: 那么就会收到 美国新闻,美国天气。
如果你想看 新闻主题: 那么就会收到 美国新闻,欧洲新闻。
如果你想看 天气主题: 那么就会收到 美国天气,欧洲天气。
如果你想看 欧洲主题: 那么就会收到 欧洲新闻,欧洲天气。
- topic:匹配订阅模式,使用正则匹配到消息队列,能匹配到的都能接收到。
- headers:与 direct 类似,只是性能很差,此类型几乎用不到。
4.RABBIT有什么好处
削峰:防止过多 直接落到数据库
异步:非必要的业务逻辑以异步的方式运行,加快响应速度
解耦