当前位置: 首页 > 知识库问答 >
问题:

Quarkus:如何设置全局自定义ThreadPoolExecutor

程举
2023-03-14

我正在研究一个项目,其中上下文和会话由ThreadLocal使用ThreadPoolExecutor安全地管理(信息从线程传递到ThreadPoolExecutor内部的另一个线程)。

我们有:

  1. ThreadPoolExecutor:它实现beforeExecute和afterExecute方法行为,以确保信息从线程传递到另一个线程,并在afterExecutre方法中清除线程上下文。
  2. ThreadFactory:负责创建保存ThreadLocal会话信息的自定义命名线程。
  3. 在BeforeExecute中使用的自定义可运行程序。此运行可使用原始的一个+其他所需的信息(例如会话)

共有1个答案

葛炯
2023-03-14

Quarkus版本:1.9.1.最终版

爪哇:11

您可以通过配置属性来优化Quarkus主服务执行器。查看所有quarkus.thread-pool.*属性,然后将其用作常规服务执行器。

为了将这个线程池注入到您的服务中,请确保通过添加以下扩展来支持上下文传播。/MVNW quarkus:add-extensions=“quarkus-smallrye-context-propagation”,您可以在此链接中看到

将主服务执行器注入您的服务非常简单:

@Inject ManagedExecutor Exec;

创建一个单独的服务执行器这是另一种方法(然而,您应该问自己,使用一个单独的执行器我得到了什么?,我在寻找什么?),也许有意义,我想这取决于具体情况。在“本例”中,您可以创建自己的ManagedExcutor并使用它,例如:


import io.quarkus.runtime.Startup;
import org.eclipse.microprofile.context.ManagedExecutor;

import javax.enterprise.context.ApplicationScoped;
import javax.inject.Named;
import javax.ws.rs.Produces;

public class Producers {

    private final static int POOL_SIZE = 4; // TODO move on this hardcode properties to a config file
    private final static int POOL_QUEUE_SIZE = 10;

    @Startup // Instanciated at start-time
    @ApplicationScoped // Only one instance for all your app (Singleton)
    @Produces 
    @Named("customServiceExecutor") // tag your instance, because remember that you will have also another ServiceExecutor (the default one)
    ManagedExecutor managedCustomExecutor() {

        System.out.println("customServiceExecutor created (once)!.");

        return ManagedExecutor.builder()
                .maxAsync(POOL_SIZE)
                .maxQueued(POOL_QUEUE_SIZE)
                .build();
    }

}


import io.smallrye.context.api.NamedInstance;
import org.eclipse.microprofile.config.inject.ConfigProperty;
import org.eclipse.microprofile.context.ManagedExecutor;


import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/hello/")
public class HelloResource {

    @ConfigProperty(name = "org.pjgg.greeting")
    private String greeting;

    @Inject
    @NamedInstance("customServiceExecutor")
    ManagedExecutor delorean;

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String hello() {
        System.out.println(java.lang.Thread.activeCount());

        var promise = delorean.supplyAsync(()-> "You will see this in the future !!!");
        promise.thenAccept(System.out::println);
        System.out.println(java.lang.Thread.activeCount());

        return greeting;
    }
}
 类似资料:
  • 我正在使用MPAndroidChart显示一个相对简单的条形图。 有2件事我需要设置,我不知道如何自定义: > 我需要为每个条添加文本,而不是简单的值,每个条本身也有样式。 在每个条的顶部,我需要放置各种类型的可绘制材料来覆盖它的宽度(例如一个条中高度为2dp的蓝色,或另一个条上高度相同的黄色渐变)。 下面是我需要做的一个演示: > 我知道我也可以通过使用添加图标,但这似乎不适用于应该使用整个条形

  • 我目前正在做一个ReactJS项目,它使用了Webpack2和TypeScript。除了一件事之外,一切都运行得很好——我找不到一种方法将我自己编写的接口移动到单独的文件中,以便它们对整个应用程序可见。 出于原型设计的目的,我最初在使用它们的文件中定义了接口,但最终我开始添加一些在多个类中需要的接口,这时所有的问题都开始了。无论我对我的< code>tsconfig.json做什么更改,也无论我把

  • 问题内容: 我正在研究Android项目。我有一个prefs.xml代码,像这样 而且我需要自定义首选项布局。我创造了; custom_name_setting_layout.xml 并编写一个SettingActivity.java 我的问题是;我写了setBackgroundColor方法,但是没有用。不起作用的意思是,该程序正在运行而没有错误(例如NullReferenceException

  • 主要用于设置三级权限以及密码策略等。 该功能用于设置是否启用三级权限以及密码策略相关配置。参数设置完成后,需要5分钟后生效。 入口:在云管平台单击左上角导航菜单,在弹出的左侧菜单栏中单击 “系统配置/全局设置/全局设置” 菜单项,进入全局设置页面。 目前全局设置支持设置以下选项: 配额检查开关:设置是否启用配额检查,默认关闭配额检查。如用户有配额限制的要求,可以开启配额检查,开启后,用户可以在域或

  • 目前仅支持字典设置和全局设置,参数配置后全局生效。 字典设置 用于自定义云管平台中常用菜单的显示名称。 全局设置 主要用于设置三级权限以及密码策略等。

  • 1)加密设置 加密设置分为,PC加密设置和移动加密设置。 PC加密设置: 当PC加密为“打开”状态时,新上传的视频会进行加密(加密视频只能使用获得场景视频播放器),已上传的视频保持不变。 当PC加密为“关闭”状态时,新上传的视频不会进行加密,已上传的视频保持不变。 移动加密设置: 非加密——当设置成【非加密】时,移动端将不受限制,此时不受保护。 WEB授权——可以在移动WEB端播放和APP端播放,