个性化网站建设多少钱响应式网站制作流程

pingmian/2025/10/8 16:14:07/文章来源:
个性化网站建设多少钱,响应式网站制作流程,wordpress 账号图片尺寸,流程优化四个方法工作中经常要和第三方做对接#xff0c;比如支付、电子合同等系统。操作成功之后#xff0c;第三方会发送异步的通知#xff0c;返回最终的处理结果#xff0c;使用异步而不是使用同步通知#xff0c;是为了加快系统响应速度#xff0c;防止线程阻塞。任务处理完成后通过…工作中经常要和第三方做对接比如支付、电子合同等系统。操作成功之后第三方会发送异步的通知返回最终的处理结果使用异步而不是使用同步通知是为了加快系统响应速度防止线程阻塞。任务处理完成后通过异步的通知发送给对应的服务端。之前对接微信支付完成支付后微信发送一个异步通知给服务端服务端根据支付通知修改状态通知规则看到以下的一段话。 其中有段话 重新发送通知直到成功为止在通知一直不成功的情况下微信总共会发起多次通知通知频率为15s/15s/30s/3m/10m/20m/30m/30m/30m/60m/3h/3h/3h/6h/6h - 总计 24h4m 微信为何要这么设计 微信结果通知本质就是发送一个网络请求到不同的服务器上既然是一个网络请求就可能因为各种原因导致请求超时或者失败比如 请求的服务器挂了网络发生了波动服务器响应异常 以上原因都会导致支付结果通知接收失败也就无法通知给用户。为了解决上述的问题就需要引入重试机制当请求无法应答时就需要重试几次保证请求能确认发送。 异步通知的重试机制 从微信支付通知可以引申到所有的异步通知或者和第三方对接时。如果要确保通知能被成功的接收就需要考虑请求失败的情况大部分都是需要使用重试机制。而重试机制是隔段时间不是固定的是越来越大的这是考虑到重试时由于网络故障或者服务器故障重启设备需要花一段时间而间隔时间越来越长就可以更大的保证请求可以被成功接收。 重复请求接口需要考虑重复请求的情况要设计成一个幂等性接口多次请求和请求一次的效果是一致的。 重试机制的实现 重试机制就是一个定时器隔一段时间执行一次没有预期的效果就再重复执行一次。 实现的难点就在于间隔的时间是不一致的如果时间的间隔是固定的话就可以使用定时任务。 方案一定时任务不可行 使用定时器每隔一段时间执行一次任务。在 SpringBoot 启动类添加 EnableScheduling 注解然后在执行的方法添加 Scheduled 注解。 Scheduled(fixedDelay 1000*2) public void test2() {Date date new Date();System.out.println(tesk2 date); }以上表示每隔 2 秒执行一次。间隔时间都是固定的这个不符合预期因为要求的时间间隔是依次增加的。 如果是间隔时间是固定的那定时任务就符合条件吗 如果是只有一条任务在执行执行不成功存放在 Redis 中然后定时执行任务如果任务执行成功就去掉任务。但是定时器还是会定时执行。 如果执行的任务很多的话前面的任务要等待后续的任务执行那延迟就很严重了就需要使用到多线程开启多个线程在《阿里Java开发手册》有一条: 线程资源必须通过线程池提供不允许在应用中自行显式创建线程。 定时任务有以下几个缺点不满足 时间间隔固定。只能单线程处理任务任务越多延迟性越久。 方案二线程池 定时任务 不可行 既然使用单线程会产生延迟就使用线程池来降低延迟因为发起请求属于 IO 密集型所以线程数设置成 CPU 个数的两倍在 SpringBoot 自定义一个线程池 Configuration public class ThreadPoolConfig {// 线程存活时间private static int keepAliveTime 10;// 调用线程运行多余任务RejectedExecutionHandler handler new ThreadPoolExecutor.CallerRunsPolicy();Bean(customerTaskExecutor)public TaskExecutor taskExecutor() {// 核心线程数int cores Runtime.getRuntime().availableProcessors()*2;ThreadPoolTaskExecutor executor new ThreadPoolTaskExecutor();executor.setCorePoolSize(cores);executor.setMaxPoolSize(cores);executor.setKeepAliveSeconds(keepAliveTime);executor.setRejectedExecutionHandler(handler);executor.setThreadNamePrefix(Custom-); // 线程名前缀executor.initialize();return executor;} } 其中核心线程数和最大线程数设置成一致拒绝策略使用调用线程运行多余的任务确保每个任务都能执行。然后添加一个异步方法. public interface AsyncService {void executeAsync(); }Service Slf4j public class AsyncServiceImpl implements AsyncService {OverrideAsync(customerTaskExecutor)public void executeAsync() {log.info(【开始执行任务】);// 延迟几秒try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}log.info(【结束执行任务】);} }使用 sleep 方法延迟模拟请求使用压测工具发起 100 次请求控制台输出如下 2023-10-31 18:00:32.792 INFO 53009 --- [ Custom-1] com.jeremy.threadpool.AsyncServiceImpl : 【开始执行任务】 2023-10-31 18:00:32.811 INFO 53009 --- [ Custom-2] com.jeremy.threadpool.AsyncServiceImpl : 【开始执行任务】 2023-10-31 18:00:32.813 INFO 53009 --- [ Custom-3] com.jeremy.threadpool.AsyncServiceImpl : 【开始执行任务】 2023-10-31 18:00:32.814 INFO 53009 --- [ Custom-4] com.jeremy.threadpool.AsyncServiceImpl : 【开始执行任务】 2023-10-31 18:00:32.816 INFO 53009 --- [ Custom-5] com.jeremy.threadpool.AsyncServiceImpl : 【开始执行任务】 2023-10-31 18:00:32.817 INFO 53009 --- [ Custom-6] com.jeremy.threadpool.AsyncServiceImpl : 【开始执行任务】 2023-10-31 18:00:32.819 INFO 53009 --- [ Custom-7] com.jeremy.threadpool.AsyncServiceImpl : 【开始执行任务】 2023-10-31 18:00:32.820 INFO 53009 --- [ Custom-8] com.jeremy.threadpool.AsyncServiceImpl : 【开始执行任务】 2023-10-31 18:00:32.821 INFO 53009 --- [ Custom-9] com.jeremy.threadpool.AsyncServiceImpl : 【开始执行任务】 2023-10-31 18:00:32.823 INFO 53009 --- [ Custom-10] com.jeremy.threadpool.AsyncServiceImpl : 【开始执行任务】 2023-10-31 18:00:32.824 INFO 53009 --- [ Custom-11] com.jeremy.threadpool.AsyncServiceImpl : 【开始执行任务】 2023-10-31 18:00:32.825 INFO 53009 --- [ Custom-12] com.jeremy.threadpool.AsyncServiceImpl : 【开始执行任务】 2023-10-31 18:00:33.296 INFO 53009 --- [ Custom-1] com.jeremy.threadpool.AsyncServiceImpl : 【结束执行任务】 2023-10-31 18:00:33.296 INFO 53009 --- [ Custom-1] com.jeremy.threadpool.AsyncServiceImpl : 【开始执行任务】采用线程池执行的任务多个线程同时执行任务能有效的降低了任务的延迟性。定时任务间隔固定时间从数据库 Mysql 或者 Redis 获取需要请求的数据同时执行请求。 这样就有几个问题 间隔是固定的。空闲的时候没有请求执行到了执行时间大量的请求在执行导致**闲的时候闲死忙的时候忙死。**资源得不到很好的利用。 除了定时器还有什么组件可以解决上面问题那就是使用消息中间件了。 方案三消息中间件 线程池可行 使用线程池的方式开启多个线程运行。那针对固定时间间隔和只能同时执行的问题使用消息中间件就能很好的解决问题消息中间件采用生产消费模型实现消息的生产和消费 延迟队列 本文使用消息中间件 RabbitMQ实现延迟队列具体实现可以看我的另外一篇文章延迟队列实现订单超时自动取消,具体实现流程图试下如下。 请求发送失败之后调用生产者发送消息经过设定的时间间隔之后发送给消费者消费端再次发起请求如果请求失败再调用生产者发送消息并设置好下一次的时间间隔其中消费端发起任务使用线程池发起请求。 下载 RabbitMQ 延迟消息的插件 delayed_message_exchange 在Github官网找到对应的版本我选择的是 3.8.17 配置延迟队列: Configuration public class XDelayedMessageConfig {/*** 延迟交换机*/public static final String DELAYED_EXCHANGE exchange.delayed;/*** 重试队列*/public static final String RETRY_QUEUE queue.retry;/*** 重试routing key*/public static final String RETRY_ROUTING_KEY routingKey.bind.retry;Beanpublic Queue retryQueue() {return new Queue(RETRY_QUEUE,true);}/*** 定义延迟交换机* 交换机的类型为 x-delayed-message* return*/Beanpublic CustomExchange delayedExchange() {MapString,Object map new HashMap();map.put(x-delayed-type,direct);return new CustomExchange(DELAYED_EXCHANGE,x-delayed-message,true,false,map);}Beanpublic Binding retryQueueBinding() {return BindingBuilder.bind(retryQueue()).to(delayedExchange()).with(RETRY_ROUTING_KEY).noargs();}} 在发送端模拟重试机制设置时间间隔 5、10、30 秒。 Autowired private RabbitTemplate rabbitTemplate;private final int[] INTERVAL_ARRAY {5,10,30};GetMapping(/retry) public String retry(int index) {if (index 0 index 2) {send(index ,延迟 INTERVAL_ARRAY[index] s,INTERVAL_ARRAY[index]);}return ok; }private void send(String message,Integer delayTime) {message message DateUtil.dateFormat(new Date());System.out.println(【发送消息】 message);rabbitTemplate.convertAndSend(XDelayedMessageConfig.DELAYED_EXCHANGE,XDelayedMessageConfig.RETRY_ROUTING_KEY,message, message1 - {message1.getMessageProperties().setDelay(delayTime*1000);return message1;}); }接收端 RabbitListener(queues XDelayedMessageConfig.RETRY_QUEUE) public void delayProcess(String msg, Channel channel, Message message) {System.out.println(【接收消息】 msg 当前时间 DateUtil.dateFormat(new Date()));try {channel.basicAck(message.getMessageProperties().getDeliveryTag(),false);} catch (IOException e) {e.printStackTrace();}int index Integer.parseInt(msg.split(,)[0]);retry(index); }控制台输出 【发送消息】0,延迟5s 10:59:29 【接收消息】0,延迟5s 10:59:29 当前时间10:59:33 【发送消息】1,延迟10s 10:59:33 【接收消息】1,延迟10s 10:59:33 当前时间10:59:43 【发送消息】2,延迟30s 10:59:43 【接收消息】2,延迟30s 10:59:43 当前时间11:00:10其中 0、1、2表示重试的次数。通过延迟消息的方式重试发送信息。每个任务作为一个消息进行消费。和定时服务相比有以下几个优点 支持动态间隔任务不是同时执行降低服务器的压力。 总结 在发送一些异步通知时候需要考虑到通知可能接收失败的情况比如 请求的服务器挂了。网络发生了波动。服务器响应异常服务重启。 此时无法正确的及时推送通知无法保证通知的可靠性。这个时候就需要重试多次而且间隔要依次增加因为服务启动或者网络的卡顿在经过一段时间就恢复了。后续重试成功的概率就更高了。 定时重试 定时重试首先不符合变化的间隔时间间隔的时间是固定的重试的任务都堆积在一起请求这样也会给服务器造成很大的压力。而空闲的时候服务器的利用率有比较低。同时请求只能一个一个同步执行任务同时执行的任务越多延迟就越严重。 定时任务 线程池 为了解决同时处理任务添加了自定义的线程池因为请求属于 IO 密集型所以设置线程数为 CPU 核数的两倍。多个任务执行降低了延迟性。无法满足动态间隔时间的问题而且同时请求服务器压力大。 延迟队列 线程池 延迟时间请求可以使用到延迟队列每个任务都作为一个消息。每次处理不成功就发送消息到延迟队列中到达时间间隔之后再消费消息。如果请求失败再重复以上操作。消费者处理消息使用线程池处理加快处理速度。也可以开启多台服务器分发处理任务加快处理速度降低任务的延迟性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/90028.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

济南营销网站建设广告设计与制作的课程

dolphinscheduler运行了一段时间,忽然发现一个流程下某个任务一直在自动重跑,把工作流删了,任务删了,下线等等,都不能阻止他重复的运行,每秒1次,真是见了鬼 1、把zookeeper停掉发现不再重跑了 …

如何提网站建设需求网络服务器的分类

Flink on k8s部署日志详解及与Yarn部署时的日志生成模式对比 最近需要将flink由原先部署到Yarn集群切换到kubernetes集群,在切换之后需要熟悉flink on k8s的运行模式。在使用过程中针对日志模块发现,在k8s的容器中,flink的系统日志只有jobma…

做电影网站前途网页制作的公司哪家好

一、Thymeleaflayuijquery复选框回显基于Thymeleaf模板下的layuijquery复选框回显,主要是jquery。大致意思是:把数组转成JSON传到前台,再在前台转回数组 AJAX一般都是用JSON格式或XML格式来传递数据的JSON就是一种具有特殊格式的字符串。1.实…

学企业网站开发7a125v能插国内插座吗

1、static修饰的变量和方法,在类加载时即被初始化,可直接通过类名.变量名和类型.方法名进行调用。2、static修饰的变量,在类加载时会被分配到数据区的方法区。类的实例可共享方法区中的变量。如果static修饰的变量发生改变,那么所…

浙江网站建设工作室公司培训网站建设

html是什么?html即超文本标记语言,现在大多网页都是html的格式。而所谓的html文件是一种超文本文件,其中超文本可以是图片或音乐等非文字元素,使用很广泛。但是很多用户都不太明白html是什么文件?也不清楚html文件要如…

蝴蝶传媒网站推广湖北响应式网页建设哪家有

大家都知道&#xff0c;seo的一个很重要的一点就是要把网站做的条理清晰&#xff0c;让搜索引擎很容易的读明白&#xff0c;这个条理清晰不仅体现在网站的物理路径&#xff0c;url等地 方。在<h1><h2><h3>等方面也是这样。并不是<h1>对于关键字排名有帮…

企业新网站seo推广wordpress 微网站

原文地址&#xff1a;https://blog.csdn.net/chaishen10000/article/details/79324016 最近一段时间都在学习深度学习&#xff0c;想着在用户画像标签模型中看能不能用上&#xff0c;终于&#xff0c;用了一个多月的时间&#xff0c;结合实际的场景和数据&#xff0c;搭建了一套…

一级a做爰网站中国php 金融网站源码

实验三 一  实验名称 感知器设计 二 目的和意义 使用感知器完成线性分类任务 三 操作步骤或算法结构 数据预处理。载入数据文件&#xff08; iris.csv 文件&#xff09;中的数据&#xff0c;并将其分成样本向量矩阵X和样本分类结果向量 G \bf G G。 给 4 4 4 列向量的…

绮思网站建设qswoo高端网站制造

给定一个字符串 s&#xff0c;找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1&#xff1a; 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 示例 2&#xff1a; 输入: "cbbd" 输出: "bb"…

太原做网站哪家好移动端数据可视化

&#x1f384;欢迎来到边境矢梦的csdn博文&#x1f384; &#x1f384;本文主要梳理计算机组成原理中 存储系统的知识点和值得注意的地方 &#x1f384; &#x1f308;我是边境矢梦&#xff0c;一个正在为秋招和算法竞赛做准备的学生&#x1f308; &#x1f386;喜欢的朋友可以…

东旭网站建设seo优化推广招聘

欢迎来到文思源想的ai空间&#xff0c;这是技术老兵重学ai以及成长思考的第7篇分享&#xff01; 工欲善其事必先利其器&#xff0c;为了ai学习的效能提升&#xff0c;放假期间对google浏览器做了一次系统整改&#xff0c;添加了一些配置和插件&#xff0c;这里既有一些显示、主…

做国际物流在哪些网站找客户百度seo一本通

35的年纪&#xff0c;上有老下有小&#xff0c;即将步入中年危机&#xff0c;在这个节骨眼上被辞&#xff0c;能不悲观吗&#xff1f; 在这个年纪人们往往追求的是稳定的工作和生活&#xff0c;而进入一个自己不熟悉的行业并不是一个好的选择。 况且&#xff0c;你认为的外包…

单位网站建设做到哪个科目海宁公司做网站

第四章 机器学习 六、多项式回归 1. 什么是多项式回归 线性回归适用于数据呈线性分布的回归问题。如果数据样本呈明显非线性分布&#xff0c;线性回归模型就不再适用&#xff08;下图左&#xff09;&#xff0c;而采用多项式回归可能更好&#xff08;下图右&#xff09;。例…

php网站开发遇到的问题出国看病网站开发

【实例简介】3dsmax导出gltf格式插件&#xff0c;里面包括插件&#xff0c;插件使用说明&#xff0c;插件功能介绍&#xff1b;【实例截图】【核心代码】3dsmx_to_gltf格式插件└── 3dsMax to gltf 2├── 3ds Max│ ├── CHANGELOG.md│ ├── Max2Babylon│ │ …

合肥网站建设网站模板网站后台搭建图文

原文请看:http://www.douban.com/note/275619382/ 《昂着头的艺术》文/伯爵在城堡&#xff08;原载于《全球商业经典》2013年4月刊&#xff09;2003 年夏天&#xff0c;电视里到处是带着口罩的“面具侠”&#xff0c;连广告都比平常更少了。远在海南出差的老妈半夜两点钟打来一…

免费看片网站wordpress 小工具区

来源&#xff1a;传感器专家网物联网产业是传感器应用最广泛的领域之一&#xff0c;研发新型传感器&#xff0c;做传感器市场&#xff0c;都不能不考虑物联网产业的需求。2021年随着COVID-19 病毒的存在已常态化&#xff0c;防疫抗疫进入了拉锯阶段&#xff1b;波及全球的“芯片…

广东官网网站建设企业网页游戏开服表 怎么删除

前言 在我们日常的开发调试中&#xff0c;会在 URL 上添加一些特殊的小尾巴 用来显示调试界面或者开启一些特殊功能&#xff0c;当你接触了越来越多的系统后&#xff0c;你需要使用的小尾巴就变得越来越多&#xff0c;记忆和使用成本非常大&#xff0c;以及含有小尾巴的网址 在…

素材解析网站搭建新乡个人网站建设哪家好

知识点: 如果a,b均是正整数且互质&#xff0c;那么由axby&#xff0c;x>0,y>0,那么由这两个数不能组成的最大的数是:a*b-a-b 我们可以发现&#xff0c;模9的时候有这样一个规律: 对X模Y&#xff0c;其实等于X每一位的数的和SUM模Y。 记住&#xff0c;这个方法只能模9的时…

微信端网站开发模板网站关键词过多

一,工具简介 vfsreadlat.py工具用于跟踪VFS读取延迟分布情况,示例的运行结果是一个函数延迟分布直方图。 二,代码示例 #!/usr/bin/python# USAGE: vfsreadlat.py [interval [count]] # # The default interval is 5 seconds. A Ctrl-C will print the partially # gathere…

外贸营销型网站建站哈 做网站

vor: 来自拉丁动词vorare&#xff0c;指to eat&#xff0c;-ivorous指吃某种食物的eater。carn肉&#xff0c;肉欲vore吃→吃肉的&#xff1b;carnival狂欢节&#xff0c;谢肉节voracious a 狼吞虎咽的(voracious多…..的--吃多的) voracity n 贪食(voracilty) devour v 吞吃&a…