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

CDI 2.0:如何检查用event.fireSync()激发的异步事件可以同时运行多少个

顾学真
2023-03-14

我正在使用Jersey、CDI2.0(Weld3.0.1.最终实现)和Tomcat编写一个REST web服务。webservice的目标是启动可以运行数分钟甚至数小时的长计算任务。任务应该通过发送到webservice的HTTP POST请求启动,但是请求必须立即完成并将响应发回客户端,而启动的任务应该在另一个线程上执行其工作。

我已经通过使用CDI2.0及其event.fireasync()方法解决了这个问题,该方法允许异步处理事件。处理POST请求的JAX-RS资源类触发异步事件,然后由单独的@applicationscopedCDI bean中的异步观察者方法(用@observesasync注释)处理该事件。

所描述的解决方案效果很好。但是,我注意到,当我在异步事件中同时激发多个长任务时,实际上只有四个任务在运行,而其余的任务都在排队。一旦四个正在运行的事件中的一个完成,第一个排队事件就开始处理。

    null

共有1个答案

秦才英
2023-03-14

对于您的第一个问题--默认值将基于可用的处理器。类似于runtime.getruntime().availableProcessors()+1。但是,我想您所追求的是配置选项。在这里您可以选择,您可以:

  • 使用焊缝配置并从预定义选项中挑选
    • 查看焊接文档的配置部分
    • 我建议使用fixed_timeout池(线程在不需要时不会逗留),此配置的关键是org.jboss.weld.executor.threadpooltype
    • 可以使用键org.jboss.weld.executor.threadpoolsize
    • 设置所需的线程量
    • 查看关于如何将配置选项传递给焊接的第19.1章

    关于你的第二个问题--我不得不让你失望。目前还没有办法在焊接中实现这一点。请随意创建一个焊接Jira问题,您可能会在未来看到它。

 类似资料:
  • 是否可以调用一个异步方法,以便它从一个同步的方法异步运行?我不关心它挂起同步调用程序直到它返回,而是希望该方法被异步调用。

  • 我在一个KeyListener中为一个非常简单的游戏编程控件。伊芙得到了下面的问题。 我做了类似的事情(只是一个简单的示例,而不是我实现的代码): 如果我同时按下两个键(左,上),你就可以移动charachter对角线。问题是监听器与最后一个按下的KeyEvent一起工作,所以如果我先按左再向上,但没有释放左再向上,对象就不会移动(仍然按左)。 我怎么处理?是否可以在我的keylistener的k

  • 警告试着告诉我什么?我该怎么办? 这是我的代码:它是否使用多线程运行?

  • 问题内容: 我正在使用Selenium WebDriver语法。我知道,在基于Selenium服务器的语法中,您可以执行以下操作来触发javascript事件: 如何在使用WebDriver(例如FirefoxDriver)创建的应用程序中执行相同操作? 问题答案: 不幸的是,Selenium WebDriver设计人员明确决定不在 Selenium 2中包含此功能。 明智的决定是不将此功能包含在

  • 问题内容: 我正在使用Selenium WebDriver语法。我知道,在基于Selenium服务器的语法中,您可以执行以下操作来触发javascript事件: 如何在使用WebDriver(例如FirefoxDriver)创建的应用程序中执行相同操作? 问题答案: 不幸的是,Selenium WebDriver设计人员明确决定不在 Selenium 2中包含此功能。 明智的决定是不将此功能包含在

  • 在我的代码中,我有: 带有普通JPanel的JFrame,其中包含一些JComponent对象。这些JComponents有:-一个JTextFields列表。-一个侦听器,当鼠标插入时高亮显示边框,当鼠标退出时隐藏边框。如果鼠标在jceeExit方法的边框上嵌套,那么当鼠标在jceeExit方法的边框上嵌套时,也会触发jceeExit: 问题是: 代码: 代码是为了解决上述问题而编写的。以下是J