spring boot整合RabbitMQ实例详解(Fanout模式)

 更新时间:2017年04月26日 14:24:46   作者:牛头人  
这篇文章主要介绍了spring boot整合RabbitMQ的实例讲解(Fanout模式),非常不错,具有参考借鉴价值,需要的朋友可以参考下

1.Fanout Exchange介绍

Fanout Exchange 消息广播的模式,不管路由键或者是路由模式,会把消息发给绑定给它的全部队列,如果配置了routing_key会被忽略。

如上图所示,即当使用fanout交换器时,他会将消息广播到与该交换器绑定的所有队列上,这有利于你对单条消息做不同的反应。

例如存在以下场景:一个web服务要在用户完善信息时,获得积分奖励,这样你就可以创建两个对列,一个用来处理用户信息的请求,另一个对列获取这条消息是来完成积分奖励的任务。

2.代码示例

1).Queue配置类

FanoutRabbitConfig.java类:

package com.example.rabbitmqfanout;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class FanoutRabbitConfig {
  //创建队列
  @Bean
  public Queue AMessage() {
    return new Queue("fanout.A");
  }
  //创建队列
  @Bean
  public Queue BMessage() {
    return new Queue("fanout.B");
  }
  //创建队列
  @Bean
  public Queue CMessage() {
    return new Queue("fanout.C");
  }
  //创建Fanout交换器
  @Bean
  FanoutExchange fanoutExchange() {
    return new FanoutExchange("fanoutExchange");
  }
  //将对列绑定到Fanout交换器
  @Bean
  Binding bindingExchangeA(Queue AMessage,FanoutExchange fanoutExchange) {
    return BindingBuilder.bind(AMessage).to(fanoutExchange);
  }
  //将对列绑定到Fanout交换器
  @Bean
  Binding bindingExchangeB(Queue BMessage, FanoutExchange fanoutExchange) {
    return BindingBuilder.bind(BMessage).to(fanoutExchange);
  }
  //将对列绑定到Fanout交换器
  @Bean
  Binding bindingExchangeC(Queue CMessage, FanoutExchange fanoutExchange) {
    return BindingBuilder.bind(CMessage).to(fanoutExchange);
  }  
}

2).消息生产者

FanoutSender.java类:

package com.example.rabbitmqfanout.rabbitmq;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class FanoutSender {
  @Autowired
  private AmqpTemplate rabbitTemplate;
  public void send() {
    String context = "hi, fanout msg ";
    System.out.println("Sender : " + context);
    this.rabbitTemplate.convertAndSend("fanoutExchange","", context);
  }
}

3).消息消费者

FanoutReceiverA.java类:

package com.example.rabbitmqfanout.rabbitmq;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
@RabbitListener(queues = "fanout.A")
public class FanoutReceiverA {
   @RabbitHandler
   public void process(String message) {
     System.out.println("fanout Receiver A : " + message);
  }
}

FanoutReceiverB.java类:

package com.example.rabbitmqfanout.rabbitmq;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
@RabbitListener(queues = "fanout.B")
public class FanoutReceiverB {
  @RabbitHandler
  public void process(String message) {
    System.out.println("fanout Receiver B: " + message);
  }
}

FanoutReceiverC.java类:

package com.example.rabbitmqfanout.rabbitmq;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
@RabbitListener(queues = "fanout.C")
public class FanoutReceiverC {
  @RabbitHandler
  public void process(String message) {
    System.out.println("fanout Receiver C: " + message);
  }
}

4).测试

FanoutTest.java类:

package com.example.rabbitmqfanout.rabbitmq;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class FanoutTest {
  @Autowired
  private FanoutSender sender;
  @Test
  public void fanoutSender() throws Exception {
    sender.send();
  }
}

以上所述是小编给大家介绍的spring boot整合RabbitMQ(Fanout模式),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • java通过Excel批量上传数据的实现示例

    java通过Excel批量上传数据的实现示例

    Excel批量上传是常见的一种功能,本文就来介绍一下java通过Excel批量上传数据的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • Mybatis如何实现关联属性懒加载

    Mybatis如何实现关联属性懒加载

    这篇文章主要介绍了Mybatis如何实现关联属性懒加载的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • java获取一个文本文件的编码(格式)信息

    java获取一个文本文件的编码(格式)信息

    这篇文章主要介绍了java获取一个文本文件的编码(格式)信息,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • Lombok使用@Tolerate实现冲突兼容问题

    Lombok使用@Tolerate实现冲突兼容问题

    这篇文章主要介绍了Lombok使用@Tolerate实现冲突兼容问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • Java使用开源Rxtx实现串口通讯

    Java使用开源Rxtx实现串口通讯

    这篇文章主要为大家详细介绍了Java使用开源Rxtx实现串口通讯,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • Java源码解析CopyOnWriteArrayList的讲解

    Java源码解析CopyOnWriteArrayList的讲解

    今天小编就为大家分享一篇关于Java源码解析CopyOnWriteArrayList的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • Mybatis第三方PageHelper分页插件的使用与原理

    Mybatis第三方PageHelper分页插件的使用与原理

    提到插件相信大家都知道,插件的存在主要是用来改变或者增强原有的功能,MyBatis中也一样,下面这篇文章主要给大家介绍了关于Mybatis第三方PageHelper分页插件的使用与原理,需要的朋友可以参考下
    2022-02-02
  • Java字符串拼接效率测试过程解析

    Java字符串拼接效率测试过程解析

    这篇文章主要介绍了Java字符串拼接效率测试过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • 在webservice里调用耗时方法出错的解决方案

    在webservice里调用耗时方法出错的解决方案

    这篇文章主要介绍了在webservice里调用耗时方法出错的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java中Socket设置连接超时的代码分享

    Java中Socket设置连接超时的代码分享

    在我们日常连接中,如果超时时长过长的话,在开发时会影响测试,下面这篇文章主要给大家分享了关于Java中Socket设置连接超时的代码,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-06-06

最新评论