rabbitmq实战系列2--springboot整合rabbitmq的插件实现延迟队列(2)
2020-04-24 10:36
645 查看
利用插件rabbitmq_delayed_message_exchange插件方式
1下载地址
2下载.ez文件,解压后放在rabbitmq的Plugins文件里
3命令行输入rabbitmq-plugins enable rabbitmq_delayed_message_exchange
4重启rabbitmq
编写配置
import java.util.HashMap; import java.util.Map; @Configuration public class ttlq { public static final String QUEUE_NAME = "delayed.queue"; public static final String EXCHANGE_NAME = "delayedExchange"; @Bean public Queue queue() { return new Queue(ttlq.QUEUE_NAME); } //配置默认的交换机 @Bean CustomExchange customExchange() { Map<String, Object> args = new HashMap<>(); args.put("x-delayed-type", "direct"); //参数二为类型:必须是x-delayed-message return new CustomExchange(ttlq.EXCHANGE_NAME, "x-delayed-message", true, false, args); } //绑定队列到交换器 @Bean Binding binding(Queue queue, CustomExchange exchange) { return BindingBuilder.bind(queue).to(exchange).with(ttlq.QUEUE_NAME).noargs(); } }
生产者
@Component public class ttltest { @Autowired RabbitTemplate template; public void send1(List<Integer> list){ SimpleDateFormat format=new SimpleDateFormat("hh:mm:ss"); System.out.println("发送时间:"+ format.format(new Date())); template.convertAndSend("delayedExchange","delayed.queue",list,message ->{ message.getMessageProperties().setHeader("x-delay", 20000);//注意和前面得不一样 return message; } ); } public void send2(String str){ SimpleDateFormat format=new SimpleDateFormat("hh:mm:ss"); System.out.println("第二个消息得发送时间:"+ format.format(new Date())); template.convertAndSend("delayedExchange","delayed.queue",str,message -> { message.getMessageProperties().setHeader("x-delay",2000); return message; }); } }
消费者
@Component @RabbitListener(queues = "delayed.queue") public class ttlConsumer2 { @RabbitHandler public void hand(List<Integer>list){ SimpleDateFormat format=new SimpleDateFormat("hh:mm:ss"); System.out.println("接收到了第一个消息,现在时间是:"+ format.format(new Date())); System.out.println(list.toString()); } @RabbitHandler public void hand1(String str){ SimpleDateFormat format=new SimpleDateFormat("hh:mm:ss"); System.out.println("接收到了第二个消息,现在时间是:"+format.format(new Date())); System.out.println(str); } }
测试类:
@Test public void test1(){ List<Integer>list = new LinkedList<>(); list.add(1); list.add(2); list.add(3); list.add(4); ttltest.send1(list); } @Test public void test2(){ ttltest.send2("hello world"); }
结果:
可以看到尽管第一个消息过期时间更长,但是第二个消息先被处理,没有发生队列阻塞现象
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- rabbitmq实战系列3--springboot整合rabbitmq实现优先级队列
- rabbitmq实战系列4--springboot整合rabbitmq实现限流与并发
- Spring Boot与RabbitMQ结合实现延迟队列的示例
- SpringBoot | 第三十八章:基于RabbitMQ实现消息延迟队列方案
- 集群与负载均衡系列(5)——消息队列之spring-boot整合Rabbitmq
- 实现简单秒杀抢购,使用SpringBoot整合Spring-data-redis 、 rabbitMQ消息队列、redis缓存
- dubbo2.5-spring4-mybastis3.2-springmvc4-mongodb3.4-redis3.2整合(十二)之 spring中RabbitMQ延迟队列的实现
- SpringBoot 集成 rabbitmq 简单实现通过队列进行,订单系统与库存系统,物流系统之间的信息交互
- [Spring Boot实战系列] - No.3 Spring boot 整合Mybatis
- ActiveMQ实战(六)--Spring整合ActiveMQ实现队列和主题发布订阅通信
- SpringBoot+Maven项目实战(6):整合Log4j和Aop,实现简单的日志记录
- SpringBoot整合RabbitMQ实现微服务间的异步消息沟通
- SpringBoot系列八:SpringBoot整合消息服务(SpringBoot 整合 ActiveMQ、SpringBoot 整合 RabbitMQ、SpringBoot 整合 Kafka)
- spring boot 2.x 系列 —— spring boot 整合 RabbitMQ
- SpringBoot整合RabbitMQ之 典型应用场景实战一
- springboot整合RabbitMQ延时队列
- Spring Boot系列(十二)Spring Boot整合ActiveQ实现消息收发和订阅
- springboot 和 rabbitmq 实现同步和异步队列
- SpringBoot整合RabbitMQ之典型应用场景实战一
- SpringBoot整合RabbitMQ之典型应用场景实战二