拄杖忙学轻声码
希望学习的同时也能和大家交流分享技术
展开
-
RabbitMQ实现订单超时设计思路、以及在订单过期临界点支付成功如何处理
场景:我们知道用 RabbitMQ 的延时队列可以实现用户下单后在 xxx 时间内未支付,需要自动关闭订单。但如果用户在订单即将过期的最后一秒支付成功、那么这笔订单算不算正常下单?要不要释放库存?一、下单未支付超时自动关闭订单设计思路1、以 30分钟 为例,订单表必须的字段【1】订单状态:已下单、待出库、运输中、派送中、已取消、已关闭等【2】订单支付状态:已支付、未支付【3】订单过期时间:此字段可返回给前端,用于倒计时的起点。取值为用户下单时候订单信息落库时间+30分钟,下单接口可使用异步线程同时把订原创 2022-12-07 11:17:46 · 2956 阅读 · 0 评论 -
RabbitMQ消费失败重试策略、及重试策略应用场景详解
【2】比如我们在消费过程中,业务代码出现异常(空指针、除数为0等)这类代码不健壮导致的异常,那么这时候需要重试吗?当然不需要重试,因为业务代码异常就算重试再多次也依然会异常,代码异常需要发版修复解决,所以重试没有意义。RabbitMQ消费者一般情况下,如果消费失败出现异常,那么消费端默认是无限重试消费,这样就会带来非常不好的一个情况,就是陷入死循环,一直报错一直重试。【2】业务代码出现异常(空指针、除数为0等)这类代码不健壮导致的异常,不需要重试,没有意义。【3】异常不需要触发重试策略的消息,原创 2022-12-01 01:29:16 · 8496 阅读 · 4 评论 -
RabbitMQ防止消息重复消费、保证异步消息的幂等性
【2】这时候消息又需要延迟、又需要获取发送端的审核后的总金额,所以消费每条消息时要仔细判断满足计算积分的前置条件、并保证消息的幂等性(因为消息是异步并延迟的,而发送端事务已经提交,所以消费每条消息时候拿到的结果金额都是一致的,都满足计算积分条件),从而要保证消息幂等性、避免一个核销单多次写入积分信息表。【1】如果是特殊业务场景,例如:某一条数据或某一批数据,审核或核销后根据对账金额、或应收金额、或服务费金额等做积分发放,每核销一次发送一条消息,直到把全部对账单都核销完,才允许计算积分。原创 2022-11-26 23:37:03 · 2853 阅读 · 0 评论 -
RabbitMQ消费端报:delivery acknowledgement on channel 5 timed out. Timeout value used: 1800000 ms. This t
【2】编辑 rabbitmq.conf 文件,如果没有此文件请创建名为 rabbitmq.conf 文件。【1】进入 rabbitmq 容器,cd 到 /etc/rabbitmq/ 目录。1、rabbitmq开启手动确认模式之后,但是在消费消息之后没有确认导致。2、在 rabbitmq 服务端的配置文件中,禁用或配置更长的超时时间。1、编辑 rabbitmq.conf 文件,在文件中添加如下内容。1、在消费端消费后,无论消费正常还是异常,都要ack确认。2、消息确认超时的间隔太短导致。原创 2022-11-25 14:48:45 · 4165 阅读 · 0 评论 -
RabbitMQ报:received the value ‘dead_direct_exchange_0‘ of type ‘longstr‘ but current is none
queue 队列已经存在,但是启动时试图设定一个 x-dead-letter-exchange 参数,这和服务器上已有的队列参数定义不一样,server 不允许所以报错。【1】交换机如果原先 Broker 中已经存在了,通过代码初始化改动的话可能也会出现此问题,需要注意这一点。在服务器管理界面,删除已有队列、重新 declare 即可。原创 2022-11-25 11:37:17 · 1763 阅读 · 0 评论 -
RabbitMQ的延时队列和死信队列
1、在 RabbitMQ 中,没有严格意义上的死信队列,所谓死信队列和正常队列没有太大区别,都是需要创建自己的Exchange、Routingkey、Queue,只不过死信队列的 Exchange 和 RoutingKey 要作为参数绑定到正常队列(也可能是延时队列)上,根据参数策略决定是否进入死信队列。2、死信队列和延时队列可以相互调换使用,例如先发送消息给延时队列(其中配置的有延时策略),当消息达到延长的时间后,再丢入正常的业务队列中。【3】超时、超过队列最大容量(溢出)的消息,也会进入死信队列。原创 2022-11-18 02:04:14 · 1790 阅读 · 0 评论 -
RabbitMQ的队列、交换机类型的概念与作用
(8)x-single-active-consumer:表示队列是否是单一活动消费者,true时,注册的消费组内只有一个消费者消费消息,其他被忽略,false时消息循环分发给所有消费者(默认false)(7)x-dead-letter-routing-key:死信消息路由键,在消息发送到死信交换器时会使用该路由键,如果不设置,则使用消息的原来的路由键值。(4)x-max-length-bytes:队列消息内容占用最大空间,受限于内存大小,超过该阈值则从队列头部开始删除消息;到底如何操作取决于交换机的类型。原创 2022-11-17 00:09:14 · 791 阅读 · 0 评论 -
Docker安装RabbitMQ教程
1、--hostname:指定主机名(RabbitMQ 的一个重要注意事项是它根据所谓的 节点名称 存储数据,默认为主机名),也可以理解为 rabbitmq 容器的落脚点目录。也可以创建数据卷,使用 -v 数据卷名称:/etc/rabbitmq/ 把 rabbitmq.conf 配置文件挂载到宿主机,可以配置消息确认超时等。2、第一个 -p 是web管理页面访问端口。账号和密码默认为:guest/guest。3、第二个 -p 是服务应用连接端口。四、进入容器,启动插件后台管理功能。原创 2022-09-04 04:45:27 · 705 阅读 · 0 评论 -
Linux系统 CentOS 8.x、9.x 安装RabbitMQ教程
【1】把下载好的 erlang-rpm包、socat-rpm包、rabbitmq-server-rpm包 上传到linux服务器目录下,以供安装。账号、密码默认均为:guest。(1)、更新 yum 工具。(3)、安装基础编译工具库。erlang 安装成功。原创 2022-04-23 08:57:53 · 2095 阅读 · 0 评论