我在以下设置中遇到了问题:
一个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的配置如下:
一个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再次发布消息吗?这样做是否会有任何副作用?请发表您的想法。
谢谢
编辑结束