非同期リモート呼び出し元のスレッドプールキュー

輸入com.google.common.util.concurrent.ThreadFactoryBuilder。
輸入lombok.extern.slf4j.Slf4j;
輸入java.util.concurrentの*。;

1、実装クラス

SLF4J @ 
パブリッククラスMucRpcThreadPoolExecutor {
/ **
*任务队列
*设置有界队列长度为1024
* /
プライベート静的BlockingQueueの<Runnableを>キュー=新しいArrayBlockingQueue <Runnableを>(1024);

プライベート静的ExecutorServiceのExecutorServiceの=て、新しいThreadPoolExecutor(
4、16、60、TimeUnit.SECONDS、
キュー、
新しいThreadFactoryBuilder()setNameFormat( "MUC-RPC-thd-%D")ビルド()、。。
新RpcExecutionHandler());

パブリック静的ボイドasyncRpcSubmit(AbstractRpcRunnerランナー){
executorService.submit(ランナー)。
}


プライベート静的クラスRpcExecutionHandler器具のRejectedExecutionHandler {
@Override
公共ボイドrejectedExecution(R&Runnableを、ThreadPoolExecutor執行LT){
文字列名=にThread.currentThread()のgetName();.
IF(R&LT AbstractRpcRunner instanceofの){
IF(!((AbstractRpcRunner)R&LT).getBaseRpcBo()= NULL)
名。=((AbstractRpcRunner)R&LT).getBaseRpcBo()getReqId();
}
log.warn( "プールキューRPC-MUC-スレッドのスレッドがいっぱいになると、新しいタスクが破棄される:{}"、名前);
}
}
}
2スレッド抽象クラス
// BaseRpcBo要求エンティティクラス
パブリック抽象クラスAbstractRpcRunner実装Runnableを{<TはBaseRpcBo延び> 
保護されたT baseRpcBoと、


パブリックT getBaseRpcBo(){
baseRpcBoを返します。
}

公共ボイドsetBaseRpcBo(T baseRpcBo){
this.baseRpcBo = baseRpcBo。
}
}

3、实体类
@data 
パブリッククラスBaseRpcBo実装シリアライズ{
/ **
*リクエストID
* /
プライベート文字列REQID;

/ **
*リモートコールアドレス
* /
@JSONField(= falseにシリアライズ)
プライベート文字列rpcUrl;

/ **
*リクエストヘッダ
* /
@JSONField (falseに=シリアライズ)
プライベートマップ<文字列、文字列>ヘッダー;
}

4は、メソッドを呼び出し
public void asyncGrowthUp(String uid) {
GrowthUpRpcBo rpcBo = new GrowthUpRpcBo();
rpcBo.setStamp(DateFormatUtils.format(new Date(), "yyyyMMddHHmmss"));
rpcBo.setUid(uid);
rpcBo.setReqId(UUIDUtil.randomId());
rpcBo.setRpcUrl(mjHttpUtils.getAbsUrl(MjConstant.API_GROWTH_UP_SYNC));
Map<String,String> header = new HashMap<>(1);
header.put("Content-Type", "application/json;charset=UTF-8");
rpcBo.setHeaders(header);
MucRpcThreadPoolExecutor.asyncRpcSubmit(new PostJsonRpcRunner(mjHttpUtils, rpcBo));
log.info("growth up notify to iot finish, uid:{}, reqId:{}", uid, rpcBo.getReqId());
}
5、GrowthUpRpcBo
@Data
public class GrowthUpRpcBo extends BaseRpcBo{
/**
* 请求时间戳
* 格式为 yyyyMMddHHmmss
*/
String stamp;
/**
* 用户id
*/
String uid;
}




おすすめ

転載: www.cnblogs.com/fuqiang-terry/p/12529781.html