开启WordPress多站点功能上海公司网站制作价格

web/2025/9/28 7:23:49/文章来源:
开启WordPress多站点功能,上海公司网站制作价格,做网站的费用计入什么费用,做产品推广什么网站会比较好好文推荐#xff1a; 2.5万字详解23种设计模式 基于Netty搭建websocket集群实现服务器消息推送 2.5万字讲解DDD领域驱动设计 文章目录 一、延时队列定义二、应用场景三、技术实现方案#xff1a;1. Redis2. Kafka3. RabbitMQ4. RocketMQ 四、Kafka延时队列背景五、Kafka延时队…好文推荐 2.5万字详解23种设计模式 基于Netty搭建websocket集群实现服务器消息推送 2.5万字讲解DDD领域驱动设计 文章目录 一、延时队列定义二、应用场景三、技术实现方案1. Redis2. Kafka3. RabbitMQ4. RocketMQ 四、Kafka延时队列背景五、Kafka延时队列实现思路六、Kafka延时队列架构图七、kafka延时任务代码实现1. KafkaDelayQueueKafka延迟队列2. KafkaDelayQueueFactoryKafka延迟队列工厂3. KafkaPollListenerKafka延迟队列事件监听4. KafkaDelayConfigKafka延时配置 八. 如何使用kafka延时队列九、测试十、总结 一、延时队列定义 延时队列是一种消息队列可以用于在指定时间或经过一定时间后执行某种操作。 小编已经做好了Kafka延时队列的封装以后只需要一行代码就可以实现kafka延时队列了代码中有详细注释完整代码已经给大家整理好了领取方式放在了文章末。 二、应用场景 1订单超时自动取消用户下单后如果在指定时间内未完成支付系统会自动取消订单释放库存。 2定时推送比如消息通知用户预约某个服务系统会在服务开始前一定时间发送提醒短信。 3定时任务将需要定时执行的任务放入延时队列中等到指定的时间到达时再进行执行例如生成报表、统计数据等操作。 4限时抢购将限时抢购的结束时间放入延时队列中当时间到达时自动下架商品。 … 三、技术实现方案 1. Redis 1.1 优点 ①Redis的延迟队列是基于Redis的sorted set实现的性能较高。 ②Redis的延迟队列可以通过TTL设置过期时间灵活性较高。 ③简单易用适用于小型系统。 ④性能较高支持高并发。1.2 缺点 ①可靠性相对较低可能会丢失消息就算redis最高级别的持久化也是有可能丢一条的每次请求都做aof但是aof是异步的所以不保证这一条操作能被持久化。 ②而且Redis持久化的特性也导致其在数据量较大时存储和查询效率逐渐降低此时会需要对其进行分片和负载均衡。 ③Redis的延迟队列需要手动实现消息重试机制更严谨的消息队列需要数据库兜底。1.3 应用场景 ①适用于较小规模的系统实时性要求较高的场景。 ②适用于轻量级的任务调度和消息通知场景适合短期延迟任务不适合长期任务例如订单超时未支付等。2. Kafka 2.1 优点 ①Kafka的优点在于其高并发、高吞吐量和可扩展性强同时支持分片。 ②可靠性高支持分布式和消息持久化。 ③消费者可以随时回溯消费。 ④支持多个消费者并行消费、消费者组等机制。2.2 缺点 ①没有原生的延迟队列功能需要使用topic和消费者组来实现实现延迟队列需要额外的开发工作。 ②消费者需要主动拉取数据可能会导致延迟精度不是特别高。 在此案例中代码已经实现了直接拿来使用就可以了。2.3 应用场景 适用于大规模的数据处理实时性要求较高的高吞吐量的消息处理场景。3. RabbitMQ 3.1 优点 ①RabbitMQ的延迟队列是通过RabbitMQ的插件实现的易于部署和使用。 ②RabbitMQ的延迟队列支持消息重试和消息顺序处理可靠性较高。 ③支持消息持久化和分布式。 ④支持优先级队列和死信队列。 ⑤提供了丰富的插件和工具。3.2 缺点 ①RabbitMQ的延迟队列性能较低不适用于高吞吐量的场景。 ②性能较低不适合高并发场景。 ③实现延迟队列需要额外的配置但是配置就很简单了。3.3应用场景 适用于中小型的任务调度和消息通知对可靠性要求高的场景。4. RocketMQ 4.1 优点 ①RocketMQ的延迟队列是RocketMQ原生支持的易于使用和部署。 ②RocketMQ的延迟队列支持消息重试和消息顺序处理可靠性较高。 ③高性能和高吞吐量支持分布式和消息持久化。 ④RocketMQ使用简单性能好并且支持延迟队列功能。4.2 缺点 ①RocketMQ的延迟队列不支持动态添加或删除队列。 ②RocketMQ的延迟队列需要保证消息的顺序可能会导致消息延迟。 ③在节点崩溃后RocketMQ有可能发生消息丢失。4.3 应用场景 ①适用于大规模的数据处理对性能和吞吐量要求较高的场景。 ②适合于任务量较大、需要延迟消息和定时消息的场景。例如电商平台、社交软件等。 ③适用于分布式任务调度和高可靠性消息通知场景。四、Kafka延时队列背景 基于以上四种实现延时队列的分析来选择对应的技术方案的基础上呢不同公司的mq的基础设施不同如果只有Kafka也没必要引入RabbitMQ和RocketMq来实现引入新的组件也会顺便带来新的问题。 网上搜Kafka实现延时队列有很多文章很多文章说使用Kafka内部的时间轮支持延时操作但这是Kafka自己内部使用的时间轮只是一个工具类用户无法将其作为延迟队列来使用。 Kafka延时队列的最佳实践使用Kafka消费者的暂停和恢复机制来实现。 五、Kafka延时队列实现思路 解决一个问题前首先要明确问题如何让Kafka有延时队列的功能呢就是在Kafka消费者消费的时候延时消费不久搞定了嘛那如何延时消费呢网上有些文章使用Thread.sleep进行延时消费这是不靠谱的亲身实践sleep的时间超过了Kafka配置的max.poll.records时间消费者无法及时提交offsetkafka就会认为这个消费者已经挂了会进行rebalance也就是重新分配分区给消费者以保证每个分区只被一个消费者消费也有同学说了为了不发生rebalance那可以增加max.poll.records时间啊但是这样的话如果要sleep几天的时间难道max.poll.records要写几天的时间嘛有违Kafka的设计原理了那怎么办呢这时候Kafka的pause暂停消费和resume恢复消费就登场了pause暂停某个分区之后消费者不会再poll拉取该分区的消息直到resume恢复该分区之后才会重新poll消息。我已经做好了Kafka延时队列的封装以后只需要一行代码就可以实现延时队列了代码核心使用Kafka消费者的pause函数暂停和resume函数恢复线程池定时任务事件监听机制工厂模式 六、Kafka延时队列架构图 七、kafka延时任务代码实现 以下代码只列出了核心实现完整代码已经给大家整理好了可以关注【微信公众号】微信搜索【老板来一杯java】然后【加群】直接获取源码在自己项目中引入即用 源码目录 1. KafkaDelayQueueKafka延迟队列 定义一个Kafka延期队列包含的内容KafkaDelayQueue其中有延迟队列配置主题消费组延迟时间目标主题KafkaSyncConsumerApplicationContextpoll线程池delay线程池等等 package com.wdyin.kafka.delay;import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; import org.apache.kafka.clients.consumer.ConsumerRecords; import org.apache.kafka.common.TopicPartition; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.ApplicationContext; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;import java.time.Duration; import java.util.Collections; import java.util.concurrent.ThreadPoolExecutor;/*** kafka延时队列** Author WDYin* Date 2022/7/2**/ Slf4j Getter Setter class KafkaDelayQueueK, V {private String topic;private String group;private Integer delayTime;private String targetTopic;private KafkaDelayConfig kafkaDelayConfig;private KafkaSyncConsumerK, V kafkaSyncConsumer;private ApplicationContext applicationContext;private ThreadPoolTaskScheduler threadPoolPollTaskScheduler;private ThreadPoolTaskScheduler threadPoolDelayTaskScheduler;...... } 2. KafkaDelayQueueFactoryKafka延迟队列工厂 Kafka延期队列的工厂用于及其管理延迟队列 package com.wdyin.kafka.delay;import lombok.Data; import org.apache.kafka.clients.consumer.ConsumerConfig; import org.springframework.context.ApplicationContext; import org.springframework.util.Assert; import org.springframework.util.StringUtils;import java.util.Properties;/*** 延时队列工厂* author WDYin* date 2023/4/17**/ Data public class KafkaDelayQueueFactory {private KafkaDelayConfig kafkaDelayConfig;private Properties properties;private ApplicationContext applicationContext;private Integer concurrency;public KafkaDelayQueueFactory(Properties properties, KafkaDelayConfig kafkaDelayConfig) {Assert.notNull(properties, properties cannot null);Assert.notNull(kafkaDelayConfig.getDelayThreadPool(), delayThreadPool cannot null);Assert.notNull(kafkaDelayConfig.getPollThreadPool(), pollThreadPool cannot null);Assert.notNull(kafkaDelayConfig.getPollInterval(), pollInterval cannot null);Assert.notNull(kafkaDelayConfig.getPollTimeout(), timeout cannot null);this.properties properties;this.kafkaDelayConfig kafkaDelayConfig;}public void listener(String topic, String group, Integer delayTime, String targetTopic) {if (StringUtils.isEmpty(topic)) {throw new RuntimeException(topic cannot empty);}if (StringUtils.isEmpty(group)) {throw new RuntimeException(group cannot empty);}if (StringUtils.isEmpty(delayTime)) {throw new RuntimeException(delayTime cannot empty);}if (StringUtils.isEmpty(targetTopic)) {throw new RuntimeException(targetTopic cannot empty);}KafkaSyncConsumerString, String kafkaSyncConsumer createKafkaSyncConsumer(group);KafkaDelayQueueString, String kafkaDelayQueue createKafkaDelayQueue(topic, group, delayTime, targetTopic, kafkaSyncConsumer);kafkaDelayQueue.send();}private KafkaDelayQueueString, String createKafkaDelayQueue(String topic, String group, Integer delayTime, String targetTopic, KafkaSyncConsumerString, String kafkaSyncConsumer) {KafkaDelayQueueString, String kafkaDelayQueue new KafkaDelayQueue(kafkaSyncConsumer, kafkaDelayConfig);Assert.notNull(applicationContext, kafkaDelayQueue need applicationContext);kafkaDelayQueue.setApplicationContext(applicationContext);kafkaDelayQueue.setDelayTime(delayTime);kafkaDelayQueue.setTopic(topic);kafkaDelayQueue.setGroup(group);kafkaDelayQueue.setTargetTopic(targetTopic);return kafkaDelayQueue;}private KafkaSyncConsumerString, String createKafkaSyncConsumer(String group) {properties.put(ConsumerConfig.GROUP_ID_CONFIG, group);return new KafkaSyncConsumer(properties);}} 3. KafkaPollListenerKafka延迟队列事件监听 package com.wdyin.kafka.delay;import lombok.extern.slf4j.Slf4j; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.clients.consumer.ConsumerRecords; import org.apache.kafka.clients.consumer.OffsetAndMetadata; import org.apache.kafka.common.TopicPartition; import org.springframework.context.ApplicationListener; import org.springframework.kafka.core.KafkaTemplate;import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.*;/*** 延时队列监听* Author : WDYin* Date : 2021/5/7* Desc :*/ Slf4j public class KafkaPollListenerK, V implements ApplicationListenerKafkaPollEventK, V {private KafkaTemplate kafkaTemplate;public KafkaPollListener(KafkaTemplate kafkaTemplate) {this.kafkaTemplate kafkaTemplate;}Overridepublic void onApplicationEvent(KafkaPollEventK, V event) {ConsumerRecordsK, V records (ConsumerRecordsK, V) event.getSource();Integer delayTime event.getDelayTime();KafkaDelayQueueK, V kafkaDelayQueue event.getKafkaDelayQueue();KafkaSyncConsumerK, V kafkaSyncConsumer kafkaDelayQueue.getKafkaSyncConsumer();SetTopicPartition partitions records.partitions();MapTopicPartition, OffsetAndMetadata commitMap new HashMap();partitions.forEach((partition) - {ListConsumerRecordK, V consumerRecords records.records(partition);for (ConsumerRecordK, V record : consumerRecords) {long startTime (record.timestamp() / 1000) * 1000;long endTime startTime delayTime;long now System.currentTimeMillis();if (endTime now) {kafkaSyncConsumer.pauseAndSeek(partition, record.offset());kafkaDelayQueue.getThreadPoolPollTaskScheduler().schedule(kafkaDelayQueue.delayTask(partition), new Date(endTime));break;}log.info({}: partition:{}, offset:{}, key:{}, value:{}, messageDate:{}, nowDate:{}, messageDate:{}, nowDate:{},Thread.currentThread().getName() # Thread.currentThread().getId(), record.topic() - record.partition(), record.offset(), record.key(), record.value(), LocalDateTime.ofInstant(Instant.ofEpochMilli(startTime), ZoneId.systemDefault()), LocalDateTime.now(), startTime, Instant.now().getEpochSecond());kafkaTemplate.send(kafkaDelayQueue.getTargetTopic(), record.value());commitMap.put(partition, new OffsetAndMetadata(record.offset() 1));}});if (!commitMap.isEmpty()) {kafkaSyncConsumer.commit(commitMap);}} } 4. KafkaDelayConfigKafka延时配置 package com.wdyin.kafka.delay;import lombok.Data;/*** 延时队列配置* author WDYin* date 2023/4/16**/ Data public class KafkaDelayConfig {private Integer pollInterval;private Integer pollTimeout;private Integer pollThreadPool;private Integer delayThreadPool;public KafkaDelayConfig() {}...... } 八. 如何使用kafka延时队列 自己项目中引入以上代码之后使用KafkaDelayApplication一个Kafka延迟任务注册程序注意一个延时主题对应一个延迟时间后续有新的延迟任务只需要在此注册延迟任务的监听即可开箱即用 使用流程 生产者发送消息到【延时主题】——自己写然后Kafka将消息从【延时主题】经过【延时时间】后发送到【目标主题】——以下代码自己创建消费者消费【目标主题】——自己写 import org.springframework.stereotype.Component;import javax.annotation.PostConstruct; import javax.annotation.Resource;/*** author WDYin* date 2023/4/18**/ Component public class KafkaDelayApplication {Resourceprivate KafkaDelayQueueFactory kafkaDelayQueueFactory;/*** 延迟任务都可以配置在这里* Kafka将消息从【延时主题】经过【延时时间】后发送到【目标主题】*/PostConstructpublic void init() {//延迟30秒kafkaDelayQueueFactory.listener(delay-30-second-topic, delay-30-second-group, 1 * 30 * 1000, delay-60-second-target-topic);//延迟60秒kafkaDelayQueueFactory.listener(delay-60-second-topic, delay-60-second-group, 1 * 60 * 1000, delay-60-second-target-topic);//延迟30分钟kafkaDelayQueueFactory.listener(delay-30-minute-topic, delay-30-minute-group, 30 * 60 * 1000, delay-30-minute-target-topic);} } 九、测试 先往延时主题【delay-60-second-topic】发送一千条消息一共10个分区每个分区100条消息消息时间是2023-04-21 16:37:26分延迟消息消费时间就应该是2023-04-21 16:38:26 延时队列进行消费通过日志查看消息日期和延迟队列消费消息时间正好相差一分钟 十、总结 本案例已成功实现Kafka的延时队列并进行实测代码引入可用非常方便。Kafka实现的延时队列支持秒级别的延时任务不支持毫秒级别但是毫秒级别的延时任务也没有意义注意一个主题对应的延时时间是一致的不能在同一个主题里放不同时间的延时任务。此方案的缺点就是如果数据量极大生产者生产消息速度很快一定要保证Kafka的消费能力否则可能会导致延迟精度不是特别高不过如果延迟秒级的任务差个几毫秒肯定可以接受的一般场景肯定满足。完整代码已经给大家整理好了可以关注【微信公众号】微信搜索【老板来一杯java】然后【加群】直接获取源码。 好文推荐 2.5万字详解23种设计模式 微服务springcloud环境下基于Netty搭建websocket集群实现服务器消息推送----netty是yyds 2.5万字讲解DDD领域驱动设计

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

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

相关文章

中国建设行业峰会网站建设asp网站视频教程

编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1&#xff0c…

江门网站定制多少钱店铺推广策略

response.text() 功能:Sanic 返回纯文本内容给浏览器。作为一个完整功能的web网站,一般是不会返回纯文本内容的,特殊情况下可选择使用本函数。response.text() 语法def text(body,status200, headersNone,content_type"text/plain;chars…

仿京东网站后台外贸seo营销ppt

个人主页:Lei宝啊 愿所有美好如期而遇 前言 本篇文章将会介绍,磁盘中是如何存储一个文件,磁盘中的文件是如何从磁盘中加载进内存,与进程又有怎样的关系,我们写的代码变成可执行程序执行起来时如何完成对文件的一系列…

邹城做网站移动互联网开发平台基于linux安卓

畅想未来儿童画绘画作品大全导语:未来的科技在不断发展,未来的世界每天充满了新奇。下面是小编为您整理的儿童画,希望对您有所帮助。未来的世界是个先进的地方。我们的交通工具不再是飞机、轮船和汽车,而是宇宙飞船。家里的设备是…

域名注册好了怎么做网站新手学做免费网站软件好

官网:http://element-cn.eleme.io/#/zh-CN 转载于:https://www.cnblogs.com/weibanggang/p/9995433.html

镜像站wordpress网络服务代码1001

目录 一、Vite概述 二、Vite构建Vue3工程化项目 三、ViteVue3项目目录结构 四、ViteVue3项目组件(SFC入门) 五、ViteVue3样式导入方式 六、ViteVue3响应式数据和setup语法糖 一、Vite概述 Vite是一种新型前端构建工具,能够显著提升前端开发体验;Vite结合…

天眼查河南建设网站公司wordpress调整固态链接后打不开

Python进行视频图像处理,通过串口发送给stm32,stm32接收数据,刷新OLED进行显示。 步骤: 1.按照接线图连接好硬件 2.把Keil工程的代码下载到STM32中 3.运行Python代码,通过串口把处理后的数据发送给STM32进行显示 …

网站404页面的作用武侯区建设局门户网站

目录 前言 知识储备 图像处理常用算法 算法原理 传统分割方法 1.基于阈值的分割方法

县电子政务办网站建设工作思路深圳品牌床垫有哪些

文章目录 🍀第一题🍀第二题🍀第三题🍀第四题🍀第五题 🍀第一题 有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少? 这里我们使用…

校园二手网站的建设方案产品网站开发流程

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 沪指昨日低开低走,深成指、创业板指均跌超1%,双双创出年内新低。转基因概念股逆势大涨…

手机能建设网站忙广州手机网站制作咨询

1. 异常的概念与体系结构 1.1 异常的概念 在Java中,将程序执行过程中发生的不正常行为称为异常 1. 算术异常 public class Test {public static void main(String[] args) {System.out.println(10/0);} } 因为 0 不能当被除数,所以报出了异常&#…

郑州电子商务网站建设用js做简单的网站页面

Kubernetes 的 Volume 对数据存储已经给出了一个很好的抽象,它只是定义了有这么一个“存储卷”,而这个“存储卷”是什么类型、有多大容量、怎么存储,我们都可以自由发挥。Pod 不需要关心那些专业、复杂的细节,只要设置好 volumeMo…

网站怎样做池州网站建设全包

需要更改群组的识别码或名称时,可用groupmod指令来完成这项工作。接下来是小编为大家收集的linux groupmod命令参数及用法详解,希望能帮到大家。linux groupmod命令参数及用法详解groupmod(group modify)功能说明:更改群组识别码或名称。语 …

dede小说网站模板下载学服装设计培训哪里好

当我们给一个元素绑定一个datepick后又要对它用validator进行验证时会发现验证并没有成功 因为当点击该元素时候input弹出datepick的UI就已经失去了焦点它验证的仍然是前一个值, 不过还好 datepick提供了onSelect 事件我们可以在这个事件触发的时候重新把焦点在赋给…

冠县哪里有做网站的wordpress手机端底部菜单主题

选自medium作者:Emmett Boudreau机器之心编译参与:杜伟、张倩、肖清本文作者从速度、通用性、多重派发、适用于 ML 的程度和包管理器 5 个方面阐述了 Julia 语言相较于 Python 的优势所在。Julia 是一种多范式的函数式编程语言,用于机器学习和…

武夷山网站推广wordpress分类链接后加

什么是 Kener ? Kener 是开源的 Node.js 状态页面工具,旨在轻松监控服务和处理事故。它提供了一个时尚且用户友好的界面,简化了对服务中断的跟踪,并改善了我们在事故期间的沟通方式。而最好的部分是,Kener 与 GitHub 无…

定制柜优化官网咨询

strcasecmp()的功能是&#xff1a;忽略大小写比较字符串 头文件 #include <strings.h> 函数原型&#xff1a;int strcasecmp(const char *s1, const char *s2); 函数功能: 用来比较参数s1和s2字符串&#xff0c;比较时会自动忽略大小写的差异。 返回值: 若参数字符串…

公司网站维护费 入什么科目鞍山百度做网站

2024年新算法&#xff01;PCACPOK-means聚类&#xff0c;冠豪猪优化器&#xff08;CPO)优化K-means&#xff0c;适合学习&#xff0c;也适合发paper。 一、冠豪猪优化器 摘要&#xff1a;受冠豪猪(crest Porcupine, CP)的各种防御行为启发&#xff0c;提出了一种新的基于自然…

温州百度网站快速优化吉林东奥建设集团网站

向题解低头&#xff0c;向大佬低头(。﹏。)orz……模拟也不能乱模啊……要好好分析题意&#xff0c;简化简化再简化orz敲黑板 六个面的魔方&#xff0c;能一步还原的情况一定是只有2个面是单色&#xff0c;其余四个面&#xff0c;每个面2种颜色&#xff0c;而且不会出现任意两面…

微信微网站制作公司WordPress打开加载太慢

“几何画板是一种常用的数学软件&#xff0c;具有强大的绘图功能&#xff0c;也为我们探究椭圆的不同绘制方法提供了平台.在探究过程中&#xff0c;我们遇到了一些麻烦和困难&#xff0c;但也获得了很多意想不到的惊喜和收获&#xff01;我们将椭圆的绘制方法分为七类&#xff…