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

我可以配置特定Quarkus Vertx ConsumeEvent的池大小吗?

鱼锦
2023-03-14

根据quarkus指南-所有配置选项,参数< code > quar kus . vertx . worker-pool-size 允许我配置“工作线程池的线程大小”。

是否可以像这样配置特定QUKUS Consume事件的池大小:

    @io.quarkus.vertx.ConsumeEvent(value = "my-consume-event", blocking = true)
    public void start(String value) {
      // do the work
    }

我想设置线程的数量,可以处理这个my-usene-事件而不改变全局quarkus.vertx.worker-pool-size

在SmallRye Reactive Messaging指南中,有一个我想做的例子。

在这里,我可以使用一个Blocking注释,为其定义一个名称并配置线程池:

@Outgoing("Y")
@Incoming("X")
@Blocking("my-custom-pool")
public String process(String s) {
  return s.toUpperCase();
}

为上述工作池指定并发性需要定义以下配置属性:

smallrye.messaging.worker.my-custom-pool.max-concurrency=3

在本例中,我可以配置线程池的大小,该线程池将处理来自<code>我的自定义池</code>的消息。

谢谢

我尝试为< code > @ io . small rye . common . annotation . blocking(" my-custom-pool ")批注设置一个值,但收到以下错误:

The attribute value is undefined for the annotation type Blocking

我正在使用此依赖项:

    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-vertx</artifactId>
    </dependency>

我还在我的 GitHub 帐户上创建了这个项目来做这个测试

package org.acme;

import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.Response;

import org.jboss.logging.Logger;

import io.vertx.core.eventbus.EventBus;

@Path("/hello")
public class GreetingResource {
    private static final Logger LOG = Logger.getLogger(GreetingResource.class);

    @Inject
    EventBus eventBus;

    @GET
    public Response hello() {
        LOG.info("hello()");
        eventBus.send("my-consume-event", null);
        return Response
                .status(Response.Status.ACCEPTED)
                .build();
    }

    @io.quarkus.vertx.ConsumeEvent("my-consume-event")
    // @io.smallrye.common.annotation.Blocking("my-custom-pool")
    @io.smallrye.common.annotation.Blocking
    public void start(String value) {
        try {
            LOG.info("before the sleep");
            Thread.sleep(5000);
            LOG.info("after the sleep");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

共有1个答案

苏嘉歆
2023-03-14

您应该能够使用< code > @ io . small rye . common . annotation . blocking 批注:

@ConsumeEvent("my-consume-event")
@Blocking("my-custom-pool")
public void start(String value) {
  // do the work
}

并在application.properties中配置您的池大小:

smallrye.messaging.worker.my-custom-pool.max-concurrency=3

编辑

实际上,@io.smallrye.reactive.messaging.annotations.Block在用@ConsumeEvent注释的方法上不受支持。

此外,根据ConsumeEvent在错误的执行器上阻塞线程服务#19911,事件似乎是在默认的Quarkus执行器上执行的。

 类似资料:
  • Microprofile允许从RestClient定义connectionPoolSize,如下所示: 当我在我的项目中设置此属性时,Quarkus会忽略它。我该如何定义它?

  • 问题内容: 为什么在hibernate配置文件中为连接池设置10?size = 1是内置的size。为什么需要增加大小? 问题答案: 来自Hibernate API 文档。 但是,Hibernate自己的连接池算法非常初级。它旨在帮助您入门,不适合在生产系统中使用,甚至不用于性能测试。您应该使用第三方池来获得最佳性能和稳定性。只需将hibernate.connection.pool_size属性替

  • 问题内容: 无论我在分配时给它多大的尺寸,它仅显示固定的尺寸。有可能增加吗? 码: 问题答案: 大小由样式固定。这是一个标准化的接口元素,因此API不喜欢摆弄它。 但是,您可能可以对其进行缩放转换。但是,不确定在视觉上如何影响它。 仅从UI设计的角度来看,通常最好不留这些常见的标准化元素。用户被告知某些元素以一定的大小出现,并且它们表示特定的事物。更改标准外观会更改界面语法并使用户感到困惑。

  • 问题内容: 我正在启动一个Java jar文件,该文件通常需要比默认的64MB最大堆大小更多的文件。256MB的堆大小足以满足此应用的需求。是否有任何指定(可能在清单中?)启动jar时始终使用最大256MB的堆大小?(如果需要,请在下面提供更多详细信息。) 这是我用Java编写的命令行应用程序,它可以进行一些图像处理。在高分辨率图像(大约12兆像素及以上,这并不罕见)上,我收到OutOfMemor

  • 当我们用来谈论核心池大小和最大池大小之间的区别到底是什么? 可以借助示例来解释吗?

  • 我使用的是SpringBoot2.0。3释放。我想增加HikariCP的最大池大小,默认情况下为10。 我试着在带有 spring.datasource.hikari.maximum-池-大小=200 但是它不起作用,因为在日志中它仍然显示最大池大小为10。 我想改变的原因是,我不知怎么地达到了登台的极限,我不知道是什么原因造成的。