异步的利弊
利:
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:实现异步调用示例】 在软件开发中,特别是在高并发场景下,异步调用是一个重要的优化手段。同步调用是传统的执行方式,...然而,异步编程也增加了复杂性,因此在使用时需权衡利弊,合理设计系统架构。
- **性能优化**:合理使用撤销功能可以提高程序性能,但过度使用可能会增加复杂性,需要权衡利弊。 总的来说,Revocable Queue是一种强大的工具,它结合了异步处理的便利性和数据控制的灵活性,是JavaScript开发者...
在IT行业中,Web服务(WebService)是不同系统之间通信的一种常用方式。同步调用和异步调用是两种主要的调用方式,它们在处理Web服务...开发者应根据具体需求权衡这两种调用方式的利弊,以优化程序的性能和用户体验。
3. **数据丢失风险**:异步复制可能导致少量数据丢失,需要根据业务需求权衡同步与异步复制的利弊。 4. **扩展与优化**:可以结合其他高可用技术,如负载均衡和仲裁节点,进一步提高系统的可用性。 通过深入理解...
- 对于较大的资源,可能需要权衡预加载的利弊,因为它们可能会影响首屏加载时间。 6. **优化建议**: - 结合使用 `link rel="preload"` 和 `link rel="prefetch"`,前者适用于关键资源,后者适用于非关键资源,...
因此,在实际应用中,需要权衡这些利弊,合理设计和使用消息队列,以实现高效、稳定和解耦的系统架构。在面试中,理解并能详细解释异步架构和消息队列的作用及工作原理,将展现你对系统设计和优化的深入理解。
从技术角度看,需要进行这样的利弊权衡:在低功耗SRAM中,使用特殊栅极诱导漏极泄漏(GIDL)控制技术来控制待机电流,以控制待机功耗。这些技术涉及在上拉路径或下拉路径中增加额外的晶体管,这样存取延迟就会加剧...
4. **促进交互沟通**: 通过电子邮件、聊天室和虚拟社区,学生可以进行实时或异步交流,这不仅解决了自主学习中遇到的问题,也锻炼了他们的跨文化交际能力。 5. **模拟商务实践**: 老师可以引导学生通过网络进行国际...
### AJAX的优点与缺点 #### 一、引言 ...因此,在选择是否使用AJAX时,开发者需要根据项目的具体需求权衡其利弊。在实际应用中,合理地结合AJAX与其他技术,可以更好地发挥其优势,同时规避潜在的风险。
### .NET Core回调函数基础介绍 #### 一、概述 .NET Core是一个开源的、跨平台的框架,旨在为现代应用提供高效、灵活的基础。...然而,在实际开发过程中也需要权衡其利弊,避免不必要的复杂性和潜在的问题。
在JavaScript的世界里,jQuery库是广泛使用的,它简化了DOM操作、事件处理和Ajax交互等任务。`getScript()`是jQuery提供的一种便捷方法,用于异步加载JavaScript...在使用时,应结合具体需求权衡利弊,以实现最佳效果。
然而,字节码增强本身也可能带来一定的性能开销,需要权衡利弊。 9. **测试与调试**:对于基于字节码增强的协程实现,测试和调试会相对复杂,因为代码是在运行时动态修改的。可能需要特殊的工具和策略来确保代码的...
不过,需要注意的是,在小程序环境中,由于性能和体积的考虑,直接使用第三方库可能会有性能影响,因此在实际使用时需要权衡利弊。 总结来说,富文本解析让小程序能够展示丰富的信息,折线图帮助用户直观理解数据,...
`RedisClient.create()`方法会创建一个Redis客户端实例,然后调用`connect()`获取到一个`StatefulRedisConnection`,可以用来同步或异步地执行Redis命令。 在实际项目中,为了提高代码可读性和可维护性,我们通常会...
需要注意的是,这种方法可能会导致数据丢失或增加应用程序的复杂性,因此在使用前需要仔细评估其利弊。 3. **使用Lookaside List管理内存**:Lookaside List是一种用于快速分配和释放小块内存的机制。通过使用...
**AJAX原理详解** AJAX(Asynchronous JavaScript and XML)是一种在...然而,AJAX也有一些挑战,如SEO问题(搜索引擎可能无法正确爬取异步加载的内容)和浏览器兼容性问题,开发者需要权衡利弊并采取适当策略来解决。
不过需要注意的是,引入第三方库可能会影响小程序的加载速度,因此在使用时需要权衡利弊。 总的来说,基于微信小程序的开发,需要掌握富文本解析以展示复杂格式的文本,利用折线图库绘制数据图表,理解MD5加密确保...
综上所述,Ajax在Web开发中起着至关重要的作用,它通过异步交互提高了用户体验,同时也带来了诸如跨域、SEO和无障碍访问等问题,开发者需要权衡利弊,合理运用。随着技术的发展,如Fetch API和async/await的出现,...
**MQ的基本概念** 消息队列(Message Queue,简称MQ)是一种在分布式系统中用于通信的中间件技术。它充当生产者和消费者之间的桥梁,...在实际应用中,需要权衡利弊,确保MQ带来的好处能够抵消其带来的额外复杂性。