RabbitMQ 进阶 -- SpringBoot 集成 RabbitMQ实现生产者与消费者模式

【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】

**开源地址:https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB **

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-web</artifactId>

        </dependency>

    </dependencies>

</dependencyManagement>



[]( )⏳创建生产者

-------------------------------------------------------------------------



在项目内,新建一个Moudle,rabbitmq-order-producer 默认Maven工程,下一步即可



**引入依赖**



<?xml version="1.0" encoding="UTF-8"?>

<project xmlns=“http://maven.apache.org/POM/4.0.0”

     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<parent>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-parent</artifactId>

    <version>2.5.5</version>

    <relativePath /> <!-- lookup parent from repository -->

</parent>

<modelVersion>4.0.0</modelVersion>



<artifactId>rabbitmq-order-producer</artifactId>



<dependencies>

    <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>

    <dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-amqp</artifactId>

    </dependency>

    <dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-web</artifactId>

    </dependency>

    <dependency>

        <groupId>junit</groupId>

        <artifactId>junit</artifactId>

        <scope>test</scope>

    </dependency>

</dependencies>



[]( )⌛创建消费者

-------------------------------------------------------------------------



在项目内,新建一个Moudle,rabbitmq-order-cousumer 默认Maven工程,下一步即可



**引入依赖**



<?xml version="1.0" encoding="UTF-8"?>

<project xmlns=“http://maven.apache.org/POM/4.0.0”

     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<parent>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-parent</artifactId>

    <version>2.5.5</version>

    <relativePath /> <!-- lookup parent from repository -->

</parent>

<modelVersion>4.0.0</modelVersion>



<artifactId>rabbitmq-order-producer</artifactId>



<dependencies>

    <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>

    <dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-amqp</artifactId>

    </dependency>

    <dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-web</artifactId>

    </dependency>

</dependencies>



**Maven聚合工程创建完成图**



![在这里插入图片描述](https://img-blog.csdnimg.cn/b87256d27c474fbf8b7f91b048021f63.png#pic_center)



**Maven依赖图**



![在这里插入图片描述](https://img-blog.csdnimg.cn/e9248f90327c4d6f986baf0a187b7dcf.png#pic_center)



**自行手写MainApplication即可**



**创建完成!**



[]( )♨️核心源码

-------------------------------------------------------------------------



**application.yml**



服务端口

server:

port: 8080

配置rabbitmq服务

spring:

rabbitmq:

username: admin

password: admin

virtual-host: /

host: 8.130.28.198

port: 5672



> **生产者**



**OrderService**



package com.wanshi.service;

import org.springframework.amqp.rabbit.core.RabbitTemplate;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import java.util.UUID;

/**

  • @author whc

  • @date 2022/5/23 18:50

*/

@Service

public class OrderService {

@Autowired

private RabbitTemplate rabbitTemplate;



public void makeOrder() {

    String orderId = UUID.randomUUID().toString();

    System.out.println("订单生成成功:" + orderId);

    String exchange_name = "fanout_order_exchange";

    String routeingKey = "";

    rabbitTemplate.convertAndSend(exchange_name, routeingKey, orderId);

}

}




> **消费者**



**交换机的声明与队列我们放在消费者端,因为消费者是先开启的,如果没有交换机和队列,则会报错!**



**RabbitMQConfiguration**



package com.wanshi.config;

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;

/**

  • @author whc

  • @date 2022/5/23 10:18

*/

@Configuration

public class RabbitMQConfiguration {

//1.声明注册fanout模式的交换机

@Bean

public FanoutExchange fanoutExchange() {

    return new FanoutExchange("fanout_order_exchange", true, false);

}



//2.声明队列,sms.fanout.queue email.fanout.queue msg.fanout.queue

@Bean

public Queue smsQueue() {

    return new Queue("sms.fanout.queue", true);

}



@Bean

public Queue emailQueue() {

    return new Queue("email.fanout.queue", true);

}



@Bean

public Queue msgQueue() {

    return new Queue("msg.fanout.queue", true);

}



//3.完成绑定关系(队列与交换机完成绑定关系)

@Bean

public Binding smsBind() {

    return BindingBuilder.bind(smsQueue()).to(fanoutExchange());

}



@Bean

public Binding emailBind() {

    return BindingBuilder.bind(emailQueue()).to(fanoutExchange());

}



@Bean

public Binding msgBind() {

    return BindingBuilder.bind(msgQueue()).to(fanoutExchange());

}

}




**编写具体业务消费类**



**FanoutEmailConsumer**



package com.wanshi.service;

import org.springframework.amqp.rabbit.annotation.RabbitHandler;

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

import org.springframework.stereotype.Component;

/**

  • @author whc

  • @date 2022/5/23 18:53

*/

@RabbitListener(queues = “email.fanout.queue”)

@Component

public class FanoutEmailConsumer {

@RabbitHandler

public void messageService(String message) {

    System.out.println("fanout email ==>" + message);

}

}




**FanoutMsgConsumer**



package com.wanshi.service;

import org.springframework.amqp.rabbit.annotation.RabbitHandler;

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

import org.springframework.stereotype.Component;

/**

  • @author whc

  • @date 2022/5/23 18:55

*/

@RabbitListener(queues = “msg.fanout.queue”)

@Component

public class FanoutMsgConsumer {

@RabbitHandler

public void messageService(String message) {

    System.out.println("fanout msg ==>" + message);

}

}




**FanoutSmsConsumer**



package com.wanshi.service;

import org.springframework.amqp.rabbit.annotation.RabbitHandler;

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

import org.springframework.stereotype.Component;

/**

  • @author whc

  • @date 2022/5/23 18:54

*/

@RabbitListener(queues = “sms.fanout.queue”)

@Component

public class FanoutSmsConsumer {

@RabbitHandler

public void messageService(String message) {

    System.out.println("fanout sms ==> " + message);

}

}




**编写完成!**



[]( )七、测试消息的生产与消费

===============================================================================



> **启动客户端监听查看消息队列的绑定情况**



**启动客户端**



![在这里插入图片描述](https://img-blog.csdnimg.cn/d4a4a306642b431daa016098a990dcec.png#pic_center)



**查看RabbitMQ的交换机与队列绑定情况**



**交换机声明**



![在这里插入图片描述](https://img-blog.csdnimg.cn/ba46a641bb18439d9d19eb01df871da3.png#pic_center)



**队列声明**



![在这里插入图片描述](https://img-blog.csdnimg.cn/08880a76ef25483c986fce9caf43cb4c.png#pic_center)



**绑定关系**



![在这里插入图片描述](https://img-blog.csdnimg.cn/66360cfd33e94059b59a240aa09e7f60.png#pic_center)



> **下面生产者投递消息**



**生产者端建立测试类**



package com.wanshi;

import com.wanshi.service.OrderService;

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;

/**

  • @author whc

  • @date 2022/5/23 18:55

*/

@RunWith(SpringRunner.class)

@SpringBootTest

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值