工作总结:异步消息处理,插入数据与查询数据解决方案

在使用MQ收发JSON报文执行接口调用的项目中,遇到数据落地后查询不到的问题,因网络延迟导致查询顺序颠倒。通过引入定时器延时调用接口暂时缓解,但非根本解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在我目前的项目中,接口调用通过MQ收发json报文消息来执行接口的调用,遇到了个问题,就是在发消息之前落地的数据需要在接收消息之后调用的接口中需要再次查询,于是出现了一个问题,查询时查不到那条数据,分析原因:接收消息后的查询动作,因为网络延迟等原因,在数据库数据落地之前进行,于是造成了落地与查询的顺序颠倒。

解决方案:收到消息后延时调用接口(无法根本解决此问题),但是还是提一下。

添加依赖:

<dependency>                
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.0</version>
</dependency>

实现代码:(定时器)执行一次,延时2000ms加载。

import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import org.apache.commons.lang3.concurrent.BasicThreadFactory;

ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(1,
                new BasicThreadFactory.Builder().namingPattern("example-schedule-pool-%d").daemon(true).build());
        executorService.schedule(new Runnable() {
            @Override
            public void run() {
                //执行的接口
            }
        },2000,TimeUnit.MILLISECONDS);

此方法肯定不是完美解决的方法,假设网络延迟超过了2000ms,那一样还是会造成上述问题,后续再思考下解决方案,再做更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值