0

我有一个关于 ActiveMQ 和生产者的问题。

我应该为每次发送消息创建一个生产者吗?还是一直使用同一个?为每次发送创建生产者是否会对性能产生影响?

在一段时间不活动后连接也会断开,但我不知道它是否与此有关,有什么建议吗?

4

1 回答 1

0

是的,创建生产者对性能的影响很小,特别是如果代理位于另一台机器上(客户端需要与代理交谈以创建生产者)。

在这个答案的其余部分,我假设您使用 Java/JMS 与 AMQ 交谈。

如果您有一个非常简单的程序,您当然可以“重用”您的生产者,使用“NULL”目的地创建它们,并在发送时设置目的地。

您可以做的是使用PooledConnectionFactory来简化连接、会话和生产者。我认为包装类会帮助你。

实际上,您可以像这样使用 PooledConnectionFactory(伪代码):

 cf = new PooledConnectionFactory(myOriginalConnectionFactory)
 sendMessage(cf)
 sendMessage(cf)
 sendMessage(cf)

 SendMessage(connectionFactory)
   conn = connectionFactory.CreateConnection
   sess = conn.CreateSession
   prod = sess.createProducer
   msg = sess.createMessage
   prod.send(msg)
   prod.close
   sess.close
   conn.close

这意味着您不必担心关闭/打开会话、连接等。这是JmsTemplateSpring Framework 广泛使用的工作方式(当然,使用池化/缓存资源效果更好)。

另请查看页面以获取性能提示和技巧。

于 2012-10-15T11:07:28.267 回答