SpringBoot 2.7教程:SpringBoot + Web 项目搭建及实践应用-2022年最新图文版本
SpringBoot 2.7教程:SpringBoot + Web 项目搭建,异常捕获处理-2022年最新图文版本
SpringBoot 2.7教程:SpringBoot + Mysql 项目应用-2022年最新图文版本
SpringBoot 2.7教程:SpringBoot 集成 jsp 页面开发 -2022年最新图文版本
SpringBoot 2.7教程:SpringBoot 实现文件上传,图片上传并显示功能-2022年最新图文版本
SpringBoot 2.7教程:springboot 设置全局字符编码,解决乱码问题-2022年最新图文版
SpringBoot 2.7教程:SpringBoot mybatis 多数据源的整合方法-2022年最新图文版本
SpringBoot 2.7教程:SpringBoot 整合 RocketMQ 项目搭建-2022年最新图文版本
SpringBoot 2.7教程:SpringBoot 整合 RabbitMQ 项目搭建-2022年最新图文版本
SpringBoot 2.7教程:SpringBoot 整合 MongoDB 项目搭建-2022年最新图文版本
SpringBoot 2.7教程:SpringBoot 整合 Redisson 项目搭建-2022年最新图文版本
SpringBoot 2.7教程:SpringBoot 整合 Redis 项目搭建-2022年最新图文版本
搭建RabbitMQ
一、新建项目springboot-rabbitmq,项目结构如下
二、确认pom文件依赖
<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>
三、配置application.yml
spring:
#配置rabbitMq 服务器
rabbitmq:
host: rabbitmq_host
port: 5672
username: guest
password: guest
#虚拟host 可以不设置,使用server默认host
virtual-host: /
# 支持发布确认
# publisher-confirms: true
# 支持发布返回
publisher-returns: true
listener:
simple:
# 采用手动应答
acknowledge-mode: manual
# 当前监听容器数
concurrency: 1
# 最大数
max-concurrency: 1
# 是否支持重试
retry:
enabled: true
四、创建发送消息Controller
/***
* @date: 2022/7/13
* @author: 微信公众号:深入技术架构
* @description: TODO
*/
@RestController
public class RabbitMQController {
Logger LOG = LoggerFactory.getLogger(RabbitMQController.class);
@Autowired
RabbitTemplate rabbitTemplate;
@RequestMapping("sendMsg")
public String sendMsg(){
LOG.info("msg:{}","开始向队列中发送一条消息!");
// 参数:路由交换机,队列名 ,发送的消息
rabbitTemplate.convertAndSend("directExchange","directRoutingKey","message:这是一条消息!");
return "send msg succ";
}
}
五、创建消费消息类
@Component
@RabbitListener(bindings = @QueueBinding(
value = @Queue(value = "directQueue", autoDelete = "false"),
exchange = @Exchange(value = "drectExchange", type = ExchangeTypes.DIRECT),
key = "directRoutingkey"))
public class DirectReceiver {
Logger LOG = LoggerFactory.getLogger(DirectReceiver.class);
@RabbitHandler
public void receiverMsg(String msg, @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag, Channel channel) throws IOException {
LOG.info("class:{},message:{}","DirectReceiver",msg);
//手动签收 channel.basicAck(消息唯一标识,是否批量签收);
channel.basicAck(deliveryTag,false);
}
}
六、创建交换机、队列、绑定交换机和队列
/***
* @date: 2022/7/13
* @author: 微信公众号:深入技术架构
* @description: 绑定交换机、队列、routingKey
*/
@Configuration
public class BindingConfig {
/**
* 绑定将队列和交换机绑定, 并设置用于匹配键:directRoutingKey
*/
@Bean
Binding bindingQueue() {
return BindingBuilder.bind(QueueConfig.directQueue())
.to(ExchangeConfig.directExchange())
.with("directRoutingKey");
}
}
/***
* @date: 2022/7/13
* @author:微信公众号:深入技术架构
* @description: 声明交换机
*/
@Configuration
public class ExchangeConfig {
/**
* Direct交换机 起名:directExchange
*/
@Bean
public static DirectExchange directExchange() {
return new DirectExchange("directExchange");
}
/**
* Topic交换机 起名:topicExchange
*/
@Bean
public static TopicExchange topicExchange() {
return new TopicExchange("topicExchange");
}
/**
* fanout交换机 起名:fanoutExchange
*/
@Bean
public static FanoutExchange fanoutExchange() {
return new FanoutExchange("fanoutExchange");
}
@Bean
public static HeadersExchange headersExchange() {
return new HeadersExchange("headersExchange");
}
}
/***
* @date: 2022/7/13
* @author: 微信公众号:深入技术架构
* @description: 声明队列
*/
@Configuration
public class QueueConfig {
public static String directQueue="directQueue";
/**
* 队列 起名:directQueue
*/
@Bean
public static Queue directQueue() {
return new Queue(directQueue,true);
}
}
七、测试
版权归原作者 架构师小冯 所有, 如有侵权,请联系我们删除。