我有一个关于ActiveMQ和制作人的问题。
我应该为每次发送消息创建一个生产者吗?或者一直使用同一个?通过为每次发送创建生产者是否会对性能产生影响?
此外连接在一段时间不活动后会停止,但我不知道它是否与此相关,是否有任何建议?
答案 0 :(得分: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
这意味着您不必担心已关闭/打开的会话,连接等。这是Spring Framework中广泛使用的JmsTemplate
的工作方式(当然,使用池化/缓存的资源可以更好地工作) )。
另请参阅this页面了解性能提示和技巧。