我是靠谱客的博主 温暖小甜瓜,最近开发中收集的这篇文章主要介绍SpringBoot SpringBoot 开发实用篇 5 整合第三方技术 5.23 SpringBoot 整合 RabbitMQ(direct 模式),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

SpringBoot

【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】

SpringBoot 开发实用篇

文章目录

      • SpringBoot
      • SpringBoot 开发实用篇
      • 5 整合第三方技术
        • 5.23 SpringBoot 整合 RabbitMQ(direct 模式)
          • 5.23.1 AMQP
          • 5.23.2 整合 RabbitMQ
          • 5.23.3 小结

5 整合第三方技术

5.23 SpringBoot 整合 RabbitMQ(direct 模式)

5.23.1 AMQP

现在我们已经把RabbitMQ 装上了

之前我们做ActiveMQ 的时候

默认是p2p 模型

在这里插入图片描述

在这里插入图片描述

而在AMQP 中

在这里插入图片描述

5.23.2 整合 RabbitMQ

【导入坐标】

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

按照协议名导入的

在这里插入图片描述

【配置】

rabbitmq:
  host: localhost
  port: 5672

在这里插入图片描述

【实现】

在这里插入图片描述

在这里插入图片描述

先把之前做的 ActiveMQ 实现的注掉

【配置类】

package com.dingjiaxiong.service.impl.rabbitmq.direct.config;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * ClassName: RabbitConfigDirect
 * date: 2022/10/22 21:29
 *
 * @author DingJiaxiong
 */

@Configuration
public class RabbitConfigDirect {

    //存储消息的消息队列的对象
    @Bean
    public Queue directQueue(){

        return new Queue("direct_queue"); //是否持久化、是否连接专用、是否自动删除【后面其实有三个boolean参数,默认值是tff】
    }

    //还可以再来个队列,让它绑在同一个交换机上
    @Bean
    public Queue directQueue2(){
        return new Queue("direct_queue2"); //是否持久化、是否连接专用、是否自动删除【后面其实有三个boolean参数,默认值是tff】
    }

    //消息队列不能直接使用,需要使用一个交换机去绑定它
    @Bean
    public DirectExchange directExchange(){
        return new DirectExchange("directExchange");
    }

    //做消息队列与交换机的绑定关系
    @Bean
    public Binding bindingDirect(){
        return BindingBuilder.bind(directQueue()).to(directExchange()).with("direct");
    }

    //做消息队列与交换机的绑定关系
    @Bean
    public Binding bindingDirect2(){
        return BindingBuilder.bind(directQueue2()).to(directExchange()).with("direct2");
    }


}

实现类

package com.dingjiaxiong.service.impl.rabbitmq.direct;

import com.dingjiaxiong.service.MessageService;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * ClassName: MessageServiceRabbitmqDirectImpl
 * date: 2022/10/22 21:25
 *
 * @author DingJiaxiong
 */

@Service
public class MessageServiceRabbitmqDirectImpl implements MessageService {

    @Autowired
    private AmqpTemplate amqpTemplate;

    @Override
    public void sendMessage(String id) {

        System.out.println("待发送短信的订单已纳入处理队列(rabbitmq direct),id " + id);
        amqpTemplate.convertAndSend("directExchange","direct",id);

    }

    @Override
    public String doMessage() {
        return null;
    }
}

做一个自动监听

package com.dingjiaxiong.service.impl.rabbitmq.direct;

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * ClassName: MessageListener
 * date: 2022/10/22 21:40
 *
 * @author DingJiaxiong
 */

@Component
public class MessageListener {

    //收一个消息
    @RabbitListener(queues = "direct_queue")
    public void receive(String id){

        System.out.println("已完成短信发送业务(rabbitmq direct),id:" + id);

    }

}

有了这个监听就不用去手动消费了

OK, 直接开启服务器测试

生产一个

在这里插入图片描述

这个就是listener 自动处理的

看看控制台

在这里插入图片描述

可以看到已经有两个消息队列了

来自我们初始化时,配置类中

在这里插入图片描述

这两个东西

稍微修改一下

把监听类放到一个包里

在这里插入图片描述

将其复制一个2

package com.dingjiaxiong.service.impl.rabbitmq.direct.listener;

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * ClassName: MessageListener
 * date: 2022/10/22 21:40
 *
 * @author DingJiaxiong
 */

@Component
public class MessageListener2 {

    //收一个消息
    @RabbitListener(queues = "direct_queue")
    public void receive(String id){

        System.out.println("已完成短信发送业务(rabbitmq direct two),id:" + id);

    }

}

现在就有两个监听, 而且都监听的是同一个队列

直接启动看看效果

在这里插入图片描述

我一共发了四次

可以看到它俩是轮流着在对消息进行处理

就是这样,回顾一下

  • 导入SpringBoot整合RabbitMQ坐标

在这里插入图片描述

  • 配置RabbitMQ (采用默认配置)

在这里插入图片描述

  • 定义消息队列(direct)

在这里插入图片描述

  • 定义消息队列(direct)

在这里插入图片描述

在这里插入图片描述

  • 生产与消费消息(direct)

在这里插入图片描述

  • 使用消息监听器对消息队列监听(direct)

在这里插入图片描述

  • 使用多消息监听器对消息队列监听进行消息轮循处理(direct)

在这里插入图片描述

5.23.3 小结
  1. SpringBoot整合RabbitMQ直连交换机模式【direct】

最后

以上就是温暖小甜瓜为你收集整理的SpringBoot SpringBoot 开发实用篇 5 整合第三方技术 5.23 SpringBoot 整合 RabbitMQ(direct 模式)的全部内容,希望文章能够帮你解决SpringBoot SpringBoot 开发实用篇 5 整合第三方技术 5.23 SpringBoot 整合 RabbitMQ(direct 模式)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部