我遇到以下设置问题:
Java应用程序将电子邮件msg发送到JMS队列,然后侦听队列的MDB使用onMessage方法获取电子邮件msg,它在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(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答案 0 :(得分:15)
尝试其他激活配置属性:
@ActivationConfigProperty( propertyName = "maxSession", propertyValue = "someNumber")
其中someNumber是您想要的最大实例数。
答案 1 :(得分:0)
如果JBoss 4有一个限制无状态会话bean实例的选项,一个选项可能是将消息处理代码移动到这个bean,并将传入的JMS消息传递给它。 (IIRC bean中的任何失败都会导致JMS消息未被确认,因此它会自动重试。)