ActiveMQ Request/Reply 模式:以下哪种方法被认为具有良好的性能?

ActiveMQ Request/Reply Pattern : which approach to follow in below considered good performance?

以下是目前正在使用的两种方法,请帮助我了解哪种方法更好!它是一个同步过程。

方法一:(不关闭任何连接对象)

Created connectionfactory in below class and maintaining pool of that class

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 个请求也来了,它将只维护一个连接、生产者、会话。

方法二:

(Closing all connection,session,producer per request and not a singleton)

方法三:

(Keeping only connection alive and closing session and producer per each req and recreate the same which is closed per request)

哪种方法适合提高性能?在请求回复模式的最大级别中,我们可以重用哪个(连接 r 会话 r 生产者)? 瞥了一眼:(谁能帮忙举个例子如何使用它!)

PooledConnectionFactory

请帮忙看看应该跟随哪一个!

如果不对将在生产中使用的相同系统配置进行性能测试,就无法回答这个问题。确定最佳性能的变数太多了。例如,要仅确定代理配置,您需要验证以下内容:

  • CPU 数量?
  • RAM 大小?
  • 网卡接口数量?
  • 用于存储后端的磁盘装载数?
  • 使用的队列数?
  • 生产者数量?
  • 消费者人数?
  • 邮件的大小?
  • 消息量(msg/s)?

消息传递的最佳做法是而不是pre-tune。我接触的大多数客户实际上并没有很高的消息量。首先尝试简单的单连接、单会话和单生产者。如果它满足您的性能要求,那么请专注于获得 HA 和监控指标。与试图再调整 5-10% 的性能提升相比,获得这些权利会大大增加 return 您的时间投资,并导致更稳定的消息传递平台。

请记住:大多数消息传递系统将受到代理磁盘速度的限制,因此在客户端缓存对象仅在某些边缘情况下有益。