个人笔记之rabbitTemplate及amqpTemplate发布模式

rabbitTemplate及amqpTemplate发布模式

  • 不足之处欢迎留言

1、rabbitTemplate和amqpTemplate有什么关系?

  • 源码中会发现rabbitTemplate实现自amqpTemplate接口,使用起来并无区别,需引入spring-boot-starter-amqp依赖。

2、组成

  • 生产者
  • 消息队列
  • 消费者
  • 交换机:
    • 隔离生产者和消息队列,充当二者中间体。
    • 接受相应的消息并绑定到指定队列

3、三种发布模式

  • 根据交换机类型不同,分为3种:
    • Direct<直接>:1对1-----一个消息只能被一个消费者消费
    • Topic<主题>:1对多-----一个消息可以被多个消费者消费
    • Fanout<分列>:广播

4、Direct发布模式

  • 核心依赖及application.properties(除端口外不变)

  • 生产者工程

    • 4.1、创建消息队列

两种方式:

(1)@Configuration和@Bean配置队列conf,指定

         个人笔记之rabbitTemplate及amqpTemplate发布模式_第1张图片

(2)RabbitMQ管理界面手动添加队列

个人笔记之rabbitTemplate及amqpTemplate发布模式_第2张图片

  • 4.2、发送端

API:amqpTemplate.convertAndSend("队列名",“消息内容”)

此处队列名必须与创建的队列一致。

个人笔记之rabbitTemplate及amqpTemplate发布模式_第3张图片

  • 4.3、测试类

个人笔记之rabbitTemplate及amqpTemplate发布模式_第4张图片

  • 消费者工程

  • 4.1、创建消息队列

同上:略

  • 4.2、接收端

@RabbitListener(queues = "direct"):监听器监听指定队列

个人笔记之rabbitTemplate及amqpTemplate发布模式_第5张图片

  • 4.2、启动服务并测试结果

启动消费工程

启动生产工程

启动生产工程中的测试类

结果:消费者打印输出消息内容

5、Topic发布模式

  • 生产者工程

  • 5.1、创建消息队列

API:BindingBuilder.bind(指定队列).to(交换机).with(路由键);

路由键相当于队列名

个人笔记之rabbitTemplate及amqpTemplate发布模式_第6张图片

个人笔记之rabbitTemplate及amqpTemplate发布模式_第7张图片

  • 5.2、发送端:

API:amqpTemplate.convertAndSend("交换机名",“路由键”,“消息内容”)

RabbitMQ将会根据第二个参数去寻找有没有匹配此规则的队列,如果有,则把消息给它,如果有不止一个,则把消息分发给匹配的队列(每个队列都有消息!)

个人笔记之rabbitTemplate及amqpTemplate发布模式_第8张图片

  • 5.3、测试类

个人笔记之rabbitTemplate及amqpTemplate发布模式_第9张图片

  • 消费者工程

  • 5.1、创建消息队列

同上:略

  • 5.2、接收端

个人笔记之rabbitTemplate及amqpTemplate发布模式_第10张图片

  • 5.3、启动服务并测试结果

同上:略

注意:topic模式中只有消费端监听的路由键符合发送端的路由规则(路由键决定)的队列才会收到消息。

6、Fanout发布模式

  • 广播:发送到路由器的消息会使得绑定到该路由器的每一个Queue接收到消息,这个时候就算指定了Key,或者规则(即上文中convertAndSend方法的参数2),也会被忽略!
  • 交换机类型:FanoutExchange
  • API:amqpTemplate.convertAndSend("交换机名",“ ”,“消息内容”);//路由键被忽略
  • 消费端:只要是绑定到该交换机上的都能收到消息。

7、总结

  • SpringBoot很强大,省了很多繁琐的配置,极大的提升了开发效率。
  • 遇到的异常

测试类启动报空指针异常。

  • 解决

@Test注解需要结合@RunWith@SpringBootTest

参考文章:

https://www.cnblogs.com/hlhdidi/p/6535677.html

 

 

 

 

你可能感兴趣的:(个人笔记)