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

创建 RpcThreadPoolUtil 工具类

为了将线程池封装成一个通用的工具类,以便在所有RPC接口调用时复用,你可以创建一个工具类 RpcThreadPoolUtil。这个工具类将负责创建和管理线程池,并提供一个方法来异步执行RPC调用。
  1. 创建 RpcThreadPoolUtil 工具类
import java.util.concurrent.*;public class RpcThreadPoolUtil {private static final int CORE_POOL_SIZE = 10; // 核心线程数private static final int MAXIMUM_POOL_SIZE = 20; // 最大线程数private static final long KEEP_ALIVE_TIME = 60L; // 线程空闲时间private static final TimeUnit TIME_UNIT = TimeUnit.SECONDS; // 时间单位private static final BlockingQueue<Runnable> WORK_QUEUE = new LinkedBlockingQueue<>(); // 工作队列private static final ExecutorService EXECUTOR;static {// 初始化线程池EXECUTOR = new ThreadPoolExecutor(CORE_POOL_SIZE,MAXIMUM_POOL_SIZE,KEEP_ALIVE_TIME,TIME_UNIT,WORK_QUEUE,new ThreadFactory() {@Overridepublic Thread newThread(Runnable r) {Thread t = new Thread(r);t.setName("Rpc-Thread-Pool-Worker");return t;}},new ThreadPoolExecutor.AbortPolicy() // 拒绝策略);}/*** 异步执行RPC调用** @param callable RPC调用的Callable任务* @param <T>      返回结果的类型* @return CompletableFuture*/public static <T> CompletableFuture<T> executeAsync(Callable<T> callable) {return CompletableFuture.supplyAsync(() -> {try {return callable.call();} catch (Exception e) {throw new RuntimeException(e);}}, EXECUTOR);}/*** 关闭线程池*/public static void shutdown() {EXECUTOR.shutdown();}/*** 立即关闭线程池*/public static void shutdownNow() {EXECUTOR.shutdownNow();}
}
  1. 使用 RpcThreadPoolUtil 进行RPC调用
    在你的业务逻辑中,可以使用 RpcThreadPoolUtil 来异步执行RPC调用。例如:
import java.util.LinkedHashMap;
import java.util.Objects;
import com.fasterxml.jackson.databind.ObjectMapper;public class YourClass {private final ObjectMapper objectMapper;public YourClass() {this.objectMapper = new ObjectMapper();  // 初始化 ObjectMapper}public void processVerification(OrderSignOffInput signOffInput, String hospitalSOID, VerifyOutput verifyOutput) {// 使用 RpcThreadPoolUtil 异步调用 getFreeClass 方法RpcThreadPoolUtil.executeAsync(() -> initializeVerifyService().getFreeClass(signOffInput.getOrSignInput(), hospitalSOID, signOffInput.getDoctorId())).thenAccept(agreementMedicineVerifyOutputDTO -> {if (agreementMedicineVerifyOutputDTO != null) {verifyOutput.setVerifyActionId(13L);verifyOutput.getSignVerifyResultList().add(this.createSignCommonVerifuResult(13L, objectMapper.convertValue(agreementMedicineVerifyOutputDTO, LinkedHashMap.class)));}}).exceptionally(ex -> {// 处理异常ex.printStackTrace();return null;});}// 在适当的地方调用 shutdown 方法以关闭线程池public void shutdown() {RpcThreadPoolUtil.shutdown();}
}

http://www.mrgr.cn/news/55936.html

相关文章:

  • 「毅硕|生信教程」 micromamba:mamba的C++实现,超越conda
  • C++类和对象之对象模型和this指针
  • vue项目引入高德地图
  • Next-Token Prediction is All You Need 智源发布原生多模态大模型Emu3
  • springboot项目多个数据源配置 dblink
  • 【机器学习】任务七:聚类算法 (K-means 算法、层次聚类、密度聚类对鸢尾花(Iris)数据进行聚类)
  • 基于Consul的 Redis 多实例监控方案
  • 【Dv2Admin】软删除的修改与恢复
  • 第6天:Intent和页面导航-补充材料——`MainActivity.kt`解读
  • SpringBoot 面试常见问答总结(一)
  • Ovito旋转模型的技巧
  • 【已解决】【Hadoop】 Shell命令易错点及解决方法
  • MRU烟气分析仪维修VARIOplus工业气体分析仪修理
  • 【前端构建】Snowpack: 现代化的前端构建工具
  • SAR ADC面试攻略:关键技术解析与面试问题全攻略
  • 使用GraphRAG系统实现本地部署的Ollama模型问答系统
  • 华为OD机试真题---游戏分组
  • 网络编程中容易踩的坑罗列,谨记!
  • Python 代码读取新闻语料文件,并进行新闻主题的统计分析
  • Linux 定时任务 (Crontab)
  • 合成生物学:设计生命的新工具
  • 美图设计室
  • 开源限流组件分析(一):juju/ratelimit
  • 在 gRPC 中,客户端和服务端的 Protocol Buffers(Protobuf)生成的文件必须保持一致性,以确保通信正常。
  • 宠物用品在线商城:SpringBoot技术的应用与实践
  • JAVA同城外卖跑腿团购到店跑腿多合一APP系统小程序源码