当前位置:网站首页>延时队列两种实现方式
延时队列两种实现方式
2022-07-02 05:11:00 【@淡 定】
rabbitmq_delayed_message_exchange插件
//配置文件 /properties:
spring.rabbitmq.host=localhost
spring.rabbitmq.password=guest
spring.rabbitmq.username=guest
spring.rabbitmq.virtual-host
//绑定队列和交换机,配置类
@Configuration
public class RabbitConfig {
public static final String QUEUE_NAME = "javaboy_delay_queue";
public static final String EXCHANGE_NAME = "javaboy_delay_exchange";
public static final String EXCHANGE_TYPE = "x-delayed-message";
@Bean
Queue queue() {
return new Queue(QUEUE_NAME, true, false, false);
}
@Bean
CustomExchange customExchange() {
Map<String, Object> args = new HashMap<>();
args.put("x-delayed-type", "direct");
return new CustomExchange(EXCHANGE_NAME, EXCHANGE_TYPE, true, false,args);
}
@Bean
Binding binding() {
return BindingBuilder.bind(queue())
.to(customExchange()).with(QUEUE_NAME).noargs();
}
}
//消费者
@Component
public class MsgReceiver {
private static final Logger logger = LoggerFactory.getLogger(MsgReceiver.class);
@RabbitListener(queues = RabbitConfig.QUEUE_NAME)
public void handleMsg(String msg) {
logger.info("handleMsg,{}",msg);
}
}
//生产者
@SpringBootTest
class MqDelayedMsgDemoApplicationTests {
@Autowired
RabbitTemplate rabbitTemplate;
@Test
void contextLoads() throws UnsupportedEncodingException {
Message msg = MessageBuilder.withBody(("hello world"+new Date()).getBytes("UTF-8")).setHeader("x-delay", 3000).build();
rabbitTemplate.convertAndSend(RabbitConfig.EXCHANGE_NAME, RabbitConfig.QUEUE_NAME, msg);
}
}
使用死信队列方式
//properties配置文件
spring.rabbitmq.host=localhost
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.port=8888
//死信队列和普通队列绑定配置类
@Configuration
public class QueueConfig {
public static final String JAVABOY_QUEUE_NAME = "javaboy_queue_name";
public static final String JAVABOY_EXCHANGE_NAME = "javaboy_exchange_name";
public static final String JAVABOY_ROUTING_KEY = "javaboy_routing_key";
public static final String DLX_QUEUE_NAME = "dlx_queue_name";
public static final String DLX_EXCHANGE_NAME = "dlx_exchange_name";
public static final String DLX_ROUTING_KEY = "dlx_routing_key";
/** * 死信队列 * @return */
@Bean
Queue dlxQueue() {
return new Queue(DLX_QUEUE_NAME, true, false, false);
}
/** * 死信交换机 * @return */
@Bean
DirectExchange dlxExchange() {
return new DirectExchange(DLX_EXCHANGE_NAME, true, false);
}
/** * 绑定死信队列和死信交换机 * @return */
@Bean
Binding dlxBinding() {
return BindingBuilder.bind(dlxQueue()).to(dlxExchange())
.with(DLX_ROUTING_KEY);
}
/** * 普通消息队列 * @return */
@Bean
Queue javaboyQueue() {
Map<String, Object> args = new HashMap<>();
//设置消息过期时间
args.put("x-message-ttl", 1000*10);
//设置死信交换机
args.put("x-dead-letter-exchange", DLX_EXCHANGE_NAME);
//设置死信 routing_key
args.put("x-dead-letter-routing-key", DLX_ROUTING_KEY);
return new Queue(JAVABOY_QUEUE_NAME, true, false, false, args);
}
/** * 普通交换机 * @return */
@Bean
DirectExchange javaboyExchange() {
return new DirectExchange(JAVABOY_EXCHANGE_NAME, true, false);
}
/** * 绑定普通队列和与之对应的交换机 * @return */
@Bean
Binding javaboyBinding() {
return BindingBuilder.bind(javaboyQueue())
.to(javaboyExchange())
.with(JAVABOY_ROUTING_KEY);
}
}
//死信队列消费者
@Component
public class DlxConsumer {
private static final Logger logger = LoggerFactory.getLogger(DlxConsumer.class);
@RabbitListener(queues = QueueConfig.DLX_QUEUE_NAME)
public void handle(String msg) {
logger.info(msg);
}
}
//不配置普通队列消费者,过期之后消息会自动进入死信队列进行消费
//生产者
@SpringBootTest
class DelayQueueApplicationTests {
@Autowired
RabbitTemplate rabbitTemplate;
@Test
void contextLoads() {
System.out.println(new Date());
rabbitTemplate.convertAndSend(QueueConfig.JAVABOY_EXCHANGE_NAME, QueueConfig.JAVABOY_ROUTING_KEY, "hello world!");
}
}
边栏推荐
- leetcode存在重复元素go实现
- el form 表单validate成功后没有执行逻辑
- 農業生態領域智能機器人的應用
- Fabric.js 渐变
- 7.1 simulation summary
- Knowledge arrangement about steam Education
- CubeMx DMA笔记
- Application d'un robot intelligent dans le domaine de l'agroécologie
- 黑马笔记---Map集合体系
- Global and Chinese market of impact roll 2022-2028: Research Report on technology, participants, trends, market size and share
猜你喜欢

Pyechats 1.19 generate a web version of Baidu map

Fabric.js 将本地图像上传到画布背景
![[Yu Yue education] autumn 2021 reference materials of Tongji University](/img/50/5136359b89a5d047fe648637643ad0.jpg)
[Yu Yue education] autumn 2021 reference materials of Tongji University

Simple and practical accounting software, so that accounts can be checked

Express logistics quick query method, set the unsigned doc No. to refresh and query automatically

el form 表单validate成功后没有执行逻辑

Collectors. Groupingby sort

将光盘中的cda保存到电脑中

The underlying principle of go map (storage and capacity expansion)

How do I interview for a successful software testing position? If you want to get a high salary, you must see the offer
随机推荐
数学问题(数论)试除法做质数的判断、分解质因数,筛质数
Summary of database problems
关于Steam 教育的知识整理
Lm09 Fisher inverse transform inversion mesh strategy
7.1模拟赛总结
農業生態領域智能機器人的應用
National all Chinese Automatic Test Software apifox
Summary of MySQL key challenges (2)
About PROFIBUS: communication backbone network of production plant
Use of Baidu map
Save the CDA from the disc to the computer
Ansible installation and use
Latest: the list of universities and disciplines for the second round of "double first-class" construction was announced
Typescript function details
视差特效的原理和实现方法
06 装饰(Decorator)模式
[high speed bus] Introduction to jesd204b
Johnson–Lindenstrauss Lemma(2)
el-cascader回显只选中不显示的问题
Getting started with pytest -- description of fixture parameters