java activemq连接池_java - 如何配置spring以正确关闭ActiveMQ会话或连接? - 堆栈内存溢出...

48642a557e77064aeda43176e236841a.png

一个Java生产者使用spring连接池来管理100个MQ连接。 每个MQ连接默认可以打开500个会话。

产生50000条消息后,将使用所有连接和会话。

从spring连接池中获得一个新的连接将非常慢(首先从该池中获得一个连接,然后创建一个新的会话)。

而且关闭连接将需要很长时间。

而且ActiveMQ服务器将使用大量内存。

我想知道:

如何删除或重用连接创建的会话?

何时关闭MQ连接?

我尝试了以下参数:idleTimeout + expiryTimeout + timeBetweenExpirationCheckMillis,但是:

当系统很忙很长时间。 整个系统将越来越慢。 ActiveMQ将使用越来越多的内存。

当系统很忙时,然后突然变得空闲,然后突然很忙。 timeBetweenExpirationCheckMillis不够快,无法关闭所有连接。 连接池将尝试关闭所有超时连接(idleTimeout或expiryTimeout),然后打开一个新连接。 整个系统将停留10-20分钟。

我试图禁用kahadb持久性,但不起作用。

Update1:​​ActiveMQ连接池配置

Update2:测试代码

package just.a.test;

import javax.jms.Destination;

import net.sf.json.JSONObject;

import org.springframework.jms.core.JmsTemplate;

@Component

public final class TestHandlerImpl{

@Autowired

private JmsTemplate jmsTemplate;

@Autowired

private Destination testQueue;

public void sendMessage(File binaryFile){

//read file, get one msg

JSONObject msg = processBinaryFile(binaryFile);

//send msg to queue

sendMessageToQueue(testQueue, msg.toString());

}

}

protected void sendMessageToQueue(Destination destination, final String msg) {

//this code will get one connection from pool

//create a new session

//and send the message

jmsTemplate.send(destination, new MessageCreator() {

public Message createMessage(Session session) throws JMSException {

return session.createTextMessage(msg);

}

});

}

}

UPDATE3:

现在,我必须修改activemq-all.jar和common-pool.jar以使整个系统稳定。 我认为这是不对的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值