橙小张的Java后端学习之路

消息队列之RabbitMQ基础

2017-04-23  本文已影响384人  橙小张

MQ在工作中用途还是比较多的,RabbitMQ又是比较容易上手并且在企业中用的比较多的一种消息服务,本篇文章借鉴于ginobefun的文章和ConanLi的文章,一方面是加深理解,一方面也是补充自己在MQ的不足。

一、AMQP基础

Paste_Image.png

二、RabbitMQ

基础概念

生产者、消费者

队列(queue)

Paste_Image.png
channel.queueDeclare(QUEUE_NAME, durable, exclusive, autoDelete, arguments);

交换器&绑定

Paste_Image.png

RabbitMQ的消息不是直接从生产者发送到队列的,而是要经过交换器然后才可以到达队列:

四种交换器类型:

1、fanout

Paste_Image.png

2、direct

Paste_Image.png

3、topic

Paste_Image.png

4、header

headers类型的Exchange不依赖于routingKey与bindingKey的匹配规则来路由消息,而是根据发送的消息内容中的headers属性进行匹配。在绑定Queue与Exchange时指定一组键值对;当消息发送到Exchange时,RabbitMQ会取到该消息的headers(也是一个键值对的形式),对比其中的键值对是否完全匹配Queue与Exchange绑定时指定的键值对;如果完全匹配则消息会路由到该Queue,否则不会路由到该Queue。

三、SpringBoot+RabbitMQ实战

** Docker环境下安装RabbitMQ**

# 下载rabbitmq的docker镜像和managerment的镜像
docker pull rabbitmq:management
# 启动rabbitmq镜像
docker run -d --name rabbitmq --publish 5671:5671 \
 --publish 5672:5672 --publish 4369:4369 --publish 25672:25672 --publish 15671:15671 --publish 15672:15672 \
rabbitmq:management

介于代码粘贴进来比较多,提供项目GitHub地址,本文提取代码片段进行讲解

项目结构

Paste_Image.png

关键参数

代码段讲解

  @Bean
    public Queue ssdQueue(){
        return new Queue("hello");
    }
@Bean
    public TopicExchange topicExchange() {
        return new TopicExchange("topicExchange");
    }
@Bean
    public FanoutExchange fanoutExchange() {
        return new FanoutExchange("fanoutExchange");
    }
@Bean
    public Binding bindingExchangeTopicA(Queue topicAQueue, TopicExchange topicExchange) {
        return BindingBuilder.bind(topicAQueue).to(topicExchange).with("topic.a");
    }
@Bean
    public Binding bindingExchangeFanoutC(Queue fanoutCQueue, FanoutExchange fanoutExchange) {
        return BindingBuilder.bind(fanoutCQueue).to(fanoutExchange);
    }

四、总结

本片文章主要讲解了以下RabbitMQ的一些基础概念和使用SpringBoot和RabbitMQ整合的几个案例,也是笔者结合博客和官网写的一片总结,总结的也比较基础,没有包括一些高级的内容,例如事务,最终一致性,重复消息和顺序消息的处理等等。

上一篇 下一篇

猜你喜欢

热点阅读