ActiveMQとプロデューサーに関する質問があります。
メッセージを送信するたびにプロデューサーを作成する必要がありますか?または、常に同じものを使用しますか?送信ごとにプロデューサーを作成することで、パフォーマンスに影響はありますか?
また、一定期間操作がないと接続が切断されますが、これに関連しているかどうかはわかりませんが、アドバイスはありますか?
ActiveMQとプロデューサーに関する質問があります。
メッセージを送信するたびにプロデューサーを作成する必要がありますか?または、常に同じものを使用しますか?送信ごとにプロデューサーを作成することで、パフォーマンスに影響はありますか?
また、一定期間操作がないと接続が切断されますが、これに関連しているかどうかはわかりませんが、アドバイスはありますか?
はい、特にブローカーが別のマシンにある場合、プロデューサーの作成にはパフォーマンスへのわずかな影響があります(クライアントは、プロデューサーを作成するためにブローカーと通信する必要があります)。
この回答の残りの部分では、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
これは、閉じた/開いたセッション、接続などについて心配する必要がないことを意味します。これは、JmsTemplate
Spring Frameworkで広く使用されている方法です(もちろん、プールされた/キャッシュされたリソースではるかにうまく機能します)。
また、パフォーマンスのヒントとコツについては、このページをご覧ください。