当前位置: 首页 > news >正文

找网上公司做网站360网址导航

找网上公司做网站,360网址导航,广州地域推广,网页开发工具软件背景 我们希望实现全链路信息,但是代码中一般都会异步的线程处理。 解决思路 我们可以对以前的 Runable 和 Callable 进行增强。 可以使用 ali 已经存在的实现方式。 TransmittableThreadLocal (TTL) 解决异步执行时上下文传递的问题 核心的实现思路如下&#…

背景

我们希望实现全链路信息,但是代码中一般都会异步的线程处理。

解决思路

我们可以对以前的 Runable 和 Callable 进行增强。

可以使用 ali 已经存在的实现方式。

TransmittableThreadLocal (TTL) 解决异步执行时上下文传递的问题

核心的实现思路如下:

1)异步执行前,把当前线程的 MDC 信息放入执行对象中。

2)异步执行时,把执行对象中的信息放入 MDC 等信息。

3) 异步执行后,清空执行对象。

问题

Runable 和 Callable 只是接口,没有额外信息,所以需要进行增强。

实现方式

接口定义

package com.github.houbb.heaven.support.concurrent.context;import java.util.Map;/*** 跨线程处理类** @since 0.3.0*/
public interface CrossThreadProcessor {/*** 初始化上下文* @param contextMap 上下文*/void initContext(Map<String, Object> contextMap);/*** 执行之前* @param contextMap 上下文*/void beforeExecute(Map<String, Object> contextMap);/*** 执行之后* @param contextMap 上下文*/void afterExecute(Map<String, Object> contextMap);}

对可执行接口进行增强

package com.github.houbb.heaven.support.concurrent.context;import com.github.houbb.heaven.util.lang.SpiUtil;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Callable;/*** 跨线程处理** 作用:用来跨线程处理传递信息,比如 async,线程池等。** 比如在 aop 中,直接处理。** <pre>* Object[] args = point.args();* Object arg0 = args[0];** // 直接转换为当前的对象* if(arg0 instanceOf Runnable) {*      args[0] = new CrossThreadWrapper((Runnable)arg0);* } else if(arg0 instanceOf Callable) {*      args[0] = new CrossThreadWrapper((Callable)arg0);* }** // 继续处理* </pre>* @param <T> 泛型* @since 0.3.0*/
public class CrossThreadWrapper<T> implements Runnable, Callable<T> {private Runnable runnable;private Callable<T> callable;/*** 通过 spi 获取所有的实现类*/private static List<CrossThreadProcessor> processorList = new ArrayList<>();/*** 上下文*/private final Map<String, Object> context = new HashMap<>();static {processorList = SpiUtil.getClassImplList(CrossThreadProcessor.class);}public CrossThreadWrapper(Runnable runnable) {// 任务执行之前this.initContext();this.runnable = runnable;}public CrossThreadWrapper(Callable<T> callable) {this.initContext();this.callable = callable;}@Overridepublic void run() {try {beforeExecute();this.runnable.run();} finally {afterExecute();}}@Overridepublic T call() throws Exception {try {beforeExecute();return this.callable.call();} finally {afterExecute();}}/*** 初始化上下文*/protected void initContext() {for(CrossThreadProcessor processor : processorList) {processor.initContext(context);}}/*** 执行前*/protected void beforeExecute() {for(CrossThreadProcessor processor : processorList) {processor.beforeExecute(context);}}/*** 执行之后*/protected void afterExecute() {for(CrossThreadProcessor processor : processorList) {processor.afterExecute(context);}}}

用法

实现接口

我们只需要实现 CrossThreadProcessor 接口。

然后 spi 中配置,服务会自动发现。

aop

可以在 spring aop 中,对以前的方法执行进行增强。

http://www.khdw.cn/news/43751.html

相关文章:

  • 学做婴儿衣服网站好获客引流100种方法
  • 个人网站 可以做论坛吗查询域名网站
  • 衡水专业做网站软件定制开发公司
  • 没有服务器 怎么做网站晨阳seo服务
  • 如何做色流量网站网络营销具有什么特点
  • 毕设用别人网站做原型成都门户网站建设
  • 同ip怎么做不同的网站现在广告行业好做吗
  • 百度网站建设微信封面广州新闻热点事件
  • 北京建网站的营销培训班
  • 新密做网站公司品牌软文范文
  • 安的网络网站建设网络营销的策略包括
  • 怎么建设推广网站腾讯网qq网站
  • 怎么做卡盟网站免费免费进入b站2022年更新
  • 黄山网站开发公众号运营收费价格表
  • 棋牌游戏网站怎么做百度优化点击软件
  • 网站对固定ip转向怎么做2022年今天新闻联播
  • 如何做相亲网站怎么做私人网站
  • 网页设计跟做网站一样吗关键词优化的五个步骤
  • 建立一个网站需要多少钱费用电子商务主要干什么
  • 安阳空气seo搜索引擎优化平台
  • 微信小程序商城制作安卓手机优化大师官方下载
  • 企业解决方案怎么写seo优化博客
  • 网站设计公司有用吗厦门网站关键词推广
  • 站长工具精华新手怎么引流推广推广引流
  • 网站建设策划书5000字seo百度推广
  • wordpress旅游类网站模板建一个企业网站多少钱
  • 嘉兴网站排名北京seo优化
  • 网站短信验证码接口怎么做石家庄百度seo排名
  • 传奇动态网站怎么做seo推广培训班
  • 保定哪家公司做网站查询网站流量的网址