当前位置: 首页 > news >正文

融安有那几个网站做的比较好的国家高新技术企业名单

融安有那几个网站做的比较好的,国家高新技术企业名单,八佰yy影视,石家庄网站建设哪家好RabbitMQ 如何使用延迟队列 目录 前置条件场景描述RabbitMQ 延迟队列机制实现步骤 1. 安装 RabbitMQ 延迟队列插件2. 创建延迟队列和交换机3. 发布延迟消息4. 消费延迟消息 示例代码 1. 延迟队列配置2. 发布消息的 Producer 代码3. 消费消息的 Consumer 代码 注意事项 前置条…

RabbitMQ 如何使用延迟队列

目录

  1. 前置条件
  2. 场景描述
  3. RabbitMQ 延迟队列机制
  4. 实现步骤
    • 1. 安装 RabbitMQ 延迟队列插件
    • 2. 创建延迟队列和交换机
    • 3. 发布延迟消息
    • 4. 消费延迟消息
  5. 示例代码
    • 1. 延迟队列配置
    • 2. 发布消息的 Producer 代码
    • 3. 消费消息的 Consumer 代码
  6. 注意事项

前置条件

  • 操作系统:CentOS 7
  • RabbitMQ:版本 3.8.0+
  • Erlang:版本 21.0+
  • RabbitMQ 延迟队列插件:rabbitmq_delayed_message_exchange

场景描述

假设我们正在设计一个线上售卖电影票的系统,用户购票后有 15 分钟时间进行付款,如果用户在 15 分钟内未付款,订单将自动取消并释放电影票库存。这里,我们可以利用 RabbitMQ 的延迟队列机制,在用户购票时发送一条延迟消息到 RabbitMQ,并设定延迟时间为 15 分钟。如果用户未在 15 分钟内完成付款,延迟消息将被消费者接收并处理订单取消的逻辑。

RabbitMQ 延迟队列机制

RabbitMQ 本身不直接支持延迟队列功能,需要借助 rabbitmq_delayed_message_exchange 插件来实现。该插件为 RabbitMQ 提供了一种新的消息交换机类型——x-delayed-message,可以基于消息属性设置延迟时间,在设定的延迟时间后,将消息发送到目标队列。

实现步骤

1. 安装 RabbitMQ 延迟队列插件

# 下载插件
wget https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases/download/v3.8.0/rabbitmq_delayed_message_exchange-3.8.0.ez# 将插件移动到 RabbitMQ 插件目录
mv rabbitmq_delayed_message_exchange-3.8.0.ez /usr/lib/rabbitmq/lib/rabbitmq_server-3.8.0/plugins/# 启用插件
rabbitmq-plugins enable rabbitmq_delayed_message_exchange

2. 创建延迟队列和交换机

我们将使用 x-delayed-message 类型的交换机,并设定延迟队列,用于处理延迟消息。

# 创建交换机
rabbitmqadmin declare exchange name=delayed_exchange type=x-delayed-message \arguments='{"x-delayed-type":"direct"}'# 创建队列
rabbitmqadmin declare queue name=delayed_queue# 绑定交换机与队列
rabbitmqadmin declare binding source=delayed_exchange destination=delayed_queue routing_key=order.payment

3. 发布延迟消息

在发布消息时,可以设置消息属性 x-delay 来指定延迟时间。

# 使用 rabbitmqadmin 发布延迟消息
rabbitmqadmin publish exchange=delayed_exchange routing_key=order.payment \payload="{'order_id': '12345', 'status': 'PENDING_PAYMENT'}" \properties='{"headers":{"x-delay":900000}}'

4. 消费延迟消息

消费者将从延迟队列中消费消息并执行订单取消逻辑。

示例代码

1. 延迟队列配置

在 Spring Boot 项目中,可以通过以下配置来创建延迟交换机和队列。

@Configuration
public class RabbitConfig {public static final String DELAYED_EXCHANGE_NAME = "delayed_exchange";public static final String DELAYED_QUEUE_NAME = "delayed_queue";public static final String ROUTING_KEY = "order.payment";// 创建延迟交换机@Beanpublic CustomExchange delayedExchange() {Map<String, Object> args = new HashMap<>();args.put("x-delayed-type", "direct");return new CustomExchange(DELAYED_EXCHANGE_NAME, "x-delayed-message", true, false, args);}// 创建延迟队列@Beanpublic Queue delayedQueue() {return new Queue(DELAYED_QUEUE_NAME);}// 绑定延迟队列与交换机@Beanpublic Binding delayedBinding(Queue delayedQueue, CustomExchange delayedExchange) {return BindingBuilder.bind(delayedQueue).to(delayedExchange).with(ROUTING_KEY).noargs();}
}

2. 发布消息的 Producer 代码

@Component
public class OrderProducer {@Autowiredprivate RabbitTemplate rabbitTemplate;public void sendOrderMessage(String orderId) {Map<String, Object> message = new HashMap<>();message.put("order_id", orderId);message.put("status", "PENDING_PAYMENT");MessageProperties messageProperties = new MessageProperties();messageProperties.setHeader("x-delay", 15 * 60 * 1000); // 延迟 15 分钟Message msg = new Message(new ObjectMapper().writeValueAsBytes(message), messageProperties);rabbitTemplate.convertAndSend(RabbitConfig.DELAYED_EXCHANGE_NAME, RabbitConfig.ROUTING_KEY, msg);}
}

3. 消费消息的 Consumer 代码

@Component
public class OrderConsumer {@RabbitListener(queues = RabbitConfig.DELAYED_QUEUE_NAME)public void processOrderCancellation(Message message) {try {Map<String, Object> orderMessage = new ObjectMapper().readValue(message.getBody(), Map.class);String orderId = (String) orderMessage.get("order_id");// 取消订单逻辑System.out.println("Order " + orderId + " has been canceled due to non-payment.");} catch (Exception e) {e.printStackTrace();}}
}

注意事项

  1. 插件兼容性:请确保 rabbitmq_delayed_message_exchange 插件与您的 RabbitMQ 版本兼容,否则可能导致插件无法加载。
  2. Erlang 版本:RabbitMQ 依赖于 Erlang,因此确保您的 Erlang 版本满足 RabbitMQ 版本的最低要求。
  3. 延迟时间限制:合理设置延迟时间,避免消息被延迟过长时间导致系统不可预测的性能问题。
http://www.dt0577.cn/news/32438.html

相关文章:

  • wordpress与淘宝seo整体优化
  • 网站开发公司目前主营业务广东网约车涨价
  • 怎么创建一个网站宁波网络推广优化方案
  • 如何给网站做防御sem竞价推广
  • 网站主页面设计多少钱近日网站收录查询
  • 网络营销证书有什么用优化营商环境心得体会2023
  • 郑州网站建站百度收录怎么查询
  • 国家信息公示系统官网seo网站推广与优化方案
  • 网上怎么赚钱最快最有效关键词优化排名seo
  • 苏州建设工程检测协会网站近期的新闻消息
  • 做网站就是做信息整合网站建设推广服务
  • dw做的网站怎么在vs代写文章的平台有哪些
  • 大连网站建设选高合科技充电宝seo关键词优化
  • 如何做com的网站灰色词秒收录代发
  • 做拍客哪个网站好百度店铺注册
  • 安徽城乡建设厅网站哈尔滨网络优化公司有哪些
  • 编程如何自学搜索引擎优化是什么
  • 网站建设美化中期报告百度网盘网页版登录
  • 怎么建立微网站?2024年新闻时事热点论文
  • 济南优化网站软件开发工具
  • 做外贸有什么免费网站蓝牙耳机网络营销推广方案
  • 做暧昧的小视频网站2培训机构哪家好
  • 怎样讲卖灯的网站做的好更厉害的病毒2024
  • 上饶做网站公司站长资源平台
  • 宁波妇科最有名的医院seo渠道是什么意思
  • 做优化b2b网站广告公司推广方案
  • 中国矿山建设网站傻瓜式自助建站系统
  • b s网站系统如何做性能测试搜索seo是什么意思
  • 郑州直播网站建设免费收录链接网
  • 网站开发的一般步骤安卓aso优化