自定义线程池

SOFARPC 支持自定义业务线程池。可以为指定服务设置一个独立的业务线程池,和 SOFARPC 自身的业务线程池是隔离的。多个服务可以共用一个独立的线程池。

API使用方式

  1. UserThreadPool threadPool = new UserThreadPool();
  2. threadPool.setCorePoolSize(10);
  3. threadPool.setMaximumPoolSize(100);
  4. threadPool.setKeepAliveTime(200);
  5. threadPool.setPrestartAllCoreThreads(false);
  6. threadPool.setAllowCoreThreadTimeOut(false);
  7. threadPool.setQueueSize(200);
  8. UserThreadPoolManager.registerUserThread("com.alipay.sofa.rpc.quickstart.HelloService", threadPool);

如上为 HelloService 服务设置了一个自定义线程池。

在 SOFABoot 中如下使用

  1. <bean id="customExcutor" class="com.alipay.sofa.rpc.server.UserThreadPool" init-method="init">
  2. <property name="corePoolSize" value="10" />
  3. <property name="maximumPoolSize" value="10" />
  4. <property name="queueSize" value="0" />
  5. </bean>
  6. <bean id="helloService" class="com.alipay.sofa.rpc.quickstart.HelloService"/>

如下通过 sofa:global-attrs 元素的 thread-pool-ref 属性为该服务设置自定义线程池。customerThreadPool 是上面自定义线程池的 bean id 。

  1. <sofa:service ref="helloService" interface="XXXService">
  2. <sofa:binding.bolt>
  3. <sofa:global-attrs thread-pool-ref="customExcutor"/>
  4. </sofa:binding.bolt>
  5. </sofa:service>