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

评析网站建设报价单网络广告投放公司

评析网站建设报价单,网络广告投放公司,网络营销的特点与优势,网络营销策划实施方案在分布式系统中,RabbitMQ 自身不直接提供消息幂等性保障机制,但可通过业务逻辑设计和技术组合实现消息处理的幂等性。以下是 8 种核心实现方案及最佳实践: 一、消息唯一标识符 (Message Deduplication) 原理 每条消息携带全局唯一ID&#xff…

在分布式系统中,RabbitMQ 自身不直接提供消息幂等性保障机制,但可通过业务逻辑设计和技术组合实现消息处理的幂等性。以下是 8 种核心实现方案及最佳实践:


一、消息唯一标识符 (Message Deduplication)

  1. 原理

    • 每条消息携带全局唯一ID(如 UUID、Snowflake ID)
    • 消费者维护已处理消息ID的存储(Redis/DB)
  2. 实现步骤

    // 生产者端
    MessageProperties props = new MessageProperties();
    props.setMessageId(UUID.randomUUID().toString());
    Message message = new Message(body.getBytes(), props);// 消费者端
    @RabbitListener(queues = "order_queue")
    public void process(Message message) {String msgId = message.getMessageProperties().getMessageId();if (redis.setnx(msgId, "processed") == 1) {// 处理业务逻辑// 成功后设置过期时间防止存储膨胀redis.expire(msgId, 72 * 3600); } else {// 幂等拦截}
    }
    

二、版本号控制 (Optimistic Concurrency Control)

  1. 适用场景
    数据更新类操作(如账户余额修改)

  2. 实现方案

    -- 消息体包含数据版本号
    UPDATE account 
    SET balance = new_balance, version = version + 1 
    WHERE id = 123 AND version = current_version;
    

三、状态机驱动 (State Machine)

  1. 应用场景
    订单状态流转(创建→支付→发货)

  2. 实现示例

    public void handleOrderMessage(OrderMessage msg) {Order order = orderDao.get(msg.getOrderId());if (order.getStatus() != msg.getExpectedStatus()) {log.warn("状态不匹配,当前状态:{}", order.getStatus());return;}// 执行状态变更逻辑
    }
    

四、业务唯一键约束

  1. 实现方式
    CREATE TABLE payment_records (id BIGINT PRIMARY KEY,order_no VARCHAR(64) UNIQUE, -- 业务唯一键amount DECIMAL(10,2)
    );-- 插入时捕获唯一键冲突
    try {insertPaymentRecord();
    } catch (DuplicateKeyException e) {// 幂等处理
    }
    

五、消息确认策略优化

  1. 关键配置

    spring:rabbitmq:listener:simple:acknowledge-mode: manual  # 手动ACKretry:enabled: truemax-attempts: 3         # 最大重试次数
    
  2. 处理逻辑

    @RabbitListener(queues = "critical_queue")
    public void process(Message message, Channel channel) throws IOException {try {// 业务处理channel.basicAck(tag, false);} catch (Exception e) {channel.basicNack(tag, false, false); // 直接进入死信队列}
    }
    

六、分布式锁机制

  1. Redis 分布式锁示例
    public void processWithLock(Message msg) {String lockKey = "msg_lock:" + msg.getId();try {if (redisLock.tryLock(lockKey, 30)) {// 真正的业务处理}} finally {redisLock.unlock(lockKey);}
    }
    

七、时序控制 (Timestamp Validation)

  1. 实现逻辑
    if (message.getEventTime() < lastProcessedTime.get()) {log.info("丢弃过期消息,事件时间:{}", message.getEventTime());return;
    }
    

八、消息轨迹追踪表

  1. 设计表结构

    CREATE TABLE message_log (message_id VARCHAR(64) PRIMARY KEY,status ENUM('PROCESSING','SUCCESS','FAILED'),processed_time DATETIME,retry_count INT DEFAULT 0
    );
    
  2. 处理流程

    // 开启事务
    beginTransaction();
    try {// 1. 插入消息记录insertMessageLog(msgId, "PROCESSING");// 2. 执行业务操作processBusinessLogic();// 3. 更新状态updateMessageStatus(msgId, "SUCCESS");commit();
    } catch (Exception e) {rollback();
    }
    

最佳实践组合建议

  1. 金融交易场景
    唯一ID + 版本号控制 + 数据库唯一约束 + 分布式锁

  2. 电商订单场景
    状态机 + 业务唯一键 + 消息轨迹表

  3. 日志处理场景
    时序验证 + Redis去重 + 自动重试策略


注意事项

  1. 存储选择权衡

    • Redis: 高性能但存在数据丢失风险
    • 数据库: 可靠性高但性能较低
    • 建议:关键业务使用DB+缓存双写
  2. 清理策略

    • 设置合理的TTL(例如72小时)
    • 定时任务清理已处理记录
  3. 性能优化

    • 使用Bloom Filter减少内存消耗
    • 批量查询优化(如一次查询1000个ID是否存在)

通过以上方案组合,可在不同业务场景中实现可靠的幂等处理,建议根据实际业务压力和数据一致性要求选择合适的实现层级。


文章转载自:

http://HZF9cCVi.xpmhs.cn
http://yO2IBiAh.xpmhs.cn
http://oK8XV4P0.xpmhs.cn
http://gmXnRVKi.xpmhs.cn
http://EdjsnKF4.xpmhs.cn
http://EQYJEUjT.xpmhs.cn
http://vbagLfIV.xpmhs.cn
http://9aEuCmJt.xpmhs.cn
http://MKsbFBti.xpmhs.cn
http://uGyICFNI.xpmhs.cn
http://IyCt8Nx7.xpmhs.cn
http://1ZdFcMzG.xpmhs.cn
http://1Vc1RoVh.xpmhs.cn
http://mBEXaFx5.xpmhs.cn
http://tYIpFNSM.xpmhs.cn
http://cZwXuYww.xpmhs.cn
http://ShwEEcoY.xpmhs.cn
http://RE5omKJV.xpmhs.cn
http://b3TPgjoA.xpmhs.cn
http://XMExCzRH.xpmhs.cn
http://gMDY14Js.xpmhs.cn
http://1uLJ1hEm.xpmhs.cn
http://U0V2OGfd.xpmhs.cn
http://LH0k4459.xpmhs.cn
http://PN3q5WGv.xpmhs.cn
http://lu29FEva.xpmhs.cn
http://v51rK4Lz.xpmhs.cn
http://tNERMlXL.xpmhs.cn
http://QJtOF9Yq.xpmhs.cn
http://fjDGvIvK.xpmhs.cn
http://www.dtcms.com/wzjs/633817.html

相关文章:

  • 行业网站网址给wordpress首页添加公告栏
  • 网站页面好了怎么做后端中国建设监理协会化工监理分会网站
  • 做钢材都有什么网站永嘉专业网站设计公司
  • 班级响应式网站html格式谁的网站模板利于优化
  • 河南宏业建设管理有限公司网站服装花型图案设计网站
  • 秦皇岛做网站优化公司wordpress微信h5登录
  • 泰安微信网站建设郑州做网站的多不多
  • 网站如何申请做网站一定要购买虚拟主机吗
  • 速成网站怎么做网页制作与设计命令
  • 游戏门户网站 织梦网站公司建设
  • 襄阳做淘宝网站推广网站后台管理默认密码
  • 网站管理 上传模板在线手机动画网站模板
  • 呼伦贝尔市规划建设局网站推广软件是什么
  • 做微信的微网站网站制作工具有哪些
  • 莆田哪里有做网站的做携程怎样的网站
  • 营销网站建设情况调查问卷网络彩票网站开发
  • 网站文章排序佳天下装饰公司怎么样
  • 网站建设财务上怎么处理零基础自学python
  • 网站下载音乐英文wordpress转中文
  • 一起合伙做项目的网站私人订制管理中心
  • 新网站开发费用wordpress下载链接 插件
  • 网站推广的具体方法如何进行网站维护
  • 怎么在网站上做音乐网站建设中 模板 下载
  • 企业网站建设的一般原则包括网站主机设置方法
  • html5单页网站模板网站建设课程设计心得体会
  • dede网站 远程生成公司名字大全列表
  • 建设银行有没有全球门户网站重庆网站seo好不好
  • 莆田网站建设开发小企业网站建设的基础知识
  • 公司展示类网站模板免费下载wordpress网站速度检测
  • 南通网站托管网页生成应用工具