Java 增加一次处理的出列消息数(ActiveMQ)

Java 增加一次处理的出列消息数(ActiveMQ),java,jboss,activemq,Java,Jboss,Activemq,我在JBoss AS7中运行了一个MDB,它使用ActiveMQ JCA资源适配器从远程ActiveMQ 5.6代理接收消息 生产商代码: public void sendMessage(IDeliveryMessage message) throws Exception { Connection conn = null; Session session = null; MessageProducer producer = null; try {

我在JBoss AS7中运行了一个MDB,它使用ActiveMQ JCA资源适配器从远程ActiveMQ 5.6代理接收消息

生产商代码:

public void sendMessage(IDeliveryMessage message) throws Exception {

    Connection conn = null;
    Session session = null;
    MessageProducer producer = null;

    try {
        // Setup the connection & session
        ConnectionFactory cf = NamedObjectLocator.getConnectionFactory();
        conn = cf.createConnection();
        Destination destination = NamedObjectLocator.getDestination();
        session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
        conn.start();
        // Send a text message
        producer = session.createProducer(destination);
        ObjectMessage om = session.createObjectMessage(message);

        String id = System.currentTimeMillis()+"";
        om.setJMSCorrelationID(id);
        System.out.println("Producer: " + id);

        producer.send(om);

    } catch (Exception e) {
        throw new Exception(e.getMessage(), e);
    } finally {
        if (producer != null) {
            producer.close();
        }
        if (session != null) {
            session.close();
        }
        if (conn != null) {
            conn.stop();
            conn.close();
        }
    }
}
import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.Message;
import javax.jms.MessageListener;

@MessageDriven(name = "OutBoundMDB", activationConfig = {
        @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
        @ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/OutboundIntegrationQueue")})
public class OutBoundMDB implements MessageListener {

    public static final long serialVersionUID = 8609676375853959140L;

    public void onMessage(Message message) {
        try {

            System.out.println("Consumer: " + message.getJMSCorrelationID());

            Thread.sleep(20000L);

        } catch (Exception e) {
            LogManager.logError(e);
        }

    }

}
消费者代码:

public void sendMessage(IDeliveryMessage message) throws Exception {

    Connection conn = null;
    Session session = null;
    MessageProducer producer = null;

    try {
        // Setup the connection & session
        ConnectionFactory cf = NamedObjectLocator.getConnectionFactory();
        conn = cf.createConnection();
        Destination destination = NamedObjectLocator.getDestination();
        session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
        conn.start();
        // Send a text message
        producer = session.createProducer(destination);
        ObjectMessage om = session.createObjectMessage(message);

        String id = System.currentTimeMillis()+"";
        om.setJMSCorrelationID(id);
        System.out.println("Producer: " + id);

        producer.send(om);

    } catch (Exception e) {
        throw new Exception(e.getMessage(), e);
    } finally {
        if (producer != null) {
            producer.close();
        }
        if (session != null) {
            session.close();
        }
        if (conn != null) {
            conn.stop();
            conn.close();
        }
    }
}
import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.Message;
import javax.jms.MessageListener;

@MessageDriven(name = "OutBoundMDB", activationConfig = {
        @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
        @ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/OutboundIntegrationQueue")})
public class OutBoundMDB implements MessageListener {

    public static final long serialVersionUID = 8609676375853959140L;

    public void onMessage(Message message) {
        try {

            System.out.println("Consumer: " + message.getJMSCorrelationID());

            Thread.sleep(20000L);

        } catch (Exception e) {
            LogManager.logError(e);
        }

    }

}
jbossstandalone.xml:

<subsystem xmlns="urn:jboss:domain:resource-adapters:1.0">
    <resource-adapters>
        <resource-adapter>
            <archive>
                activemq-rar.rar
            </archive>
            <transaction-support>XATransaction</transaction-support>
            <config-property name="ServerUrl">
                tcp://localhost:61616
            </config-property>
            <connection-definitions>
                <connection-definition class-name="org.apache.activemq.ra.ActiveMQManagedConnectionFactory" jndi-name="java:/JmsXA" enabled="true" use-java-context="true" pool-name="ActiveMQConnectionFactoryPool" use-ccm="true">
                    <xa-pool>
                        <min-pool-size>1</min-pool-size>
                        <max-pool-size>20</max-pool-size>
                    </xa-pool>
                </connection-definition>
            </connection-definitions>
            <admin-objects>
                <admin-object class-name="org.apache.activemq.command.ActiveMQQueue" jndi-name="java:/queue/OutboundIntegrationQueue" enabled="true" use-java-context="true" pool-name="ActiveMQQueue.OutboundIntegrationQueue">
                    <config-property name="PhysicalName">queue/OutboundIntegrationQueue</config-property>
                </admin-object>
            </admin-objects>
        </resource-adapter>
    </resource-adapters>
</subsystem>
我希望一次退出队列的邮件数量(目前约为10条)增加到50条或更多。请查看。您几乎肯定需要调整
maxSessions
maxMessagesPerSession
以满足您的性能目标


您可能还需要调整容器维护的池中MDB实例的数量(在本例中为JBoss EAP)。在服务器配置中搜索
mdb strict max pool
。默认情况下,它从服务器的CPU计数导出池大小,但您可以使用
max pool size
显式设置它。我相信推导过程使用了以下公式:
Runtime.getRuntime().availableProcessors()*4
(请参阅)。

您如何处理消息(例如MDB、standalone MessageConsumer、standalone MessageListener等)?你们有多少消费者?您是否已将ActiveMQ配置为在JBoss AS7中嵌入式运行,还是独立运行?您如何处理这些消息?MDB。。。你们有多少消费者?1.您是否已将ActiveMQ配置为在JBoss AS7中嵌入式运行,还是独立运行?未嵌入Jboss,它是独立运行的。如果您在Jboss AS7中运行一个MDB,它使用来自远程ActiveMQ 5.x代理的消息,那么我假设MDB使用的是ActiveMQ JCA资源适配器。如果正确,MDB的激活配置是什么?如果没有,请详细说明如何在JBoss AS7和ActiveMQ代理之间配置连接。另外,你不应该用你自己的评论来回答这些评论,而应该用额外的细节来编辑你的原始问题,这样问题就更全面、更容易回答。我已经重新表述了整个问题——希望这能更好地解释我的问题,并可能帮助我找到解决方案。谢谢