`
y806839048
  • 浏览: 1121388 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

异步的利弊

阅读更多

 

 

异步的利弊

 

利:

1,异步避免http请求过长尝试,需要处理超时还可以增加超时时间

 

弊:

1,异步在有顺序依赖的结果变量的引用问题,异步a的结果或则中间变量不能被下游的b及时用到

   可以用线程的join方法控制,或者用条件唤醒控制或者调整位置

 

 

 

 

/**

* 投保结果通知

*/

@Override

public ApiResponse insureNotify(InsureNotifyRequest insureNotifyRequest, InsureApply insureApply) throws Exception {

// 如果投保成功,则判断有无发送银行要求

if (InsureResultStatusEnum.PASS.getStatus().equals(insureNotifyRequest.getStatus())

&& !StringUtil.isBlank(insureApply.getBankCode())

&& !StringUtil.isBlank(insureApply.getBankTradeCode())) {

// 银行发送信息

taskExecutor.execute(() -> {

FacadeSendRequest facadeSendRequest = new FacadeSendRequest();

facadeSendRequest.setApplyNo(insureNotifyRequest.getApplserialno());

facadeSendRequest.setChannelCode(BankTypeEnum.ASIA.getType());

facadeSendRequest.setBankCode(insureApply.getBankCode());

facadeSendRequest.setPacket(insureApply.getBankRequestData());

facadeSendRequest.setTradeCode(insureApply.getBankTradeCode());

facadeService.send(facadeSendRequest);

});

 

}

// 将返回状态跟新

taskExecutor.execute(() -> {

insureApply.setInsureCplyno(insureNotifyRequest.getCplyno());

insureApply.setInsureUrl(insureNotifyRequest.getCplyurl());

insureApply.setStatus(insureNotifyRequest.getStatus());

insureApply.setUpdateTime(new Date());

if (insureApplyMapper.updateInsureApplyBySerialno(insureApply) < 1)

logger.error("数据库操作失败updateInsureApplyBySerialno[{}]", JSONObject.toJSONString(insureApply));

//更新申请列表的核保状态,保单号---------------------------------------这个之前在异步之外,insureApply.getStatus(),由于异步问题这里用insureNotifyRequest.getStatus()

TApprovalResult tApprovalResult = new TApprovalResult();

//tApprovalResult.setApplyNo(insureApply.getApplyNo());

tApprovalResult.setInsureRes(insureNotifyRequest.getStatus());

tApprovalResult.setInsureCplyno(insureNotifyRequest.getCplyno());

//tApprovalResult.setInsureSerialno(insureApply.getInsureSerialno());

Example example = new Example(TApprovalResult.class);

Example.Criteria criteria = example.createCriteria();

//criteria.andCondition("applyNo",insureApply.getApplyNo());

criteria.andEqualTo("applyNo",insureApply.getApplyNo());

if(tApprovalResultMapper.updateByExampleSelective(tApprovalResult,example)<1){

logger.error("数据库操作失败updateByExampleSelective[{}]", JSONObject.toJSONString(tApprovalResult));

}

});

 

//返回的渠道的时候,电子保单url替换成外网的url

if(!StringUtil.isBlank(insureNotifyRequest.getCplyurl())){

String cplyUrl = insureNotifyRequest.getCplyurl();

cplyUrl = cplyUrl.replace(cplyUrl.substring(0, cplyUrl.indexOf("/h5img/app")), apiinsOuterUrl);

insureNotifyRequest.setCplyurl(cplyUrl);

}

FacadeSendRequest facadeSendRequest = new FacadeSendRequest();

facadeSendRequest.setApplyNo(insureNotifyRequest.getApplserialno());

facadeSendRequest.setChannelCode(BankTypeEnum.ASIA.getType());

facadeSendRequest.setBankCode(insureApply.getChannelCode());

facadeSendRequest.setPacket(JSONObject.toJSONString(insureNotifyRequest));

facadeSendRequest.setTradeCode(TradeEnum.S001.getTcode());

 

 /////////////之前的位置=================================== 放在这个位置insureApply.getStatus()第一次获取不到,更新不了状态

 

//记录统计的方法,已经有的话更新,没有的话插入

TApprovalStatistics tApprovalStatistics = new TApprovalStatistics();

tApprovalStatistics.setApplyNo(insureApply.getApplyNo());

List<TApprovalStatistics> tApprovalStatisticss= tApprovalStatisticsMapper.select(tApprovalStatistics);

if(tApprovalStatisticss==null || tApprovalStatisticss.size()==0){

tApprovalStatistics.setStatus(insureApply.getStatus());

tApprovalStatistics.setCreateTime(new Date());

tApprovalStatisticsMapper.insert(tApprovalStatistics);  //需要具体设置值?????

}else{

TApprovalStatistics ts = tApprovalStatisticss.get(0);

tApprovalStatistics.setStatus(insureApply.getStatus());

tApprovalStatistics.setUpdateTime(new Date());

tApprovalStatistics.setId(ts.getId());

tApprovalStatisticsMapper.updateByPrimaryKeySelective(tApprovalStatistics);

}

 

 

 

 

 

//houbank特例:houbank渠道对于投保通知接口,根据业务不同,分不同的接口

if("BRH".equals(insureApply.getBankCode()))

facadeSendRequest.setUrl("1");

else

facadeSendRequest.setUrl("2");

return facadeService.send(facadeSendRequest);

}

 

分享到:
评论

相关推荐

    异步和同步数据通信的区别及其特点

    异步和同步数据通信是两种常见的串行传输方式,它们在长距离通信中扮演着重要角色,以确保数据准确无误地从发送方传递到接收方。这两种方式的主要区别在于如何处理时钟信号和数据传输的同步。 1. 异步传输...

    Spring Async:实现异步调用示例.docx

    【Spring Async:实现异步调用示例】 在软件开发中,特别是在高并发场景下,异步调用是一个重要的优化手段。同步调用是传统的执行方式,...然而,异步编程也增加了复杂性,因此在使用时需权衡利弊,合理设计系统架构。

    RevocableQueue专门的异步队列数据结构

    - **性能优化**:合理使用撤销功能可以提高程序性能,但过度使用可能会增加复杂性,需要权衡利弊。 总的来说,Revocable Queue是一种强大的工具,它结合了异步处理的便利性和数据控制的灵活性,是JavaScript开发者...

    同步调用和异步调用WebService

    在IT行业中,Web服务(WebService)是不同系统之间通信的一种常用方式。同步调用和异步调用是两种主要的调用方式,它们在处理Web服务...开发者应根据具体需求权衡这两种调用方式的利弊,以优化程序的性能和用户体验。

    Postgresql主从异步流复制方案的深入探究

    3. **数据丢失风险**:异步复制可能导致少量数据丢失,需要根据业务需求权衡同步与异步复制的利弊。 4. **扩展与优化**:可以结合其他高可用技术,如负载均衡和仲裁节点,进一步提高系统的可用性。 通过深入理解...

    一个Webpack插件使用linkrelpreload自动连接异步

    - 对于较大的资源,可能需要权衡预加载的利弊,因为它们可能会影响首屏加载时间。 6. **优化建议**: - 结合使用 `link rel="preload"` 和 `link rel="prefetch"`,前者适用于关键资源,后者适用于非关键资源,...

    23丨 异步架构:如何避免互相依赖的系统间耦合?.pdf

    因此,在实际应用中,需要权衡这些利弊,合理设计和使用消息队列,以实现高效、稳定和解耦的系统架构。在面试中,理解并能详细解释异步架构和消息队列的作用及工作原理,将展现你对系统设计和优化的深入理解。

    存储/缓存技术中的在异步SRAM中实现速度与功耗的完美平衡

     从技术角度看,需要进行这样的利弊权衡:在低功耗SRAM中,使用特殊栅极诱导漏极泄漏(GIDL)控制技术来控制待机电流,以控制待机功耗。这些技术涉及在上拉路径或下拉路径中增加额外的晶体管,这样存取延迟就会加剧...

    2022年商务英语教学中计算机网络利弊分析.docx

    4. **促进交互沟通**: 通过电子邮件、聊天室和虚拟社区,学生可以进行实时或异步交流,这不仅解决了自主学习中遇到的问题,也锻炼了他们的跨文化交际能力。 5. **模拟商务实践**: 老师可以引导学生通过网络进行国际...

    ajax的优点与缺点

    ### AJAX的优点与缺点 #### 一、引言 ...因此,在选择是否使用AJAX时,开发者需要根据项目的具体需求权衡其利弊。在实际应用中,合理地结合AJAX与其他技术,可以更好地发挥其优势,同时规避潜在的风险。

    .net core 回调函数基础介绍.docx

    ### .NET Core回调函数基础介绍 #### 一、概述 .NET Core是一个开源的、跨平台的框架,旨在为现代应用提供高效、灵活的基础。...然而,在实际开发过程中也需要权衡其利弊,避免不必要的复杂性和潜在的问题。

    jQuery中的getScript()方法

    在JavaScript的世界里,jQuery库是广泛使用的,它简化了DOM操作、事件处理和Ajax交互等任务。`getScript()`是jQuery提供的一种便捷方法,用于异步加载JavaScript...在使用时,应结合具体需求权衡利弊,以实现最佳效果。

    基于Java字节码增强技术实现的协程Demo.zip

    然而,字节码增强本身也可能带来一定的性能开销,需要权衡利弊。 9. **测试与调试**:对于基于字节码增强的协程实现,测试和调试会相对复杂,因为代码是在运行时动态修改的。可能需要特殊的工具和策略来确保代码的...

    富文本解析,折线图,MD5,bluebird(微信小程序)

    不过,需要注意的是,在小程序环境中,由于性能和体积的考虑,直接使用第三方库可能会有性能影响,因此在实际使用时需要权衡利弊。 总结来说,富文本解析让小程序能够展示丰富的信息,折线图帮助用户直观理解数据,...

    java基于UNIX域套接字(unix domain socket)连接redis

    `RedisClient.create()`方法会创建一个Redis客户端实例,然后调用`connect()`获取到一个`StatefulRedisConnection`,可以用来同步或异步地执行Redis命令。 在实际项目中,为了提高代码可读性和可维护性,我们通常会...

    一个对Winsock完成端口模型封装的类的研究文档

    需要注意的是,这种方法可能会导致数据丢失或增加应用程序的复杂性,因此在使用前需要仔细评估其利弊。 3. **使用Lookaside List管理内存**:Lookaside List是一种用于快速分配和释放小块内存的机制。通过使用...

    AJAX原理详解

    **AJAX原理详解** AJAX(Asynchronous JavaScript and XML)是一种在...然而,AJAX也有一些挑战,如SEO问题(搜索引擎可能无法正确爬取异步加载的内容)和浏览器兼容性问题,开发者需要权衡利弊并采取适当策略来解决。

    基于微信小程序的富文本解析,折线图,MD5,bluebird.zip

    不过需要注意的是,引入第三方库可能会影响小程序的加载速度,因此在使用时需要权衡利弊。 总的来说,基于微信小程序的开发,需要掌握富文本解析以展示复杂格式的文本,利用折线图库绘制数据图表,理解MD5加密确保...

    ajax

    综上所述,Ajax在Web开发中起着至关重要的作用,它通过异步交互提高了用户体验,同时也带来了诸如跨域、SEO和无障碍访问等问题,开发者需要权衡利弊,合理运用。随着技术的发展,如Fetch API和async/await的出现,...

    RabbitMQ基础.pptx

    **MQ的基本概念** 消息队列(Message Queue,简称MQ)是一种在分布式系统中用于通信的中间件技术。它充当生产者和消费者之间的桥梁,...在实际应用中,需要权衡利弊,确保MQ带来的好处能够抵消其带来的额外复杂性。

Global site tag (gtag.js) - Google Analytics