没有合适的资源?快使用搜索试试~ 我知道了~
RabbitMQ 3.9( 续 ).doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 182 浏览量
2022-07-08
18:28:03
上传
评论
收藏 2.35MB DOC 举报
温馨提示
试读
27页
RabbitMQ 3.9( 续 ).doc
资源推荐
资源详情
资源评论
RabbitMQ 3.9( 续 )
前言
基础篇链接:https://www.cnblogs.com/xiegongzi/p/16229678.html
3.9、延迟队列 - 重要
3.9.1、延迟队列概念
这个玩意儿要表达的意思其实已经见过了,就是死信队列中说的 TTL 消息过期,但是文
字表达得换一下
所谓的延迟队列:就是用来存放需要在指定时间内被处理的元素的队列,其内部是有序的
使用场景:
1、支付时,订单在 30 分钟以内未支付则自动取消支付
2、退款,用户发起退款,在 3 天以后商家还未处理,那官方便介入其中进行处理
..........
玩延迟队列需要具备的条件:
1、具备死信队列知识
2、具备 TTL 知识
然后将这二者结合,加一些东西,上好的烹饪就做好了
实现如下的逻辑
P:生产者
X:正常交换机
Y:死信交换机
QA、QB:正常队列
QD:死信队列
XA、XB:正常交换机、正常队列的 routing key
YD:死信交换机、死信队列的 routing key
3.9.2、集成 SpringBoot
3.9.2.1、依赖
org.springframework.boot
spring-boot-starter-amqp
org.springframework.amqp
spring-rabbit-test
test
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
3.9.2.2、yml 文件配置
# RabbitMQ 的配置
spring:
rabbitmq:
host: 自己服务器 ip
port: 5672
username: admin
password: admin
# 要是有 Vhost 也可以进行配置
3.9.2.4、RabbitMQ 配置
package cn.zixieqing.config;
import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.HashMap;
@Configuration
public class MqConfig {
/**
* 正常交换机名称
*/
private static final String TTL_NORMAL_EXCHANGE = “X”;
/**
* 死信交换机名称
*/
private static final String TTL_DEAD_LETTER_EXCHANGE = “Y”;
/**
* 正常队列名称
*/
private static final String TTL_NORMAL_QUEUE_A = “QA”;
private static final String TTL_NORMAL_QUEUE_B = “QB”;
/**
* 死信队列名称
*/
private static final String TTL_DEAD_LETTER_QUEUE_D = “QD”;
/**
* 正常交换机 和 正常队列 A 的 routing key
*/
private static final String TTL_NORMAL_EXCHANGE_BIND_QUEUE_A = “XA”;
/**
* 正常交换机 和 正常队列 B 的 routing key
*/
private static final String TTL_NORMAL_EXCHANGE_BIND_QUEUE_B = “XB”;
/**
* 正常队列 和 死信交换机 及 死信交换机 与 死信队列的 routing key
*/
private static final String
TTL_NORMAL_QUEUE_AND_DEAD_LETTER_EXCHANGE_AND_DEAD_LETTER_QUE
UE_BIND = “YD”;
/**
* 声明正常交换机
*/
@Bean(“xExchange”)
public DirectExchange xExchange() {
// 直接创建是什么类型的交换机 加上 交换机名字就可以了
return new DirectExchange(TTL_NORMAL_EXCHANGE);
}
/**
* 声明死信交换机
*/
@Bean(“yExchange”)
public DirectExchange yExchange() {
return new DirectExchange(TTL_DEAD_LETTER_EXCHANGE);
}
/**
* 声明正常队列 QA 并 绑定死信交互机 Y
*/
@Bean(“queueA”)
public Queue queueA() {
// initialCapacity 这里的 map 大小值:(存的元素个数 / 负载因子 0.75) + 1
HashMap params = new HashMap(5);
params.put(“x-dead-letter-exchange”, TTL_DEAD_LETTER_EXCHANGE);
params.put(“x-dead-letter-routing-key”,
TTL_NORMAL_QUEUE_AND_DEAD_LETTER_EXCHANGE_AND_DEAD_LETTER_QUE
UE_BIND);
params.put(“x-message-ttl”, 10 * 1000);
// 构建队列 并 传入相应的参数
return QueueBuilder.durable(TTL_NORMAL_QUEUE_A)
.withArguments(params)
.build();
}
/**
* X 正常交换机 和 QA 正常队列绑定
*/
@Bean
public Binding xChangeBindingQueueA(@Qualifier(“queueA”) Queue queueA,
@Qualifier(“xExchange”) DirectExchange
xExchange) {
return BindingBuilder.bind(queueA)
.to(xExchange)
.with(TTL_NORMAL_EXCHANGE_BIND_QUEUE_A);
}
/**
* 声明正常队列 QB 并 绑定死信交换机 Y
*/
@Bean(“queueB”)
public Queue queueB() {
/*
initialCapacity map 初始值:(存的元素个数 / 负载因子 0.75) + 1
*/
HashMap params = new HashMap(5);
params.put(“x-dead-letter-exchange”, TTL_DEAD_LETTER_EXCHANGE);
params.put(“x-dead-letter-routing-key”,
TTL_NORMAL_QUEUE_AND_DEAD_LETTER_EXCHANGE_AND_DEAD_LETTER_QUE
UE_BIND);
params.put(“x-message-ttl”, 40 * 1000);
剩余26页未读,继续阅读
资源评论
书博教育
- 粉丝: 1
- 资源: 2837
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功