我有一个快速的生产者ESB(将CSV转换为XML)和一个缓慢的消费者ESB(执行XML的zip / base64 / SOAP包装)。 ESB通过JMS主题进行通信。此设计是遗留的,无法更改。当处理一个大的CSV文件时,JBoss AS(5.2)会因为生产者涌入消费者而停止运转,即使堆大小为4096M也是如此。请原谅我,我是JBoss / JMS的新手,发现这一切都让人感到困惑。
制作人发送配置
<action class="com.example.FooAction" name="ProcessFoo">
<property name="springJndiLocation" value="FooEsbSpring" />
<property name="exceptionMethod" value="exceptionHandler" />
<property name="okMethod" value="processSuccess" />
<property name="jndiName" value="topic/FooTopic" />
<property name="connection-factory" value="ConnectionFactory" />
<property name="unwrap" value="true" />
<property name="security-principal" value="guest" />
<property name="security-credential" value="guest" />
</action>
制片人发送代码:
Message msg = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
msg.getBody().add(foo); // foo is the business specific message
new JMSRouter(config).process(msg);
消费者接收配置:
<jms-jca-provider connection-factory="ConnectionFactory" name="FooMessaging">
<jms-bus busid="fooChannel">
<jms-message-filter dest-name="topic/FooTopic"
dest-type="TOPIC" transacted="false" />
</jms-bus>
<activation-config>
<property name="dLQMaxResent" value="1" />
</activation-config>
</jms-jca-provider>
主题配置
<server>
<mbean code="org.jboss.jms.server.destination.TopicService"
name="jboss.esb.quickstart.destination:service=Topic,name=FooTopic"
xmbean-dd="xmdesc/Queue-xmbean.xml">
<depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer
</depends>
<depends>jboss.messaging:service=PostOffice</depends>
</mbean>
</server>
到目前为止我尝试过的事情。
答案 0 :(得分:1)
查看本节6.3.17.2. org.jboss.mq.server.jmx.Topic并使用JMX使用'Depth'相关属性。
它可能有助于您构建您正在寻找的退避策略