package com.springboot.rabbitmq.example.demo5.config;
import java.util.HashMap;
import java.util.Map;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import lombok.extern.slf4j.Slf4j;
/**
* @method
* @author Mr yi
* @time 2019年6月23日
*/
@Configuration
@Slf4j
public class RabbitConfigDemo5 {
//队列名称
final static String queue = "queue_demo5";
//交换机名称
final static String exchangeName = "deom5Exchange";
// routingKey
final static String routingKey = "keyDemo5";
//死信消息队列名称
final static String deal_queue = "deal_queue_demo5";
//死信交换机名称
final static String deal_exchangeName = "deal_deom5Exchange";
//死信 routingKey
final static String dead_RoutingKey = "dead_routing_key";
//死信队列 交换机标识符
public static final String DEAD_LETTER_QUEUE_KEY = "x-dead-letter-exchange";
//死信队列交换机绑定键标识符
public static final String DEAD_LETTER_ROUTING_KEY = "x-dead-letter-routing-key";
@Autowired
private CachingConnectionFactory connectionFactory;
/**
*
* @method 定义队列(队列 绑定一个死信交换机,并指定routing_key)
* @author Mr yi
* @time 2019年6月29日
* @return
*/
@Bean
public Queue queueDemo5() {
// 将普通队列绑定到死信队列交换机上
Map<String, Object> args = new HashMap<>(2);
//args.put("x-message-ttl", 5 * 1000);//直接设置 Queue 延迟时间 但如果直接给队列设置过期时间,这种做法不是很灵活
//这里采用发送消息动态设置延迟时间,这样我们可以灵活控制
args.put(DEAD_LETTER_QUEUE_KEY, deal_exchangeName);
args.put(DEAD_LETTER_ROUTING_KEY, dead_RoutingKey);
return new Queue(RabbitConfigDemo5.queue, true, false, false, args);
}
//声明一个direct类型的交换机
@Bean
DirectExchange exchangeDemo5() {
return new DirectExchange(RabbitConfigDemo5.exchangeName);
}
//绑定Queue队列到交换机,并且指定routingKey
@Bean
Binding bindingDirectExchangeDemo5( ) {
return BindingBuilder.bind(queueDemo5()).to(exchangeDemo5()).with(routingKey);
}
//创建配置死信队列
@Bean
public Queue deadQueue5() {
Queue queue = new Queue(deal_queue, true);
return queue;
}
//创建死信交换机
@Bean
public DirectExchange deadExchange5() {
return new DirectExchange(deal_exchangeName);
}
//死信队列与死信交换机绑定
@Bean
public Binding bindingDeadExchange5() {
return BindingBuilder.bind(deadQueue5()).to(deadExchange5()).with(dead_RoutingKey);
}
/** @Bean
public RabbitTemplate rabbitTemplate(){
//若使用confirm-callback ,必须要配置publisherConfirms 为true
connectionFactory.setPublisherConfirms(true);
//若使用return-callback,必须要配置publisherReturns为true
connectionFactory.setPublisherReturns(true);
RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
//使用return-callback时必须设置mandatory为true,或者在配置中设置mandatory-expression的值为true
// rabbitTemplate.setMandatory(true);
// 如果消息没有到exchange,则confirm回调,ack=false; 如果消息到达exchange,则confirm回调,ack=true
rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() {
@Override
public void confirm(CorrelationData correlationData, boolean ack, String cause) {
if(ack){
log.info("消息发送成功:correlationData({}),ack({}),cause({})",correlationData,ack,cause);
}else{
log.info("消息发送失败:correlationData({}),ack({}),cause({})",correlationData,ack,cause);
}
}
});
//如果exchange到queue成功,则不回调return;如果exchange到queue失败,则回调return(需设置mandatory=true,否则不回回调,消息就丢了)
rabbitTemplate.setReturnCallback(new RabbitTemplate.ReturnCallback() {
@Override
public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {
log.info("消息丢失:exchange({}),route({}),replyCode({}),replyText({}),message:{}",exchange,routingKey,replyCode,replyText,message);
}
});
return rabbitTemplate;
}
**/
}
没有合适的资源?快使用搜索试试~ 我知道了~
springboot整合RabbitMQ实现延时队列的两种方式 教程及源码
共130个文件
class:49个
java:48个
yml:12个
3星 · 超过75%的资源 需积分: 49 33 下载量 135 浏览量
2019-06-29
15:19:14
上传
评论 4
收藏 121KB RAR 举报
温馨提示
springboot整合RabbitMQ实现延时队列的两种方式 教程及源码。参考博客:https://blog.csdn.net/qq_29914837/article/details/94070677
资源推荐
资源详情
资源评论
收起资源包目录
springboot整合RabbitMQ实现延时队列的两种方式 教程及源码 (130个子文件)
User.class 9KB
UserLog.class 4KB
RabbitConfigDemo5.class 3KB
RabbitConfigDemo3.class 3KB
ConsumersDemo3.class 3KB
RabbitConfigDemo6.class 3KB
ProducersDemo5.class 3KB
RabbitConfigDemo2.class 2KB
ProducersDemo3.class 2KB
ConsumersDemo3Deal.class 2KB
RabbitConfigDirect.class 2KB
RabbitConfigTopic.class 2KB
ConsumersDemo5Deal.class 2KB
ConsumersDemo6.class 2KB
RabbitConfigDemo1.class 2KB
RabbitConfigFanout.class 2KB
ConsumersDemo2.class 2KB
UserController.class 2KB
ConsumersLogDemo1.class 2KB
ProducersDemo6.class 2KB
ProducersDemo2.class 1KB
ProducersTopic.class 1KB
ProducersDirect.class 1KB
ProducersDemo1.class 1KB
ProducersWork.class 1KB
ProducersDemo6$1.class 1KB
ProducersFanout.class 1KB
ConsumersSimple.class 1KB
RabbimMqDirectTest.class 1KB
RabbimMqTopicTest.class 1KB
ProducersSimple.class 1KB
RabbimMqDemo2Test.class 1KB
RabbimMqDemo5Test.class 1KB
RabbimMqDemo6Test.class 1KB
RabbimMqDemo3Test.class 1KB
RabbimMqFanoutTest.class 1KB
RabbitMqSimpleTest.class 1KB
RabbimMqWorkTest.class 1KB
ConsumersDirectA.class 1KB
ConsumersDirectB.class 1KB
ConsumersFanoutA.class 1KB
ConsumersFanoutB.class 1KB
ConsumersTopicB.class 1KB
ConsumersTopicA.class 1KB
ConsumersWorkB.class 1KB
ConsumersWorkA.class 1KB
SpringBootRabbitMQApplication.class 789B
RabbitConfigSimple.class 737B
RabbitConfigWork.class 723B
.classpath 2KB
org.eclipse.wst.common.component 958B
org.eclipse.wst.jsdt.ui.superType.container 49B
.factorypath 23KB
success.html 128B
success.html 128B
RabbitConfigDemo5.java 5KB
RabbitConfigDemo3.java 5KB
RabbitConfigDemo6.java 4KB
RabbitConfigDemo2.java 4KB
User.java 2KB
RabbitConfigFanout.java 2KB
RabbitConfigDirect.java 2KB
ConsumersDemo3.java 2KB
RabbitConfigTopic.java 2KB
ProducersDemo3.java 2KB
ProducersDemo6.java 2KB
ProducersDemo5.java 2KB
RabbitConfigDemo1.java 2KB
ConsumersDemo5Deal.java 1KB
ConsumersDemo3Deal.java 1KB
ConsumersDemo6.java 1KB
ConsumersLogDemo1.java 1KB
ProducersDirect.java 1KB
ProducersDemo2.java 1KB
ConsumersDemo2.java 1KB
ProducersTopic.java 1KB
UserController.java 1021B
UserLog.java 939B
ConsumersSimple.java 917B
ProducersDemo1.java 860B
ProducersFanout.java 788B
ProducersWork.java 734B
ProducersSimple.java 702B
RabbimMqDirectTest.java 693B
RabbimMqTopicTest.java 687B
RabbimMqDemo2Test.java 612B
RabbimMqDemo3Test.java 611B
RabbimMqDemo5Test.java 611B
RabbimMqDemo6Test.java 611B
RabbimMqFanoutTest.java 590B
RabbitMqSimpleTest.java 583B
RabbimMqWorkTest.java 571B
ConsumersDirectA.java 566B
ConsumersFanoutA.java 566B
ConsumersDirectB.java 566B
ConsumersFanoutB.java 566B
ConsumersTopicB.java 562B
ConsumersTopicA.java 562B
ConsumersWorkB.java 555B
ConsumersWorkA.java 555B
共 130 条
- 1
- 2
资源评论
- WangWeiChao_1232021-01-22假的,不要下载
- 云淡风轻_无名2020-08-20你好,pom文件中的: <parent> <groupId>com.springboot</groupId> <artifactId>springboot</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> 是那里的? 项目中有涉及到数据库的操作吗?如果没有为什么要配置数据库?如果有,有建表语句吗?
互联网叫兽
- 粉丝: 807
- 资源: 46
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功