以下是我正在使用的两种方法,请帮助我了解哪一种更好!它是一个同步过程。
方法1 :(不关闭任何连接对象)
在下面的类中创建了connectionfactory并维护该类的池
ConnectionPool.java(使用代理URL维护不同生产者的池)
private static Map<String, Producer> producers
public static ProducerPool getInstance() {
if(INSTANCE==null){
producers = Maps.newConcurrentMap();
INSTANCE= new ProducerPool();
}
return INSTANCE;
}
Producer.java(此处创建的所有连接对象)
private ActiveMQConnection connection;
private ActiveMQSession session;
private MessageProducer producer;
return consumer.receive(5000);
因此,如果100 req也来了,它将只维护一个连接,生产者,会话。
方法2:
(关闭所有连接,会话,每个请求的生产者而不是单身)
方法3:
(仅保持连接活动并按每个请求关闭会话和生成器,并重新创建每个请求关闭的相同内容)
哪种方法可以获得更高的性能?在请求回复模式最高级别哪一个(连接r会话r生产者)我们可以重用? 瞥了一眼:(任何人都可以帮忙举例说明如何使用它!)
PooledConnectionFactory
请帮助应该遵循哪一个!
答案 0 :(得分:0)
如果不对将在生产中使用的相同系统配置进行性能测试,则无法回答这个问题。确定最佳性能的因素太多。例如,要确定代理配置,您需要验证以下内容:
消息传递的最佳做法是不预先调整。我进入的大多数客户实际上并没有高消息量。首先尝试简单的单连接,单个会话和单个生成器。如果它符合您的性能要求,那么关注的是将HA和监控指标放在一边。实现这些目标可以获得更高的回报,并且可以获得更稳定的消息传递平台,而不是试图调整另外5-10%的性能提升。
请记住:大多数邮件系统都会受到代理磁盘速度的限制,因此在客户端缓存对象只会在某些边缘情况下受益。