创建SpringBoot项目
我这里使用Java8,jdk1.8,maven项目,springboot2.6.11版本
添加依赖
需要用到的全部依赖:
<dependencies>
<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>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
</dependencies>
配置文件
将配置文件改为.yml后缀
添加:
server:
port: 8080
spring:
application:
name: rabbitmq-provider
rabbitmq:
host: localhost
port: 5672
username: admin
password: admin
#确认消息已发送到交换机
#publisher-confirm-type: correlated
#确认消息已发送到队列(Queue)
#publisher-returns: true
最后两个配置我们之后会讲到,这里可以先不使用
项目结构
其中:P为生产者
C为消费者
X为直连交换机
A为队列
XA为RoutingKey,是X与A连接的线路
在这个结构中可以不使用交换机X,但是为了完整性,这里还是加上了。
对一些基本概念,比如生产者消费者等,或者对交换机种类还不是很了解的,可以下去学习一下:
配置类代码
配置类主要作用是声明交换机,队列,并进行绑定
@Configuration
public class Config {
//换机名称
public static final String X_EXCHANGE="X";
//队列名称
public static final String QUEUE_A="A";
//声明交换机xExchange
@Bean("xExchange")
public DirectExchange xExchange(){
return new DirectExchange(X_EXCHANGE);
}
//声明队列A
@Bean("queueA")
public Queue queueA(){
return QueueBuilder.durable(QUEUE_A).build();
}
//绑定交换机与队列
//A与X通过XA线路绑定
@Bean
public Binding queueABindingX(@Qualifier("queueA") Queue queueA,
@Qualifier("xExchange") DirectExchange xExchange ){
return BindingBuilder.bind(queueA).to(xExchange).with("XA");
}
生产者代码
@Slf4j
@RestController
@RequestMapping("/myMQ")
public class ProduceController {
@Autowired
private RabbitTemplate rabbitTemplate;
@GetMapping("/sendMessage/{message}")
public void sendMessage(@PathVariable String message) {
log.info("发送消息:{}",message);
rabbitTemplate.convertAndSend("X", "XA",message);
}
}
消费者代码
@Slf4j
@Component
public class Consumer {
//接收消息
@RabbitListener(queues="A")
public void receiveA(Message message){
log.info("当前时间:{},收到A队列的消息:{}",new Date().toString(),new String(message.getBody()));
}
}
启动项目
docker中启动拉取的rabbitmq
启动项目
测试
测试成功
同系列文章
原理部分
MQ(消息队列)简介
RabbitMQ简介
RabbitMQ 四大核心概念及工作原理
操作部分
Windows版Docker安装RabbitMq
Maven整合RabbitMQ实现生产消费消息
RabbitMQ延迟队列及实战
RabbitMQ发布确认-交换机确认
RabbitMQ-消息回报(队列确认)
RabbitMQ-备份交换机
RabbitMQ-优先级队列