Glassfish OpenMQ中发送到队列的最大消息数?
我目前正在使用Glassfish v2.1,我已经设置了一个队列,分别使用Sesion beans和MDB从中发送和接收消息。但是,我注意到我最多只能向队列发送1000条消息。是否有任何原因导致我无法向队列发送超过1000条消息?我确实为glassfish域设置了“开发者”配置文件。这可能是原因吗?或者是否需要修改某些资源配置设置 我已按如下方式设置sun-resources.xml配置属性:Glassfish OpenMQ中发送到队列的最大消息数?,glassfish,queue,jms,ejb,jboss-mdb,Glassfish,Queue,Jms,Ejb,Jboss Mdb,我目前正在使用Glassfish v2.1,我已经设置了一个队列,分别使用Sesion beans和MDB从中发送和接收消息。但是,我注意到我最多只能向队列发送1000条消息。是否有任何原因导致我无法向队列发送超过1000条消息?我确实为glassfish域设置了“开发者”配置文件。这可能是原因吗?或者是否需要修改某些资源配置设置 我已按如下方式设置sun-resources.xml配置属性: <?xml version="1.0" encoding="UTF-8"?> <!D
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE resources PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 Resource Definitions //EN" "http://www.sun.com/software/appserver/dtds/sun-resources_1_3.dtd">
<resources>
<admin-object-resource
enabled="true"
jndi-name="jms/UpdateQueue"
object-type="user"
res-adapter="jmsra"
res-type="javax.jms.Queue">
<description/>
<property name="Name" value="UpdatePhysicalQueue"/>
</admin-object-resource>
<connector-resource
enabled="true" jndi-name="jms/UpdateQueueFactory"
object-type="user"
pool-name="jms/UpdateQueueFactoryPool">
<description/>
</connector-resource>
<connector-connection-pool
associate-with-thread="false"
connection-creation-retry-attempts="0"
connection-creation-retry-interval-in-seconds="10"
connection-definition-name="javax.jms.QueueConnectionFactory"
connection-leak-reclaim="false"
connection-leak-timeout-in-seconds="0"
fail-all-connections="false"
idle-timeout-in-seconds="300"
is-connection-validation-required="false"
lazy-connection-association="false"
lazy-connection-enlistment="false"
match-connections="true"
max-connection-usage-count="0"
max-pool-size="32"
max-wait-time-in-millis="60000"
name="jms/UpdateFactoryPool"
pool-resize-quantity="2"
resource-adapter-name="jmsra"
steady-pool-size="8"
validate-atmost-once-period-in-seconds="0"/>
</resources>
那么,如果我需要一次发送超过5000条消息,我该怎么办
我试图做的是读取表中的所有记录,并根据我只有只读访问权限的旧表中该记录的相应值更新每个记录的特定字段。此表中有超过10k条记录。到目前为止,我正在按顺序遍历for循环中的每条记录,从遗留表中获取相应的记录,比较字段值,必要时更新记录,并在其他表中添加相应的新记录
但是,我希望通过异步处理所有记录来提高性能。为此,我考虑将每个记录信息作为单独的消息发送,因此需要大量的消息。要配置OpenMQ并设置artitrary broker属性,请查看以下内容 但事实上,我不建议增加
imq.transaction.producer.maxNumMsgs
属性,至少不超过以下内容中建议的值:
生产者在单个事务中可以处理的最大消息数。建议该值小于5000,以防止资源耗尽
如果您需要发送更多的消息,请考虑在几个事务中执行它。
我在JMS连接上编写了一个简单的包装器来提交消息是块。我看过你的密码了。真的是这样吗?关闭并重新打开JMS连接不会启动新事务。因此,您的代码不应用于容器管理的事务。我发布了一个相关问题,您最终可以回答:。这是关于如何使用容器管理的事务在多个事务中分离发送JMS消息的问题。我认为基本上没有XA事务,您可以在一个会话bean中执行多个事务(有点像bean管理的持久性。但是它不适用于XA事务。我认为如果我使用bean管理的持久性并提交会话bean的事务以及JMX事务,它可能会工作。 [17/Nov/2009:10:27:57 CST] ERROR sendMessage: Sending message failed. Connection ID: 427038234214377984:
com.sun.messaging.jmq.jmsserver.util.BrokerException: transaction failed: [B4303]: The maximum number of messages [1,000] that the producer can process in a single transaction (TID=427038234364096768) has been exceeded. Please either limit the # of messages per transaction or increase the imq.transaction.producer.maxNumMsgs property.