【一线大厂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