如何限制侦听Jboss JMS队列的MDB实例的数量

如何限制侦听Jboss JMS队列的MDB实例的数量,jboss,jms,ejb-3.0,message-driven-bean,jboss-4.2.x,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条消息被正确发送,但其

我在以下设置中遇到问题:

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

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

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

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

以下是Jboss版本:

[服务器]发布ID:JBoss[Trinity]4.2.3.GA(构建:SVNTag=JBoss_4_2_3_GA日期=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可用后再发布消息吗?这样做有副作用吗?你的想法请。 谢谢

结束编辑

尝试其他活动配置属性:

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

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

如果JBoss4有一个选项来限制无状态会话bean的实例,一个选项是将消息处理代码移动到此bean,并将传入的JMS消息传递给它。(IIRC bean中的任何故障也会导致JMS消息未被确认,因此它会自动重试)。

哪个版本的JBoss?你的MDB配置是什么样子的?@skaffman:Jboss版本是:[Server]发布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”)}您还需要更多吗?谢谢将信息添加到问题中,作为评论发布时不可读。@skaffman:抱歉!我现在就这么做。另请参阅我认为它应该是maxSessions而不是maxSession。我已经尝试了两种方法,值为1,同时发送了多个。@LoJuego所有支持的激活配置属性都是lis本教程中的ted:.maxSession是正确的属性名称。我可以在WebLogic上应用类似的属性吗?我猜WebLogic提供了类似的属性,但我怀疑属性名称是否相同。maxSession是JCA规范属性的JBoss扩展。