RabbitMq笔记

RabbitMq笔记

Scroll Down

1、交换器

交换器

2、队列、绑定

队列、绑定

3、消费者

消费者

4、运行机制

运行机制

5、Exchange类型

1、Direct

发送消息的路由键routing key 和绑定规则中鄂锭binding key 完全一致时,交换器就将消息发送到对应的消息队列中。这就是典型的点对点发送模式

Direct

2、Fanout

当消息抵达交换器后,交换器会将消息发送到和他绑定的所有消息队列中,不会分析路由键,这很像广播。这中发送消息的速度是最快的。

Fanout

3、Topic

当消息到达交换器后,交换器会匹配队列和路由键,只有模糊匹配成功的队列才会接收到消息。

Topic

6、Springboot+rabbitmq

【1】application中添加开启基于注解的RabbitMQ模式

@EnableRabbit

【2】代码记录

/**
 * rabbitmq 自动配置
 *  1、RabbitAutoConfiguration
 *  2、有自动配置了连接工厂ConnectionFactory
 *  3、RabbitProperties 封装了RabbitMq的配置
 *  4、RabbitTemplate:给RabbitMQ发送和接收消息
 *  5、AmqpAdmin:RabbitMQ 系统管理组件
 *        AmqpAdmin:创建和删除   消息队列、交换器、绑定规则
 *  6、@EnableRabbit +  RabbitListener 监听消息队列中的内容
 *
 * */
@Autowired
    RabbitTemplate rabbitTemplate;
    @Autowired
    AmqpAdmin amqpAdmin;

    @Test
    public void createExchange(){
        //创建交换器
        //Exchange exchange=new DirectExchange("amqpadmin");
        //amqpAdmin.declareExchange(exchange);
        //创建队列
        //Queue queue=new Queue("amqpadmin.queue",true);
        //amqpAdmin.declareQueue(queue);
        //创建绑定规则
        //Binding binding=new Binding("amqpadmin.queue",Binding.DestinationType.QUEUE,
         //       "amqpadmin.exchange","amqp.haha",null);
        //amqpAdmin.declareBinding(binding);
    }


    /**
     * 1、单播(点对点)
     *  如何将数据自动的转为json发送出去?
     *     定义自己的消息 MessageConverter
     * */
    @Test
    public void contextLoads() {
        //自已构造要给Message 定义消息体和消息头
        //rabbitTemplate.send(exchage,routekey,message);
        //只需要传入发送的对象,自动序列化发送给rabbitmq
        //rabbitTemplate.convertAndSend(exchage,routekey,object);
        //对象被默认序列化发送出去
        Book book=new Book("44","44");
        rabbitTemplate.convertAndSend("exdirect","dirque",book);
    }
    //接收数据
    @Test
    public void receive(){
        Object o = rabbitTemplate.receiveAndConvert("dirque");
        System.out.println(o.getClass());
        System.out.println(o);
    }

    /**
     * 广播
     * */
    @Test
    public void sendMsg(){
        rabbitTemplate.convertAndSend("exchange.finout","",new Book("红楼梦","曹雪芹"));
    }

【3】config

import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyAMQPConfig {

    @Bean
    public MessageConverter messageConverter(){
        return new Jackson2JsonMessageConverter();
    }
}