jboss - 如何限制监听 Jboss JMS 队列的 MDB 实例数

标签 jboss jms ejb-3.0 message-driven-bean jboss-4.2.x

我的以下设置有问题:

Java 应用程序将电子邮件消息发送到 JMS 队列,然后监听队列的 MDB 使用 onMessage 方法获取电子邮件消息,它打开 Gmail SMTP 上的连接,将电子邮件发送到 SMTP 并关闭连接。对 JMS 队列中的所有消息执行此操作。

当队列中同时有多达 5 条消息时,它工作得很好。所有邮件都由 5 个不同的 MDB 实例同时接收,因此我有 5 个并发连接到 Gmail SMTP 服务器。但是当 JMS 队列中有更多邮件时,我收到来自 Gmail SMTP 服务器的连接错误。前 5 条消息正确发送,但其余消息没有正确发送,因此其他消息丢失,因为它们不再在队列中。

所以我的问题是,是否可以限制将监听 JMS 队列的 MDB 实例的数量?如果我最多有 5 个 MDB,那么即使队列中有 1000 条消息,清空队列也需要更长的时间,但至少我不会丢失任何消息。

任何其他解决此问题的建议将不胜感激。

这是 Jboss 版本:

[Server] Release ID: JBoss [Trinity] 4.2.3.GA (build: SVNTag=JBoss_4_2_3_GA date=200807181417)



MDB的配置如下:
@MessageDriven(activationConfig = {   
  @ActivationConfigProperty( propertyName = "destinationType", propertyValue = "javax.jms.Queue" ),   
  @ActivationConfigProperty( propertyName = "destination", propertyValue = "queue/emailQueue")  
})

你需要更多吗?

谢谢

编辑 2011-02-14
也许我想限制 MDB 实例的数量都是错误的。我看到了一个关于 JMS 线程数量的配置。如果我限制将发布到 MDB 的线程数,也许它会解决我的问题? JMS 会等到 MDB 可用后再再次发布 msg 吗?这样做有什么副作用吗?你虽然请。
谢谢
结束编辑

最佳答案

尝试额外的激活配置属性:

@ActivationConfigProperty( propertyName = "maxSession", propertyValue = "someNumber")

其中 someNumber 是您想要的最大实例数。

关于jboss - 如何限制监听 Jboss JMS 队列的 MDB 实例数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4973549/

相关文章:

jms - 如何在启动时以编程方式禁用 Spring @JmsListener

caching - 如何在 Ofbiz 中实现 "Distributed cache clearing"?

java - 使用 EJB 3.0 删除数据库行

java - 将 EJB3 注入(inject)基于注释的 JSF2 支持 bean 导致 javax.naming.NameNotFoundException :

java - 当 HTTP 响应发送到死亡的客户端时,服务器不会抛出异常

java - JBoss 绑定(bind) IP 地址

java - 如何停止和启动jms监听器

jboss - JAX-RS + JBoss 7.1.1 + RESTEasy : NullPointException using CDI

java - 我可以使用 Ear 部署数据源及其相应的驱动程序吗?

java - JPA 中更好的异常处理