SpringBoot2.7.4整合RabbitMq

目录

1.打开pom.xml文件,添加依赖

2.更改resources配置文件名称为application.yml,增加配置参数

3.启动类SpringbootStudyApplication

4.在study下面新建各种包名,编写相应的代码(以下是常见模式)

[①.直连交换机模式(Direct Exchange)](#①.直连交换机模式(Direct Exchange))

②.广播模式(Fanout)

③.通配符模式(Topic)

5.使用postman访问

6.查看开发工具控制台日志

①.直连交互机模式

②.广播模式

③.通配符模式

7.下载地址

①.直连交互机模式

②.广播模式

③.通配符模式


1.打开pom.xml文件,添加依赖

XML 复制代码
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

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

        <!--rabbitmq依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>

2.更改resources配置文件名称为application.yml,增加配置参数

XML 复制代码
server:
  port: 8888 #指定启动的端口
spring:
  rabbitmq:
    host: localhost      # rabbitmq服务地址
    port: 5672           # 端口号
    username: guest      # 用户名
    password: guest      # 密码
    virtual-host: /      # 虚拟主机

3.启动类SpringbootStudyApplication

java 复制代码
package com.saas.study;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringbootStudyApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootStudyApplication.class, args);
    }

}

4.在study下面新建各种包名,编写相应的代码(以下是常见模式)

①.直连交换机模式(Direct Exchange)
复制代码
component层
java 复制代码
package com.saas.study.component;

import com.saas.study.config.RabbitMqConfig;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * rabbitmq生产者
 */
@Component
public class RabbitMqProducer {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    //发送消息方法
    public void sendMessage(String message) {
        rabbitTemplate.convertAndSend(
                RabbitMqConfig.TEST_EXCHANGE,
                RabbitMqConfig.TEST_ROUTING_KEY,
                message
        );
        System.out.println("生产者发送消息:" + message);
    }
}
java 复制代码
package com.saas.study.component;

import com.saas.study.config.RabbitMqConfig;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * rabbitmq消费者
 */
@Component
public class RabbitMqConsumer {

    //监听指定队列
    @RabbitListener(queues = RabbitMqConfig.TEST_QUEUE)
    public void receiveMessage(String message) {
        System.out.println("消费者接收消息:" + message);
    }
}

config层

java 复制代码
package com.saas.study.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;

/**
 * rabbitmq配置类
 */
@Configuration
public class RabbitMqConfig {

    //队列名称
    public static final String TEST_QUEUE = "test_queue";
    //交换机名称
    public static final String TEST_EXCHANGE = "test_exchange";
    //路由键
    public static final String TEST_ROUTING_KEY = "test_routing_key";

    //声明队列
    @Bean
    public Queue testQueue() {
        //durable: 是否持久化,exclusive: 是否排他,autoDelete: 是否自动删除
        return new Queue(TEST_QUEUE, true, false, false);
    }

    //声明直连交换机
    @Bean
    public DirectExchange testExchange() {
        return new DirectExchange(TEST_EXCHANGE, true, false);
    }

    //绑定队列到交换机,并指定路由键
    @Bean
    public Binding bindingTestQueue(Queue testQueue, DirectExchange testExchange) {
        return BindingBuilder.bind(testQueue).to(testExchange).with(TEST_ROUTING_KEY);
    }
}

controller层

java 复制代码
package com.saas.study.controller;

import com.saas.study.component.RabbitMqProducer;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * 访问rabbitmq控制类
 */
@RestController
public class RabbitMqController {

    @Resource
    private RabbitMqProducer rabbitMqProducer;

    @GetMapping("/testSendMessage")
    public void testSendMessage() {
        rabbitMqProducer.sendMessage("hello rabbitmq");
    }
}
②.广播模式(Fanout)

component层

java 复制代码
package com.saas.study.component;

import com.saas.study.config.FanoutRabbitMqConfig;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * rabbitmq生产者
 */
@Component
public class RabbitMqProducer {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    //发送消息方法
    public void sendMessage(String message) {
        rabbitTemplate.convertAndSend(
                FanoutRabbitMqConfig.FANOUT_EXCHANGE,
                "", // 无需路由键
                message
        );
        System.out.println("广播生产者发送消息:" + message);
    }
}
java 复制代码
package com.saas.study.component;

import com.saas.study.config.FanoutRabbitMqConfig;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * rabbitmq消费者一
 */
@Component
public class RabbitMqConsumerOne {

    //监听指定队列
    @RabbitListener(queues = FanoutRabbitMqConfig.FANOUT_QUEUE_ONE)
    public void receiveMessage(String message) {
        System.out.println("消费者接收队列一消息:" + message);
    }
}
java 复制代码
package com.saas.study.component;

import com.saas.study.config.FanoutRabbitMqConfig;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * rabbitmq消费者二
 */
@Component
public class RabbitMqConsumerTwo {

    //监听指定队列
    @RabbitListener(queues = FanoutRabbitMqConfig.FANOUT_QUEUE_TWO)
    public void receiveMessage(String message) {
        System.out.println("消费者接收队列二消息:" + message);
    }
}

config层

java 复制代码
package com.saas.study.config;

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

/**
 * rabbitmq广播模式配置类
 */
@Configuration
public class FanoutRabbitMqConfig {
    //交换机名称
    public static final String FANOUT_EXCHANGE = "fanout_exchange";

    //队列一名称
    public static final String FANOUT_QUEUE_ONE = "fanout_queue_one";
    //队列二名称
    public static final String FANOUT_QUEUE_TWO = "fanout_queue_two";

    //声明交换机
    @Bean
    public FanoutExchange fanoutExchange() {
        // durable: 持久化,autoDelete: 不自动删除
        return new FanoutExchange(FANOUT_EXCHANGE, true, false);
    }

    //声明队列一
    @Bean
    public Queue fanoutQueueOne() {
        return new Queue(FANOUT_QUEUE_ONE, true, false, false);
    }

    //声明队列二
    @Bean
    public Queue fanoutQueueTwo() {
        return new Queue(FANOUT_QUEUE_TWO, true, false, false);
    }

    //将队列定一绑定到交换机,这里无需要路由键
    @Bean
    public Binding bindingQueueOne(Queue fanoutQueueOne, FanoutExchange fanoutExchange) {
        return BindingBuilder.bind(fanoutQueueOne).to(fanoutExchange);
    }

    //将队列定二绑定到交换机,这里无需要路由键
    @Bean
    public Binding bindingQueueTwo(Queue fanoutQueueTwo, FanoutExchange fanoutExchange) {
        return BindingBuilder.bind(fanoutQueueTwo).to(fanoutExchange);
    }
}

controller层

java 复制代码
package com.saas.study.controller;

import com.saas.study.component.RabbitMqProducer;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * 访问rabbitmq控制类
 */
@RestController
public class RabbitMqController {

    @Resource
    private RabbitMqProducer rabbitMqProducer;

    @GetMapping("/testSendMessage")
    public void testSendMessage() {
        rabbitMqProducer.sendMessage("hello rabbitmq");
    }
}
③.通配符模式(Topic)

component层

java 复制代码
package com.saas.study.component;

import com.saas.study.config.TopicRabbitMqConfig;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * rabbitmq生产者
 */
@Component
public class RabbitMqProducer {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    //发送消息方法
    public void sendMessage(String routingKey, String message) {
        rabbitTemplate.convertAndSend(
                TopicRabbitMqConfig.TOPIC_EXCHANGE,
                routingKey,
                message
        );
        System.out.println("生产者发送消息,路由键:"+routingKey+",消息:"+message);
    }
}
java 复制代码
package com.saas.study.component;

import com.saas.study.config.TopicRabbitMqConfig;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * rabbitmq消费者一
 */
@Component
public class RabbitMqConsumerOne {

    //监听指定队列,匹配user.*
    @RabbitListener(queues = TopicRabbitMqConfig.TOPIC_QUEUE_ONE)
    public void receiveMessage(String message) {
        System.out.println("消费者接收队列一消息:" + message);
    }
}
java 复制代码
package com.saas.study.component;

import com.saas.study.config.TopicRabbitMqConfig;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * rabbitmq消费者二
 */
@Component
public class RabbitMqConsumerTwo {

    //监听指定队列,匹配*.order
    @RabbitListener(queues = TopicRabbitMqConfig.TOPIC_QUEUE_TWO)
    public void receiveMessage(String message) {
        System.out.println("消费者接收队列二消息:" + message);
    }
}
java 复制代码
package com.saas.study.component;

import com.saas.study.config.TopicRabbitMqConfig;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * rabbitmq消费者三
 */
@Component
public class RabbitMqConsumerThree {

    //监听指定队列,匹配#.stock
    @RabbitListener(queues = TopicRabbitMqConfig.TOPIC_QUEUE_THREE)
    public void receiveMessage(String message) {
        System.out.println("消费者接收队列三消息:" + message);
    }
}

config层

java 复制代码
package com.saas.study.config;

import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * rabbitmq通配符模式配置类
 */
@Configuration
public class TopicRabbitMqConfig {
    //交换机名称
    public static final String TOPIC_EXCHANGE = "topic_exchange";

    //队列一名称
    public static final String TOPIC_QUEUE_ONE = "topic_queue_one";
    //队列二名称
    public static final String TOPIC_QUEUE_TWO = "topic_queue_two";
    //队列三名称
    public static final String TOPIC_QUEUE_THREE = "topic_queue_three";

    //声明交换机
    @Bean
    public TopicExchange topicExchange() {
        // durable: 持久化,autoDelete: 不自动删除
        return new TopicExchange(TOPIC_EXCHANGE, true, false);
    }

    //声明队列一
    @Bean
    public Queue topicQueueOne() {
        return new Queue(TOPIC_QUEUE_ONE, true, false, false);
    }

    //声明队列二
    @Bean
    public Queue topicQueueTwo() {
        return new Queue(TOPIC_QUEUE_TWO, true, false, false);
    }

    //声明队列三
    @Bean
    public Queue topicQueueThree() {
        return new Queue(TOPIC_QUEUE_THREE, true, false, false);
    }

    //将队列定一绑定到交换机
    @Bean
    public Binding bindingQueueOne(Queue topicQueueOne, TopicExchange topicExchange) {
        return BindingBuilder.bind(topicQueueOne).to(topicExchange).with("user.*"); //匹配user.xxx;
    }

    //将队列定二绑定到交换机
    @Bean
    public Binding bindingQueueTwo(Queue topicQueueTwo, TopicExchange topicExchange) {
        return BindingBuilder.bind(topicQueueTwo).to(topicExchange).with("*.order"); //匹配xxx.order
    }

    //将队列定三绑定到交换机
    @Bean
    public Binding bindingQueueThree(Queue topicQueueThree, TopicExchange topicExchange) {
        return BindingBuilder.bind(topicQueueThree).to(topicExchange).with("#.stock"); //匹配xxx.stock或xxx.xxx.stock等
    }
}

controller层

java 复制代码
package com.saas.study.controller;

import com.saas.study.component.RabbitMqProducer;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * 访问rabbitmq控制类
 */
@RestController
public class RabbitMqController {

    @Resource
    private RabbitMqProducer rabbitMqProducer;

    @GetMapping("/testSendMessage")
    public void testSendMessage() {
        //路由键=user.info → 匹配 user.*
        rabbitMqProducer.sendMessage("user.info", "用户注册通知");
        //路由键=create.order → 匹配 *.order
        rabbitMqProducer.sendMessage("create.order", "订单创建成功");
        //路由键=admin.add.stock → 匹配 #.stock
        rabbitMqProducer.sendMessage("admin.add.stock", "管理增加库存通知");
        //路由键=stock → 匹配 #.stock
        rabbitMqProducer.sendMessage("stock", "库存通知");
    }
}

5.使用postman访问

6.查看开发工具控制台日志

①.直连交互机模式
②.广播模式
③.通配符模式

7.下载地址

①.直连交互机模式

百度云: https://pan.baidu.com/s/1_aJ07Bp5JDE23gwdxmpzjw 提取码: 3tst

②.广播模式

百度云: https://pan.baidu.com/s/1R1LxE4w_NDigCf2dwzODYw 提取码: xv5e

③.通配符模式

百度云: https://pan.baidu.com/s/1WvZ6CL96MIcAOwJmsr4uGg 提取码: e4zx

相关推荐
zl9798992 小时前
RabbitMQ-Work Queues
分布式·rabbitmq
千寻技术帮7 小时前
50036_基于微信小程序的智能点餐推荐系统
小程序·源码·springboot·文档
q***4649 小时前
RabbitMQ高级特性----生产者确认机制
分布式·rabbitmq
小高学习java10 小时前
Canal、Elasticsearch、RabbitMq构建高可用、高性能的异构数据同步方案(亲测可用!!!!)
大数据·elasticsearch·rabbitmq·java-rabbitmq
2501_9416243310 小时前
云计算与企业数字化转型:从基础设施到创新引擎
rabbitmq
百***480711 小时前
RabbitMQ 客户端 连接、发送、接收处理消息
分布式·rabbitmq·ruby
言一木11 小时前
【国产化】金蝶MQ验证
springboot·国产化·消息中间件
2501_9411458511 小时前
边缘计算与物联网:未来智能城市的基础设施
rabbitmq
这周也會开心12 小时前
SpringBootTest和SpringBootApplication
springboot