Java 在同一队列上读取的多个MDB侦听器
我需要实现多个MDB侦听器来侦听单个队列。随着队列负载的增加,一个侦听器不足以处理该负载。我想知道实现这一目标的最佳途径是什么 a。我可以创建类似的MDB类并将它们部署到WebSphereServer上。 B使用任何配置的任何其他方式Java 在同一队列上读取的多个MDB侦听器,java,listener,ejb-3.0,message-driven-bean,Java,Listener,Ejb 3.0,Message Driven Bean,我需要实现多个MDB侦听器来侦听单个队列。随着队列负载的增加,一个侦听器不足以处理该负载。我想知道实现这一目标的最佳途径是什么 a。我可以创建类似的MDB类并将它们部署到WebSphereServer上。 B使用任何配置的任何其他方式 请提供正确的方法,好像可以动态配置侦听器并在需要时启用它们,或者只有一个方法点(a)可以实现这一点?您缺少一个关键点。它是实例化一个或多个bean以处理客户端请求的容器。企业bean的整个世界都将可伸缩性作为其关键点 基本上,除了设计和部署bean之外,您不需要做
请提供正确的方法,好像可以动态配置侦听器并在需要时启用它们,或者只有一个方法点(a)可以实现这一点?您缺少一个关键点。它是实例化一个或多个bean以处理客户端请求的容器。企业bean的整个世界都将可伸缩性作为其关键点
基本上,除了设计和部署bean之外,您不需要做任何其他事情。容器将完成其余工作。您缺少一个关键点。它是实例化一个或多个bean以处理客户端请求的容器。企业bean的整个世界都将可伸缩性作为其关键点
基本上,除了设计和部署bean之外,您不需要做任何其他事情。容器将完成其余的工作。如果您使用JEE规范中定义的MDB使用
@MessageDriven
注释,那么服务器容器将负责管理这些bean的实际实例化和扩展。我对Websphere不太熟悉,但大多数服务器都有EJB池的概念,它大致可以转换为线程池,让您可以开箱即用地并行执行。这样,服务器就有了一组实例,可以处理队列中的消息。每个bean实例将仅在执行其onMessage
方法所需的时间内处于活动状态,之后将清理并返回队列。假设您有一个MDB池,大小为20。如果队列中等待的消息超过20条,则服务器将用尽所有可用实例并同时处理20条消息。例如,在Wildfly/JBoss中,您可以使用EJB子系统和相应的池设置来管理EJB池
<subsystem xmlns="urn:jboss:domain:ejb3:4.0">
<!--omitted for brevity... -->
<mdb>
<resource-adapter-ref resource-adapter-name="${ejb.resource-adapter-name:activemq-ra.rar}"/>
<bean-instance-pool-ref pool-name="mdb-strict-max-pool"/>
</mdb>
<pools>
<bean-instance-pools>
<strict-max-pool name="mdb-strict-max-pool" derive-size="from-cpu-count" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
</bean-instance-pools>
</pools>
<!--omitted for brevity... -->
这里我们指定,消息驱动bean应该使用一个名为mdb strict max pool
的池,该池的大小来自系统上的CPU数量。您还可以指定绝对值,例如max pool size=“20”
所有这些仅与在单个服务器实例上运行队列相关。如果您真的在做一个消息密集型应用程序,那么您很可能需要一个分布式消息传递,带有专用的消息代理和多个处理实例。虽然许多服务器都支持这种场景(例如Wildfly ActiveMQ集群),但这确实是另一个讨论的主题
有关更多信息,请查看和您的服务器文档。愉快的黑客行为。如果您使用JEE规范中定义的MDB,并使用
@MessageDriven
注释,那么服务器容器将负责管理这些bean的实际实例化和扩展。我对Websphere不太熟悉,但大多数服务器都有EJB池的概念,它大致可以转换为线程池,让您可以开箱即用地并行执行。这样,服务器就有了一组实例,可以处理队列中的消息。每个bean实例将仅在执行其onMessage
方法所需的时间内处于活动状态,之后将清理并返回队列。假设您有一个MDB池,大小为20。如果队列中等待的消息超过20条,则服务器将用尽所有可用实例并同时处理20条消息。例如,在Wildfly/JBoss中,您可以使用EJB子系统和相应的池设置来管理EJB池
<subsystem xmlns="urn:jboss:domain:ejb3:4.0">
<!--omitted for brevity... -->
<mdb>
<resource-adapter-ref resource-adapter-name="${ejb.resource-adapter-name:activemq-ra.rar}"/>
<bean-instance-pool-ref pool-name="mdb-strict-max-pool"/>
</mdb>
<pools>
<bean-instance-pools>
<strict-max-pool name="mdb-strict-max-pool" derive-size="from-cpu-count" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
</bean-instance-pools>
</pools>
<!--omitted for brevity... -->
这里我们指定,消息驱动bean应该使用一个名为mdb strict max pool
的池,该池的大小来自系统上的CPU数量。您还可以指定绝对值,例如max pool size=“20”
所有这些仅与在单个服务器实例上运行队列相关。如果您真的在做一个消息密集型应用程序,那么您很可能需要一个分布式消息传递,带有专用的消息代理和多个处理实例。虽然许多服务器都支持这种场景(例如Wildfly ActiveMQ集群),但这确实是另一个讨论的主题
有关更多信息,请查看和您的服务器文档。快乐黑客