EJB 3.1 异步方法和线程池

2023-12-26

我每天需要使用 EJB 3.1 异步方法处理大约 250.000 个文档,才能应对整体的长时间任务。

我这样做是为了使用更多线程并同时处理更多文档。这是伪代码的示例:

// this returns about 250.000 documents per day
List<Document> documentList = Persistence.listDocumentsToProcess();

for(Document currentDocument: documentList){
      //this is the asynchronous call
      ejbInstance.processAsynchronously(currentDocument);
}

假设我有一个大小为 10 的线程池和 4 核处理器,我的问题是:

  • 应用程序服务器将同时处理多少个文档?
  • 当池中的所有线程都在处理文档并且又出现一个异步调用时会发生什么?这会像某种 JMS 队列一样工作吗?
  • 采用 JMS 队列解决方案有什么改进吗

我使用 Java EE 6 和 WebSphere 8.5.5.2


异步EJB方法调用的默认配置如下(来自信息中心):

EJB容器工作管理器具有以下线程池设置:

Minimum number of threads = 1
Maximum number of threads = 5
Work request queue size = 0 work objects
Work request queue full action = Block
Remote Future object duration = 86400 seconds

所以尝试回答你的问题:
应用程序服务器将同时处理多少个文档? (假设10个大小的线程池)

该线程池适用于所有 EJB 异步调用,因此首先您需要假设您的应用程序是唯一使用 EJB 异步调用的应用程序。那么你可能会有 10runnable实例,将并行处理。是否会被处理同时取决于系统中可用的核心/线程的数量,因此您无法获得准确的数字(例如,某些核心/线程可能正在执行 Web 工作,或使用 cpu 的其他进程)。

当池中的所有线程都在处理文档并且又出现一个异步调用时会发生什么?
这取决于Work request queue size and Work request queue full action, 设置。如果池中没有可用线程,则请求将排队,直到达到队列大小。然后这取决于行动,这可能是Block or Fail.

采用 JMS 队列解决方案有什么改进吗
取决于您的需求。以下是 JMS 解决方案的一些优缺点。
Pros:

  • 持久性 - 如果使用 JMS,您的异步任务可以是持久的,因此在服务器发生故障的情况下您不会丢失它们,并且将在重新启动后或由其他集群成员处理。 EJB 异步队列仅保存在内存中,因此队列中的任务在发生故障时会丢失。
  • 可扩展性 - 如果将任务放入队列,它们可能会由集群中的许多服务器同时处理,而不仅限于单个 JVM
  • 过期和优先级 - 您可以为消息定义不同的过期时间或优先级。

Cons:

  • 更复杂的应用程序 - 您将需要实现 MDB 来处理您的任务。
  • 更复杂的基础设施 - 您将需要数据库来存储队列(文件系统可用于单个服务器,共享文件系统可用于集群),或外部消息传递解决方案,例如WebSphere MQ
  • 处理单个项目的性能稍低,服务器上的负载较高,因为它必须序列化/反序列化到持久存储
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EJB 3.1 异步方法和线程池 的相关文章

  • 一起使用@Scheduled 和@Async 吗?

    如果我想要一个重复异步的方法 我可以一起使用 Scheduled 和 Async 吗 Async Scheduled fixedDelay x public void doSomethingEveryXMinuteAsync action
  • 从 Web 服务器异步调用应用程序

    我有一个用 Spring 制作的 在 Tomcat 上运行的 Web 应用程序 在同一台机器上有一个普通的 Java 应用程序 我想通过从Web服务器调用Java应用程序来执行它 但我想让应用程序不会使用服务器的资源 它涉及分类器的训练 因
  • 集群应用程序服务器中的 JMS 主题订阅者如何接收消息?

    假设我创建了一个带有一个订阅者 PropertiesSubscriber 的 JMS 主题 PropertiesTopic PropertiesSubscriber 运行在负载平衡的应用程序服务器集群中 如下图所示 替代文本 http ww
  • 异步任务、视频缓冲

    我正在尝试理解 C 中的任务 但仍然遇到一些问题 我正在尝试创建一个包含视频的应用程序 主要目的是从文件中读取视频 我使用 Emgu CV 并通过 TCP IP 发送它以在板上进行处理 然后以流 实时 方式返回 首先 我是连续做的 所以 读
  • 与竞争的消费者顺序处理消息

    Problem 我以特定顺序 FIFO 在队列上接收消息 比如订单 我的队列中有竞争的消费者 为了进一步增加复杂性 消费者可能只对订单的特定版本感兴趣 具体取决于其状态 例如版本 1 版本 2 和版本 5 订单版本号在订单上可用 但不能用于
  • 目的地为必填项

    在 Wildfly 8 1 0 服务器中部署 Ear 时出现以下错误 1 Error Caused by javax resource spi InvalidPropertyException Destination is mandator
  • Javascript/jQuery 变量未给出预期值

    和我之前的其他人一样 我也在 Javascript 的范围内苦苦挣扎 那并试图阅读该死的东西 我已经检查了关于这个问题的一些先前的线程 但我似乎无法让它们正确地应用于我的问题 在下面的示例中 我想操纵中的值tagsArr数组 一旦数组已完全
  • 我是否需要关心异步 Javascript 的竞争条件?

    假设我加载了一些我知道在将来某个时候会调用的 Flash 影片window flashReady并将设置window flashReadyTriggered true 现在我有一个代码块 我想在闪存准备好时执行它 我希望它立即执行 如果wi
  • React useEffect hook 和 Async/await 自己的获取数据函数?

    我尝试创建一个从服务器获取数据的函数 并且它有效 但我不确定这是否正确 我创建了一个函数组件来获取数据 使用useState 使用效果 and 异步 等待 import React useState useEffect from react
  • 如何从 WinRT StreamSocket 读取所有可用数据并清空 inputStream?

    我想在向套接字写入新数据之前读取当前正在等待套接字的所有数据 WinRT中的读取方法都是异步的 所以我不能简单地while直到套接字为空 由于我确实想丢弃套接字上的数据 因此我不想使用读取器 而是直接从套接字读取数据IInputStream
  • 异步迭代器 Task>

    我正在尝试实现一个返回迭代器的异步函数 这个想法如下 private async Task
  • 启动任务和等待任务有什么区别?

    开始和等待有什么区别 下面的代码取自 Stephen Cleary 的博客 包括评论 public async Task DoOperationsConcurrentlyAsync Task tasks new Task 3 tasks 0
  • 为什么 .NET 异步等待文件复制比同步 File.Copy() 调用消耗更多 CPU?

    为什么下面的代码会产生 public static class Program public static void Main params string args var sourceFileName C Users ehoua Desk
  • 使用 Thread.Sleep() 时,异步编程如何与线程一起工作?

    假设 前言 在之前的问题中 我们注意到Thread Sleep阻塞线程参见 什么时候使用Task Delay 什么时候使用Thread Sleep https stackoverflow com questions 20082221 whe
  • 从 Firestore 获取值并使用异步将输出存储为全局

    我正在尝试获取 firestore 数据 然后将其存储在变量中 async function getchildContent Parent Message let count 0 var db firebase firestore var
  • 异步回调在哪个线程上运行?

    我正在做几个HttpWebRequest BeginGetResponse调用 并在回调方法中BeginGetResponse 我正在调用一个事件处理程序 在EventHandler中 有测试下载是否成功的逻辑 如果没有 它会尝试重新下载
  • FakeAsync/tick (Async/whenStable) 与 detectorChanges()

    您能帮我区分这两件事吗 根据我的理解 如果你只使用 observable 你可以使用 detectorChanges 因此 您可以直接更改组件属性或监视服务调用并返回可观察的值 然后调用 detectorChanges 更改将在 html
  • 嵌套异步/等待 Nodejs

    似乎无法弄清楚为什么这对我不起作用 我有一个父函数 它对子加载进程执行 AWAIT LOAD 进程又调用另一个名为 LOADDATA 的 AWAIT 所以基本上是这样的 module exports async function try a
  • 如何使用 AFNetworking 2 按严格的顺序发送请求?

    我正在进行同步以将 sqlite 数据库镜像到服务器数据库 我有一个主从表 其中的详细信息必须尽快发送到服务器 但是 细节 3 可能会先于细节 2 到达 我需要模仿对文档执行的步骤并尊重操作的顺序 当记录保存在本地时 我会发送通知 然后发布
  • WPF 中的调度程序和异步等待

    我正在尝试学习 WPF C 中的异步编程 但我陷入了异步编程和使用调度程序的困境 它们是不同的还是在相同的场景中使用 我愿意简短地回答这个问题 以免含糊不清 因为我知道我混淆了 WPF 中的概念和函数 但还不足以在功能上正确使用它 我在这里

随机推荐

  • 将表单中的数据输入数据库 PDO

    我学习了 MySQL 创建了一个表单并让它与数据库一起工作 然后我被告知我应该使用准备好的语句来执行 PDO 所以我对此做了一些研究并更改了我的代码 我现在的代码是正确的 我认为 但我无法弄清楚数据如何输入 正如您在我的代码中看到的 我让数
  • Eclipse中运行到光标处的快捷键是什么?

    Eclipse Indigo 中 运行到光标 的快捷键是什么 The function that you need in eclipse is called Run to Line and you should call it with C
  • 如何从发送到NodeMCU的lua中的http请求获取post参数

    我通过 Tasker Android 应用程序 将此 HTTP POST 请求发送到我的 NodeMCU 如下所示 POST HTTP 1 1 Content Type application x www form urlencoded U
  • HTTP/2 流与 HTTP/1.1 连接

    如果我们忽略 HTTP 1 1 中创建新连接的开销 是否存在连接性能比 HTTP 2 流更好的情况 我对页面加载时间进行了一些性能测试 发现对于响应较大的请求 HTTP 1 1 https 的性能优于 HTTP 2 然后 当我开始增加并发级
  • 如何从 Eclipse 项目中排除某些文件夹?

    我正在向我们现有的代码库添加一个 eclipse 项目 我想知道是否有办法完全排除某些目录被 eclipse 拾取 原因是我们的存储库中有一个巨大的 第三方 目录 该目录无法出现在项目中结对编程 https stackoverflow co
  • 锚标记 与 Shadow dom 内的哈希值

    我想在使用 Shadow DOM 的自定义元素内使用带有哈希 URL 的锚元素 我希望浏览器向下滚动到该锚点 但它没有这样做 至少 Chrome 是这样 Detail 我有一个像这样的index html a href destinatio
  • “浮动”的最大值是多少? [复制]

    这个问题在这里已经有答案了 当我检查 float MaxValue 的值时 我得到 3 402823E 38 这是 340 282 300 000 000 000 000 000 000 000 000 000 000 那么为什么当我尝试为
  • 如何调用 shell 脚本并从另一个 shell 脚本传递参数

    我正在从另一个 shell 脚本调用 shell 脚本 并且被调用的脚本需要一些输入 命令行 参数 我有下面提到的代码 但那不起作用 我不知道为什么参数值没有传递给被调用的脚本 script1 sh bin bash ARG1 val1 A
  • 如何通过网络在两个 VB.NET 应用程序之间进行通信

    我正在使用 VB NET 进行编程 我想将一个字符串或一个整数从一个 VB NET 应用程序发送到不同计算机上的另一个 VB NET 应用程序 我看了一些教程 但所有教程都只能在本地网络上运行 我希望它可以在互联网上运行 这是我的本地连接代
  • 远程服务器返回意外响应:(400) 错误请求

    我收到异常 远程服务器返回意外响应 400 错误请求 我不知道原因 web config 看起来不错 但也许我没有看到问题
  • firebase 如何检测“app_remove”

    在 Android 应用程序的 Firebase 分析中 我可以看到 app remove 事件 但 Android 操作系统不提供任何回调来检测应用程序是否被卸载 那么 firebase 是否真的知道 app remove 事件是否发生了
  • Google Java 风格的 Checkstyle 规则

    是否有一个 Checkstyle 规则文件谷歌Java风格 http google styleguide googlecode com svn trunk javaguide html checkstyle 团队几天前添加了它 这里是 ht
  • 是什么让 Smalltalk 能够进行图像持久化,为什么像 Ruby/Python 这样的语言不能自我序列化?

    在smalltalk中 您可以将世界状态保存到图像文件中 我认为这与 Smalltalk 的 序列化 自身能力有关 也就是说 对象可以生成自己的源代码 1 这是一个准确的理解吗 2 将这种能力添加到现代语言 显然是非 Lisp 中面临的挑战
  • 使用 Cython 生成的可执行文件真的没有源代码吗?

    我读过了在 Cython 中制作可执行文件 https stackoverflow com questions 22507592 making an executable in cython和 BuvinJ 的回答如何有效混淆Python代
  • 以编程方式选择 Kendo 网格行

    我找到了类似标题的帖子 但仍然无法解决我的问题 我肯定做错了什么 在 Kendo 网格配置中 有一些函数可以获取上下文 网格 并读取所选行 change function e refresh this 这就是我配置 更改 事件的方式 在函数
  • Pygame.movi​​e 丢失[重复]

    这个问题在这里已经有答案了 我目前正在使用 RPi 3B 最新的 Raspbian Jessie 进行一个小项目 其中涉及播放短的 mp4 文件 由于 Pygame 似乎支持播放 mpg 文件 因此我将视频转换为该格式 然而 当我尝试导入电
  • 代码合同 - Visual Studio Team Service 脚本化构建服务器单元测试失败

    我最近将代码契约添加到我的解决方案中 经过一些修改后 我们的构建运行没有任何问题 但我们的单元测试由于代码契约而失败 环境 源代码控制和构建服务器托管在Visual Studio 团队服务 https www visualstudio co
  • 从 Tinymce 获取 HTML 值

    有没有办法使用 jQuery 从 TinyMCE 编辑器获取 HTML 内容 以便我可以将其复制到另一个 div 我在内容上尝试了几种方法 例如 val 但它似乎不起作用 如果您正在使用 jquery 适配器进行初始化 selector t
  • Codeigniter 图片上传只会上传到一个目录

    function upload path config overwrite TRUE config allowed types jpg jpeg gif png config max size 2000 if path profile co
  • EJB 3.1 异步方法和线程池

    我每天需要使用 EJB 3 1 异步方法处理大约 250 000 个文档 才能应对整体的长时间任务 我这样做是为了使用更多线程并同时处理更多文档 这是伪代码的示例 this returns about 250 000 documents p