비동기 원격 호출 스레드 풀 큐

수입 com.google.common.util.concurrent.ThreadFactoryBuilder; 
수입 lombok.extern.slf4j.Slf4j;
java.util.concurrent의를 가져옵니다. *;

1, 구현 클래스

SLF4J @ 
Public 클래스 MucRpcThreadPoolExecutor {
/ **
*任务队列
*设置有界队列长度为1,024
* /
개인 정적 인터페이스 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 & 실행 가능한 상기 가능한 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 스레드 스레드가 가득, 새로운 태스크가 파기 {}"이름);
}
}
}
두 추상 클래스를 스레드
// BaseRpcBo 요청 엔티티 클래스
공공 추상 클래스 AbstractRpcRunner는 구현의 Runnable {<T는 BaseRpcBo 확장> 
보호 T baseRpcBo을;


공공 T getBaseRpcBo는 () {
baseRpcBo를 반환;
}

공개 무효 setBaseRpcBo (T baseRpcBo) {
this.baseRpcBo = baseRpcBo;
}
}

3实体类
@Data 
Public 클래스 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