SpringBoot+RabbitMQ实现延迟队列

Rabbitmq实现延时队列一般而言有两种形式:

       方式一:利用两个特性: Time To Live(TTL)、Dead Letter Exchanges(DLX)

       方式二:利用rabbitmq中的插件x-delay-message

方式一:

       此方式使用的是direct模式的Exchange交换机。

原理图:

原理图解释:

       1、声明延迟队列(普通队列声明方式),在声明时设置x-dead-letter-exchange和x-dead-letter-routing-key两个属性(具体含义参见下面代码中的解释);

       2、绑定延迟队列到交换机DEAD_LETTER_EXCHANGE(普通交换机绑定方式,不要被死信交换机这个名字忽悠了),注意,要指定路由键DELAY_ROUTING_KEY

       3、在消息生产者中向指定交换机DEAD_LETTER_EXCHANGE和指定路由键DELAY_ROUTING_KEY发送消息,消息会被发送到延迟队列DELAY_QUEUE上;

       4、注意,延迟队列DELAY_QUEUE没有消费者接收的,即在消费者中不要监听此延迟队列。如果延迟队列DELAY_QUEUE有消费者的话,那么此队列中的消息就会被立即消费,而不会因为设置的过期时间到期后过期,也就不会成为死信(Dead Letter),那更不会再向绑定的死信交换机发送信息--也就不会路由到新的队列。

       5、在延迟队列中的消息到了过期时间之后,因为设置了x-dead-letter-exchange和x-dead-letter-routing-key两个属性,队列中的消息会变成死信消息,之后会根据绑定的死信交换机和路由键将此死信消息重新发送到指定的交换机IMMEDIATE_EXCHANGE到达指定队列IMMEDIATE_QUEUE,消费者中实际监听的是最后这个IMMEDIATE_QUEUE队列,至此,实现了延迟队列的功能。

方式一常量配置:

package com.shengquan.config;
/**
 *
@author:shengquan
 
* @Date:2019/10/11 17:30
 */

public class RabbitMQDelayConstants {
   
public static final String IMMEDIATE_QUEUE = "immediate_queue";                      //立即消费队列
    public static final String DELAY_QUEUE = "delay_queue";                              //延迟队列
    public static final String IMMEDIATE_EXCHANGE = "immediate_exchange";
   
public static final String DEAD_LETTER_EXCHANGE = "dead_letter_exchange";            //死信交换机
    public static final String IMMEDIATE_ROUTING_KEY = "immediate_routing_key";          //立即消费路由键
    public static final String DELAY_ROUTING_KEY = "delay_routing_key";                  //延迟路由键
}

方式一配置类:

队列声明、交换机声明、队列与交换机的绑定配置类:

package com.shengquan.config;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,针对您的问题,以下是我对大众商城的设计思路: 1. 架构设计 大众商城的整体架构采用微服务架构设计,将各个模块拆分为不同的服务,以实现服务之间的解耦,减小维护成本。使用Spring Cloud作为微服务框架,采用Eureka作为服务注册中心,Zuul作为网关来提供负载均衡、流量限制等功能。 2. 数据库设计 考虑到大众商城数据量较大,我们选用关系型数据库MySQL进行数据存储,采用主从复制技术来实现数据的高可用性。对于数据安全,我们使用阿里云RDS提供的数据加密技术和数据备份功能,确保数据的可靠性和安全性。 3. 技术选型 后端技术选用Spring Boot作为基础框架,使用MyBatis实现ORM映射;前端技术选用Bootstrap框架实现响应式布局,使用Thymeleaf作为模板引擎,通过AJAX技术实现数据的异步加载和交互。 消息队列技术选用RabbitMQ实现异步消息传递,同时利用RabbitMQ自带的延迟消息功能来解决消息的定时发送问题。 4. 缓存方案 由于大众商城对数据的访问比较频繁,所以我们在架构中加入了Redis缓存,通过对常用数据的缓存来提升系统的响应速度和性能。 5. 安全性 系统安全方面,我们采用JWT令牌的方式实现用户登录和认证,同时对敏感数据采用AES加密算法进行加密,保证系统的数据安全性和用户隐私保护。 以上是大众商城的设计思路,希望能对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值