Springboot整合RabbitMQ

整合

生产者

默认如果在windows安装了rabbitmq是不用配置信息的,因为存在默认的配置

  • 整合流程:

    • 导包----------编写配置-----------写代码
      • 在springboot中存在很多template,MQ 就是其中的一种
  • 导包

    • 其实不需要导包,在创建springboot项目时,勾选MQ,就可以了
  • 编写配置

    • #rabbitMQ
      spring:
        rabbitmq:
          username: admin
          password: admin
          virtual-host: /
          host: 47.120.50.213
          port: 5672
      
  • 配置RabbitMqConfiguration

    • 交换机----队列----队列绑定交换机

      • 声明交换机

        • @Bean
          public FanoutExchange fanoutExchange() {
              //返回的是交换机的名字
              return new FanoutExchange("fanout_message_exchange");
          }
          
        • 什么类型的交换机,就返回什么类型

      • 声明队列

        • @Bean
          public Queue emailQueue() {
              //也是队列的名字
              return new Queue("email.fanout.queue",true);
          }
          
      • 队列绑定交换机

        • @Bean
          public Binding emailBinding() {
              return BindingBuilder.bind(emailQueue()).to(fanoutExchange());
          }
          
        • 要是是路由模式,可以添加一个路由,

        • @Bean
          public Binding wxBinding1(){
              return BindingBuilder.bind(wxQueue()).to(directExchange()).with("");
          }
          
  • 发送消息

    • @Autowired
      RabbitTemplate rabbitTemplate;
      
      public void makeOrder(){
      
          String exchangeName = "fanout_message_exchange";
          String message = "hello world";
          String routingKey = "";
      
          rabbitTemplate.convertAndSend(exchangeName,routingKey,message);
          System.out.println("消息发送成功");
      
      }
      

消费者

  • 创建一个新的模块

  • 导包

  • 编写配置

  • 创建一个接受的service

    • @RabbitListener(queues = {"wx.fanout.queue"})
      @Service
      public class FanoutReceiver {
      
          private String messageContent;
      
          @RabbitHandler
          public void receive(String message) {
              messageContent = message;
          }
      
          public String getMessageContent(){
              return messageContent;
          }
      
      }
      
    • 还是一样,接收者是通过队列来进行接受的

    • @RabbitListener()

    • RabbitHandler得到的message就是消息

思考?

如何实现路由模式的配置

@Bean
public Binding tiktokQueueBinding() {
    return BindingBuilder.bind(tiktokQueue()).to(directExchange()).with("tikTokQueueDirect");
}

在后面加上With就行

问题:

如果把接收与发送服务为了测试,写在一个类中,那么其实都不用调用服务,当启动后,就会一直监听,然后消费服务,所以你看不到服务的消费

配置类写在消费者这边还是在生产者这边比较好?

回答:都是推荐的【生产者、消费者、两边】,但是配置在消费者更好一点,消费者一般是先启动的,交换机,让交换机时时监听

使用注解开发

这样可以不使用配置了

@RabbitListener(bindings = @QueueBinding(
        value = @Queue(value = "email.fanout.queue",durable = "true",autoDelete = "false"),
        exchange = @Exchange(value = "fanout_message_exchange",type = ExchangeTypes.FANOUT)
))

关于为什么可以这么写?

解释:

  • 进入@RabbitListener

    • 在这里插入图片描述
  • 进入QueueBinding

    • 在这里插入图片描述
  • 进入Queue

    • 在这里插入图片描述

以上就是可以这样配置的原因了

  • 24
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值