简体   繁体   English

Activemq降低响应时间

[英]Activemq degrade response time

I`m using activemq 5.10 with spring 4.1.1. 我在春季4.1.1中使用activemq 5.10。 I find a degrade problem with the response time of messages. 我发现消息的响应时间降低了。 After 4 days, the response time starts to grow up from 15ms to 200ms and more. 4天后,响应时间开始从15ms增长到200ms甚至更多。 The app works fine with approximately 1000 messages per second and then all run slower. 该应用程序可以正常运行,每秒大约有1000条消息,然后运行速度都变慢。

Here is part of the xml beans: 这是xml bean的一部分:

<amq:systemUsage>
            <amq:memoryUsage>
                <amq:memoryUsage limit="512 mb">
                </amq:memoryUsage>
            </amq:memoryUsage>
            <amq:storeUsage>
                <amq:storeUsage limit="50 mb"></amq:storeUsage>
            </amq:storeUsage>
            <amq:tempUsage>
                <amq:tempUsage limit="50 mb"></amq:tempUsage>
            </amq:tempUsage>
    </amq:systemUsage>

    <amq:broker brokerName="myBroker" id="broker"
        persistent="false" deleteAllMessagesOnStartup="true" enableStatistics="false"
        useLoggingForShutdownErrors="true">

        <amq:transportConnectors>
            <amq:transportConnector
                uri="nio://${Ip}:${Port}?jms.useAsyncSend=true?jms.useCompression=true"
                disableAsyncDispatch="false" />
        </amq:transportConnectors>

        <amq:destinationPolicy>
            <amq:policyMap>
                <amq:policyEntries>
                    <amq:policyEntry queue=">" optimizedDispatch="true" />
                </amq:policyEntries>
            </amq:policyMap>    
        </amq:destinationPolicy>

    </amq:broker>

    <!-- A JMS connection factory for ActiveMQ -->
    <bean id="ConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"
        p:brokerURL="nio://${Ip}:${Port}" />


    <bean id="pooledJmsConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory"
        destroy-method="stop">
        <property name="connectionFactory" ref="ConnectionFactory" />
        <property name="maxConnections" value="10" />
    </bean> 
<bean id="Listener" class="xx.com.xxx.MessageListener" />
<jms:listener-container container-type="default"
            connection-factory="ConnectionFactory" acknowledge="auto">
            <jms:listener destination="${QueueName}"
                ref="sisBusMessageListener" method="onMessage" />
 </jms:listener-container>

And here is the Java code: 这是Java代码:

public class MessageListener extends GenericMessageListener {

    public void onMessage(Message request) {
        MyExecutor mythread = new MyExecutor(request, new DateTime());
        executor.execute(mythread );
    }
}

public class MyExecutor { 公共类MyExecutor {

public void init() {
    try {
        connectionFactory = ApplicationHelper.getBean("ConnectionFactory");
        connectionFactory.setAlwaysSessionAsync(false);
        connection = connectionFactory.createConnection();
        connection.start();

        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
    } catch (JMSException e) {
        logs...
    }
}  

public void returnMessage(Message request, Object responseFromExternalSystem) throws JMSException {

    MapMessage response = session.createMapMessage();
    response.setJMSCorrelationID(request.getJMSCorrelationID());

    //code that set info on map message is here

    replyProducer = session.createProducer(request.getJMSReplyTo());
    replyProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
    replyProducer.send(response);
    }   
}

解决方案是重新使用连接和会话,从而仅创建一个实例,并在某些情况下创建另一个实例(错误,取消连接...)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM