Async注解与TransmittableThreadLocal使用中遇到的坑
1、线上问题
提醒单手动发送短信发送不了,没有日志定位
核心代码:
2、问题猜想
线上复现发送异常, 查询到对应时间日志, 消息配置为空, 现实是消息配置没有问题
线上发送偶尔有问题, 偶尔正常, pre 则完全正常
查看日志合理怀疑, 异步时, 获取 groupId 异常, F6static 使用了 TransmittableThreadLocal 获取
按正常道理来说, 使用 TransmittableThreadLocal 应该不存在这个问题, 查看 TransmittableThreadLocal 文档, 使用线程池对象需要使用 TtlExecutors.getTtlExecutorService 修饰
怀疑 @Async 注解, 有默认线程池对象, 当时写代码, 没有添加 async 单独使用的线程池, 所以更没有将 异步线程池使用 TtlExecutors 修饰
3、验证猜想3.1、验证线程池修饰问题3.1.1、未修饰程池, 导致 ttl 获取上下文异常
添加测试文件, 再两个主线程内, 添加普通线程池异步, 线程池对象没有使用 TtlExecutors. ...
对于微信48001错误的解决思路
公众号权限集:https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/2.0/product/offical_account_authority.html
小程序权限集:https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/2.0/product/miniprogram_authority.html
0、价值分析0.0、数据0.0.1、日志周错误日志数量:1475
接口
错误日志数量
URL
获取微信用户基础信息
1238
https://api.weixin.qq.com/cgi-bin/user/info
发送模板消息
141
https://api.weixin.qq.com/cgi-bin/message/template/send
获取帐号关注者列表
40
https://api.weixin.qq.com/cgi-bin/user/get
创建公众号二维码
29
https://api. ...
微信61003错误解决记录
1、错误日志数据
https://api.weixin.qq.com/cgi-bin/component/api_authorizer_token
获取(刷新)授权公众号的接口调用凭据(令牌)
59
https://api.weixin.qq.com/sns/component/jscode2session
微信小程序登录接口
1269
2、接口权限2.1、获取accessTokencom.f6car.ranger.manager.wx.WechatOpenManager#getAuthAccessTokenByAppId
接口所需权限
funcscope_id
备注
开放平台帐号管理权限
24
帮助公众号绑定开放平台帐号,实现用户身份打通
开放平台帐号管理
25
基于该权限可实现将小程序绑定/解除绑定开放平台帐号
2.2、第三方平台小程序登录接口com.f6car.ranger.manager.wx.login.WechatLoginManager#miniAppLogin
接口所需权限
funcscope_id
备注
开放平 ...
ElasticSearch基础使用技能
1、简介Elastic 官方网站
Elastic 中文社区
Elasticsearch: 权威指南
2、使用2.1、创建索引
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118 ...
Elasticsearch学习资料汇总
安装启动安装方式mac
下载安装包
12345wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.13.3-darwin-x86_64.tar.gzwget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.13.3-darwin-x86_64.tar.gz.sha512shasum -a 512 -c elasticsearch-7.13.3-darwin-x86_64.tar.gz.sha512 tar -xzf elasticsearch-7.13.3-darwin-x86_64.tar.gzcd elasticsearch-7.13.3/
通过homebrew方式
12brew tap elastic/tapbrew install elastic/tap/elasticsearch-full
通过homebrew安装的Elasticsearch目录地址如下
windows下载zip ...
XXLJob任务断点续处理方案
1、需求
任务可随时手动终止。
任务发生异常后,任务终止,再次启动任务能断点续处理。
断点续处理:重新启动任务后,业务从上次中断的数据之后开始处理。
2、XXLJob官方文档终止任务方法
3、方案因为解决方案比较通用,所以将代码写到公共工程chery中,以便复用。
使用JobHandler的init和destroy处理任务数据:init = “JobHandler初始化方法”, destroy = “JobHandler销毁方法”
执行流程:
任务启动后,根据类型及状态查询xxlJob任务表
如果存在未完成的任务,获取结束id,任务开始
处理任务
如果发生异常(业务异常、手动终止后的中断异常),更新xxlJob任务表,任务未完成
如果任务正常结束,更新xxlJob任务表,任务已完成
4、XXLJob任务表1234567891011121314CREATE TABLE `job_task` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id', `state` ...
解决技术债务需要注意的问题
1、分析解决技术债务的价值1.1、实际客户价值线上实际数据分析:为客户解决了什么问题、减少多少研发成本
1.2、研发团队价值通过数据分析,确定债务优先级
2、解决更紧急且重要问题
微信公众号用户慢查询优化心路历程
1、找到慢查询SQL1.1、找到数据库实例F6_gears(订单、评价)
https://hdm.console.aliyun.com/#/dbMonitor/MySQL
1.2、找到慢日志样本
1.3、查看慢日志样本
1.4、查看日志详情
2、现有情况2.1、数据量1234select count(*) from p_user_relation//7155611select count(*) from p_user//35218757
2.2、执行计划
2.3、索引
2.4、需求查询带有手机号的公众号用户。
3、优化3.1、方案一3.1.1、调换p_user与p_user_relation的位置SQL1234567891011121314151617181920212223242526SELECT p.id, p.user_id, p.nick_name, p.gender, p.wx_app_id, p.user_type, p.wx_open_id, p.wx_union_id, ...
AopUtils.getMostSpecificMethod解决代理对象获取不到方法参数名称问题
1、问题描述org.springframework.core.ParameterNameDiscoverer#getParameterNames(java.lang.reflect.Method)
获取正常实现类的方法参数正常,但是通过调用接口代理类的方法则获取不到方法参数名称。
切面相关代码:
123456789101112131415161718192021222324252627282930313233@Aspect@Component@Slf4jpublic class WxFuncAuthAspect { /** * 用于SpEL表达式解析. */ private final SpelExpressionParser parser = new SpelExpressionParser(); /** * 用于获取方法参数定义名字. */ private final ParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer ...
公众号粉丝状态搜索引擎探索之路
1、引子同步微信客户推送XXLJob(syncPushWxUserInfoJobShardingHandler)中调用的其中一段sql触发了慢查询。
任务:
需要验证修改后的sql是否影响正常功能使用
要调查推送的数据是否生效
2、探寻之路2.1、确定推送内容com.f6car.crm.push.user.BatchUserPusher#push找到推送内容格式:
123456789101112{ "msgMeta": { "type": "U",//com.f6car.crm.search.index.model.doc.MsgValues#TYPE_UPDATE "case": "WF"//com.f6car.crm.search.index.model.vo.CarMsgFields#CASE_WE_CHAT_FOLLOWER }, "rows": [ { ...