- 博客(1142)
- 收藏
- 关注
原创 为什么网关和业务服务两次清理MDC
维度网关清理业务服务清理原因线程网关Tomcat线程业务Tomcat线程不同线程池进程网关JVM进程业务JVM进程不同进程内存网关线程的ThreadLocal业务线程的ThreadLocal独立内存空间目的防止网关线程污染防止业务线程污染各自负责必要性必须必须线程池会复用线程核心原则。
2025-12-17 14:39:14
999
原创 traceId 传递-线程的变化
场景是否同一线程TraceId传递方式解决方案网关→业务服务❌ 不同自动传递同步HTTP调用✅ 同一线程阻塞HTTP Header(需配置拦截器)RestTemplate拦截器异步HTTP调用❌ 不同HTTP Header + 上下文传递@Async方法❌ 不同线程上下文传递TaskDecorator配置MQ发送/消费❌ 不同消息Header消息属性传递线程池任务❌ 不同任务包装传递TTL或手动传递。
2025-12-17 14:27:21
647
1
原创 traceId 传递-MQ
System.out.println("当前线程: " + Thread.currentThread().getName());System.out.println("获取traceId: " + traceId);// MDC状态:{"traceId": "TRACE-123"}
2025-12-17 13:31:52
1048
原创 HttpURLConnection 是 Apache HttpClient 和 OKHttp 底层吗
客户端诞生时间维护者与HttpURLConnection关系本身2001Apache基金会独立竞争对手OKHttp2013Square公司独立竞争对手Netty2008Netty社区独立竞争对手关键要点不是继承关系:OKHttp/Apache HttpClient不是基于HttpURLConnection是竞争关系:它们都是独立的HTTP客户端实现共享基础设施:都使用Java标准库(java.net.Socket等)协议实现独立:各自实现HTTP/1.1、HTTP/2等协议解析。
2025-12-17 09:25:32
1122
原创 HttpURLConnection OKHttp Apache HttpClient 三者都是底层吗,上层是 RestTemplate OKHttp WebClient
正确的理解应该是text│ 应用业务代码 ││ 上层框架:RestTemplate/WebClient/Feign │ ← 提供编程模型│ HTTP客户端库:OKHttp/Apache HttpClient │ ← 处理HTTP协议细节│ 最底层:HttpURLConnection/Socket │ ← JDK网络基础关键结论。
2025-12-17 09:23:15
653
原创 restTemplate/Feign(Spring Cloud)或OKHttp Apache HttpClient 这几个关系与底层实现
关系总结。
2025-12-16 16:41:47
1127
原创 Dubbo负载均衡实现原理
Dubbo负载均衡的核心特点客户端实现:在消费者端智能选择,减少服务端压力算法丰富:4种策略覆盖不同业务场景权重感知:支持静态配置和动态预热可扩展性:SPI机制支持自定义算法与容错协同:与集群容错策略无缝配合选择黄金法则不知道选什么就用 Random(默认)Provider性能不均就配权重 + RoundRobin想要自动调节就用 LeastActive需要会话保持就用 ConsistentHashDubbo的负载均衡是其高性能微服务框架的基石之一,理解其原理有助于更好地设计和调优分布式系统。
2025-12-16 15:55:39
895
原创 RestTemplate与负载均衡
特性你的代码 (url为具体地址)负载均衡模式 (url为服务名)负载均衡不支持,固定调用单一节点支持,在多个实例间分配请求地址 (url必须是具体的 IP/域名 (如必须是注册中心里的服务名(如不需要必须在配置时添加适用场景调用固定的外部接口(如京东开放平台)调用内部可扩展的微服务结论:由于你的代码将京东接口地址拼接为fullUrl,这通常是一个具体的外部域名,而非内部服务名,因此这段代码本身不涉及、也不需要负载均衡。它只是在向一个固定的外部接口发送请求。
2025-12-16 14:29:03
874
原创 HttpURLConnection 与其他客户端关系
java// JDK原生HTTP客户端URL url = new URL("https://api.example.com/data");HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("GET");connection.setConnectTimeout(5000);connection.setReadT
2025-12-16 13:42:53
575
原创 HTTP客户端框架比较
java// 创建示例CloseableHttpClient httpClient = HttpClients.custom() .setConnectionTimeToLive(30, TimeUnit.SECONDS) .setMaxConnTotal(100) .setMaxConnPerRoute(20) .build();// 使用HttpGet request = new HttpGet("https://api.example.com/dat
2025-12-16 13:26:42
935
原创 京东宙斯与云鼎
当你的问题是“我如何用程序操作京东店铺?时,你要找的是京东宙斯。当你的问题是“我把我的电商网站或应用放在哪里好?时,你要找的是京东云鼎。当你希望“我的电商业务既能高效对接京东,又能稳定、安全地运行”时,你应该考虑宙斯 + 云鼎的组合方案。URL区分:靠JdRequest中的apiMethod字段区分不同API接口签名封装:在代理服务中通过京东官方SDK自动完成,使用传入的appSecret作为密钥这种设计既保证了安全性(签名在服务端完成),又提供了良好的用户体验(客户端调用简单统一)。
2025-11-25 10:56:02
689
原创 xxl-job 阻塞策略,丢弃后续调度,原理及场景
"丢弃后续调度"策略的核心价值在于保护系统免受过载影响,适用于那些:🔄执行时间不确定的任务📊数据具有时效性的采集任务🚨避免重复操作的监控任务💾资源消耗较大的批处理任务关键决策点:如果任务执行失败或丢弃不会影响业务核心流程,且重复执行无意义,那么"丢弃后续调度"是最佳选择。
2025-11-21 18:02:02
572
原创 job批处理场景
场景,往一个中间表中不断的写入数据,需要通过job同步到第三方系统,一次500,5min写一次,status未同步,已同步,同步失败。王中间表写入量,会变,有时候写入几百,有时候几万,根本处理不完。6,xxl-job事务管理问题,加还是不加,加了会导致大事务,数据库连接无法释放问题吗。4,分片概念,是不是只有elasticJob有,xxl-job如何实现。7,xxl-job 阻塞策略,丢弃后续调度,原理及场景。3,如何通过job分片,提升处理能力。5,分片,调度器,执行器,关系及原理。
2025-11-21 17:44:32
222
原创 自定义线程池,实现线程池隔离
这个装饰器通过上下文捕获与恢复统一异常处理资源自动清理三大机制,解决了线程池环境中常见的上下文丢失、异常吞没、内存泄漏等问题,大大提升了异步编程的可靠性和可维护性。
2025-11-06 18:42:38
803
原创 Seat 事务@GlobalTransactional传播行为
一个普通事务注解的方法,调用一个分布式事务注解方法分布式事务注解方法:包含一个本地更新,和两个外部服务更新操作,涉及三个服务。
2025-09-05 16:55:50
1069
原创 电商拉单分析
这是一个基于XXL-Job的定时任务,每5分钟执行一次,用于从拼多多平台增量拉取多个店铺的订单数据。为每个店铺维护一个Redis时间戳,记录上次成功拉取的时间,本次拉取则从上次时间开始,到当前时间前20分钟结束,以避免拉取到处于“中间状态”的订单(如未完成的订单)。场景开始时间 (finalDateQ结束时间 (finalDateE是否更新Redis常规增量Redis中记录的时间当前时间 - 20分钟是首次/异常max(Redis时间, 当前时间-50分钟)当前时间 - 20分钟是手动补数据。
2025-08-26 13:40:11
801
原创 深分页实战
两个不同对象列表对象(容器,很小)数据对象(内容,很大)释放时机无其他引用:每次循环结束都可释放有其他引用:只有容器可释放,数据要等到引用消失流式处理优势:避免创建额外的引用,让GC可以及时回收内存内存溢出风险:来自于数据对象被长期引用,而不是临时的小容器对象这就是为什么流式处理可以处理海量数据而不会内存溢出的根本原因!
2025-08-25 18:11:01
1253
原创 ForkJoinPool 公共线程池 默认的核心,最大线程多少,队列多少
虽然默认配置不能直接修改,但可以通过系统参数调整:bash# 设置并行级别(核心线程数)# 设置线程工厂(高级用法)# 设置异常处理器(高级用法)
2025-08-24 16:54:07
822
原创 工具类是否可以依赖注入其他bean
根据您提供的上下文,这个问题涉及 [LbsUtils](file://C:\Users\NLDS\workspace\cloud-wms\wms-portal\src\main\java\com\cloud\wms\service\utils\LbsUtils.java#L19-L46) 类中 `@Resource` 注解的依赖注入失败。业务逻辑类(如 `@Service`、`@Controller` 等)会被Spring容器管理,因此可以正常注入依赖。- 生成一个私有的无参构造函数,防止外部实例化。
2025-08-24 16:40:57
828
原创 ERP 包含内容
如果需要针对某个行业(如电商、制造)或具体系统(如SAP、聚水潭)的深入分析,可以进一步探讨!:符合财务、税务、行业监管要求(如GDPR、GSP)。:是否支持与现有系统(CRM、WMS、支付系统)对接。:客户管理、销售订单(SO)、价格策略、发货管理。:总账、应收/应付账款、固定资产管理、税务管理。:供应商管理、采购订单(PO)、比价、合同管理。:BOM(物料清单)管理、生产计划、工单管理。:人事档案、考勤、薪资计算(Payroll)。:生产排程、设备管理、质量管理(QC)。
2025-08-19 10:25:05
872
原创 奇门 聚水潭 聚石塔 作用,关系
通过标准化接口(API)打通品牌商、经销商、物流服务商等各方的系统(如ERP、WMS、TMS等),实现供应链全链路协同。:为ISV(独立软件开发商,如ERP服务商)提供阿里云服务器资源,确保商家数据符合阿里生态规则(如订单隐私保护)。是三个不同的系统或平台,分别由不同公司推出,功能定位和适用场景也有所差异。:帮助商家在阿里生态(天猫、淘宝、零售通等)内实现库存共享、订单自动流转。ERP服务商(如聚水潭、旺店通)需接入天猫/淘宝时,必须部署在聚石塔上。:统一处理淘宝、京东、拼多多、抖音等平台的订单。
2025-08-19 10:23:31
1128
原创 内部调用 - AopContext.currentProxy()
throw new ServiceException(StringUtils.format("该来源订单号已存在:{}", param.getSourceOrderCode()));System.out.println("AOP代理暴露已启用,当前代理: " + proxy.getClass().getName());log.debug("当前AOP代理对象: {}", currentProxy.getClass().getName());// 直接调用,分布式锁失效。// 直接调用,事务失效。
2025-08-11 10:01:26
1003
原创 xxl-job轮询+单机串行会导致重复执行吗
答:你提出了一个非常关键的问题。让我详细分析一下这种情况:## 轮询+单机串行下的任务执行分析### 1. 任务重复执行的可能性**结论:不会重复执行相同的数据**### 2. 具体执行流程分析```时间线:T1: 任务A开始执行 -> refreshSyncTask获取任务[1,2,3,4,5]T2: 任务A处理中,状态更新为PROCESSINGT3: 调度时间到,任务B开始调度T4: 任务B执行refreshSyncTask重新查询数据库。
2025-08-08 16:43:04
1129
原创 请列举xxl-job多实例部署导致任务被重复执行原因,及解决方案
appname: order-sync-executor // 错误地使用了相同的执行器名称。appname: order-sync-executor // 应用A的执行器名称。appname: order-sync-executor // 专门处理订单同步。执行器地址: http://order-executor/ // 服务名而非负载均衡地址。执行器地址: http://xxl-job-executors/ // 负载均衡地址。// 正确做法1: 调度中心直接配置各节点地址。
2025-08-08 16:24:50
1333
原创 XXL-JOB多实例
多个XXL-JOB实例同时执行 多实例指部署多个xxl-job是吗,多个实例都会存在任务被重复执行的情况吗,如何避免。你提出了一个很好的问题。应用节点A: 192.168.1.10:8080 (运行cloud-order应用)应用节点B: 192.168.1.11:8080 (运行cloud-order应用)3. **正常情况下不会重复执行**:路由策略确保每次只有一个节点执行任务。1. **多实例部署**:指的是同一应用部署在多个服务器节点上。2. **路由策略**:决定了调度中心选择哪个节点执行任务。
2025-08-08 16:10:33
716
原创 XXL-JOB执行器 与 部署的应用服务器
调度中心 (http://192.168.1.100:8080/xxl-job-admin)├── 192.168.1.11:8080 (应用服务器B + XXL-JOB执行器)├── 192.168.1.10:8080 (应用服务器A + XXL-JOB执行器)└── 192.168.1.12:8080 (应用服务器C + XXL-JOB执行器)调度中心 (192.168.1.100:8080/xxl-job-admin)2. **逻辑上**:是集成了XXL-JOB客户端组件的应用进程。
2025-08-08 16:08:01
484
原创 用户微信公众号的openid 始终固定的吗
OpenID 在同一个公众号下是固定的,适合用于识别用户。如果需要跨公众号识别用户(如多个小程序、公众号互通),建议使用UnionID(需绑定开放平台)。如果有更复杂的需求(如用户账号体系打通),建议结合 UnionID 和业务数据库存储关联信息。
2025-08-08 08:58:53
694
原创 xxl-job配置相同,执行顺序
两个任务,同一个执行执行器,相同时间,路由策略第一个,阻塞策略,单机串行,先执行哪个,按任务ID排序吗,先创建的任务先执行。
2025-08-05 19:51:34
648
原创 类内部方法调用,自注入避免AOP失效
/ 问题:可能注入原始对象而非代理对象。5. **设计模式标准**:这是Spring框架推荐的处理同类调用AOP失效的标准解决方案。// 原始Bean: AbstractSyncTaskHandler (实际业务逻辑)2. **确保代理对象**:保证获得的是包含AOP增强的代理对象而非原始对象。// 如: SalesCreateSyncTaskHandler的代理对象。// AbstractSyncTaskHandler是抽象类。// 代理Bean: Proxy (包含AOP增强逻辑)
2025-08-05 18:54:24
992
原创 两个任务同一个调用时间 CRON:0 0 3 * * ?,具体如何调度的,及任务如何执行的
xxLjob两个任务 pullGuanjiaSalesJob,不同的执行参数,配置了同一个 @XxlJob("pullGuanjiaSalesJob")两个任务同一个调用时间 CRON:0 0 3 * *?,具体如何调度的,及任务如何执行的。(串行执行),调度中心会按任务ID顺序依次触发(前一个任务执行完成后,再触发下一个)。:相同 CRON 的任务会同时触发,但执行顺序受阻塞策略控制。会定期扫描任务表(默认每秒一次),检查到达触发时间的任务。执行器接收到任务后,会提交到内置的线程池(默认核心线程数为。
2025-08-05 18:38:12
1153
原创 xxLjob两个任务 pullGuanjiaSalesJob,不同的执行参数,配置了同一个 @XxlJob(“pullGuanjiaSalesJob“),为什么可以这样配置,执行原理是什么
/ 参数解析(例如 param="type=daily")下面详细解释为什么可以这样配置,以及它的执行逻辑。中,多个任务(即使参数不同)可以配置为同一个。)接收到任务请求后,会根据参数执行不同的逻辑。,可以在调度中心灵活调整参数,而无需修改代码。不同,调度中心仍然会将其视为不同的任务。找到对应的执行器方法,并传递不同的参数。,可能会并发执行,需考虑加锁或幂等性处理。,是 XXL-JOB 的一个强大特性。方法内部根据参数执行不同的逻辑。,不需要为每个任务写单独的方法。:适合参数化任务,避免重复代码。
2025-08-05 18:34:08
1149
原创 为什么不用rocketmq直接发送,用StreamBridge
是 Spring Cloud Stream 的抽象接口,底层可动态切换 Binder(RocketMQ/Kafka/RabbitMQ),// 需手动处理序列化。适用于大多数场景,尤其是需要维护多环境(如开发用 Kafka,生产用 RocketMQ)或未来可能切换消息中间件的项目。:RocketMQ 需提前配置 Producer Group 和 Topic,动态发送新 Topic 需代码或配置调整。会将代码与 RocketMQ 强绑定,切换消息中间件(如改用 Kafka)需修改大量代码。
2025-08-05 17:24:10
744
原创 StreamBridge 发送MQ消息
是 Spring Cloud Stream 提供的一个工具类,用于动态发送消息到绑定目标(如 Kafka、RabbitMQ 等消息中间件)。,你可以灵活集成 O2O 业务中的消息通知(如订单状态更新、优惠券发放等),而无需强依赖固定的绑定配置。的作用是向指定的消息通道(topic/exchange)发送消息。:要发送的消息体,可以是任意对象(Spring 会自动序列化,如 JSON)。-- 具体 binder(如 Kafka/RabbitMQ) -->// 重试或补偿逻辑。:目标消息通道的名称(如。
2025-08-05 17:23:35
741
原创 Doris json_contains 查询报错
根据错误信息,Doris数据库的JSON_CONTAINS函数签名不匹配。Doris要求第二个参数也是JSON格式,而不是字符串。需要对代码进行改造以兼容Doris的JSON函数语法。
2025-08-03 15:41:58
296
原创 Execute如果没有自定义异常处理器,异常可能仅打印而未被业务逻辑处理。不是会抛出异常吗,业务层try catch不行吗
/ Exception in thread "pool-1-thread-1" java.lang.RuntimeException: 任务内部异常。System.out.println("捕获到异常: " + e.getCause());// 实际业务异常在这里!log.error("线程 {} 抛出异常: {}", thread.getName(), e);System.err.println("业务捕获异常: " + e);System.out.println("业务捕获异常: " + e);
2025-07-22 17:30:45
1042
原创 线程池excutor 和 submit区别 关于异常处理,请详细说明,会吞掉异常吗,需要捕获吗
/ 抛出 ExecutionException,原因是被包装的原始异常。:异常会向上传播,但如果没有自定义异常处理器,可能仅打印日志而未被业务代码捕获。:如果任务中抛出未捕获的异常,会直接终止当前线程,并通过线程池的。:如果没有自定义异常处理器,异常可能仅打印而未被业务逻辑处理。// 不调用 future.get(),异常被“吞掉”异常直接导致线程终止,但线程池会创建新线程替代。自定义处理逻辑,否则异常可能被忽略(仅打印)。:异常直接抛出,但需自定义处理器避免丢失。,异常不会主动抛出,看似被“吞掉”。
2025-07-22 17:28:15
662
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅