gpt4 book ai didi

service - TomEE 中的托管执行器服务

转载 作者:行者123 更新时间:2023-12-04 00:31:59 28 4
gpt4 key购买 nike

我的服务器有 48 个 CPU,在 TomEE+ 7.0.2 上托管 Java EE 7 REST API。

一些 API 在运行并行算法时需要使用尽可能多的 CPU。 并行化部分不需要任何数据库或其他资源,只需在共享的 double[][] 矩阵中进行一些繁重的工作。

我通常在 EJB 上下文中工作,但对于这个特定实例来说,这不是必需的(而且最好不要)。

到目前为止我一直在使用

ExecutorService pool = Executors.newFixedThreadPool(maxThreads); 

为了实例化一个执行器,但由于这似乎在操作系统级别产生实际线程,我不是它的忠实粉丝 - 在一些 JMeter 负载测试之后它甚至导致了整个 bash 被阻塞的程度在硬重启之前,我什至无法再通过 SSH 服务器。

我偶然发现了“托管执行器服务”的概念,但我找不到关于如何使用它(以及配置它)的在线教程/示例。

有人可以就以下内容分享想法吗?

a) 如何在 TomEE 中配置线程池(例如通过 server.xml、context.xml 或 tomee.xml),代码示例将不胜感激?

b) 有没有一种方法可以只使用一些默认的线程池(并且足够聪明以至于不需要调整,如果没有,我可以从哪里开始调整它)?

c) 我如何在 Java 中查找线程池 - 首选通过 JDNI 查找?

d) 如果我一旦决定让该资源成为 EJB 的一部分,注入(inject)代码会是什么样子?

我的应用程序上下文在 server.xml 中指定为“myContext”,所以如果您提供示例,请指出查找字符串的确切外观如何?

除此之外,我有一个非常简单的 TomEE+ 7.0.2 安装,到目前为止我没有接触任何配置。

非常感谢您的帮助!

丹尼尔

最佳答案

这里有一个很好的入门教程:https://martinsdeveloperworld.wordpress.com/2014/02/25/using-java-ees-managedexecutorservice-to-asynchronously-execute-transactions/

如果你注入(inject)@ManagedExecutorService,TomEE 应该给你一个默认的服务和池。如果没有,那可能是一个错误:

@Resource
private ManagedExecutorService mes;

你应该能够像这样在 TomEE.xml 中配置它(我没有测试这个):

<Resource id="myManagedExecutorService" type="javax.enterprise.concurrent.ManagedExecutorService">
Core = 5
Max = 25
KeepAlive = 5 s
Queue = 15
WaitAtShutdown = 30 seconds
</Resource>

在你的代码中:

@Resource("myManagedExecutorService")
private ManagedExecutorService mes;

我通过查看 service-jar.xml 弄清楚了这一点。在我看来,您可能还需要 JMS 和 @Asyncronous,这是比 ManagedExecutorService 更好的选择

关于service - TomEE 中的托管执行器服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46590256/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com