Novell exteNd Messaging PlatformのJMSは
JMS_jbmq_Compress
メッセージプロパティを定義します。このプロパティは、メッセージの送信/受信プロセスの一部として、メッセージの自動圧縮を可能にします。圧縮はコストの掛かる操作ですが、パフォーマンスを向上できる場合があります。たとえば、使用できるネットワーク接続が遅い場合、または繰り返しパターンを含む大きなメッセージを送信する場合、圧縮を使用するとパフォーマンスが向上することがあります。圧縮を使用することにより、持続メッセージのデータベースに保存されるデータを少なく抑えられるため、JMSサーバでパフォーマンスが向上することがあります。圧縮がアプリケーションで有効かどうかを判断するには、テストを行います。この例で示すプログラムを使用すると、圧縮および解凍されるメッセージの送受信を簡単に測定し、結果を出力できます。
この例ではまず、繰り返しパターンの大きなテキストメッセージを作成します。次に、このメッセージを50回送受信しています(最初は圧縮せずに、次は圧縮して送信)。結果は、実行のたびに出力されます。アプリケーションに有効な場合は、この例を変更して一時メッセージを使用することもできます。2つの異なるプロセスで送信者と受信者を作成すると、より現実的な結果を得ることができます。package compress; import javax.naming.InitialContext; import javax.jms.Queue; import javax.jms.Session; import javax.jms.Message; import javax.jms.TextMessage; import javax.jms.QueueSender; import javax.jms.DeliveryMode; import javax.jms.QueueSession; import javax.jms.QueueReceiver; import javax.jms.MessageListener; import javax.jms.QueueConnection; import javax.jms.QueueConnectionFactory; /** This class does a rough performance comparison of sending/receiving compressed and uncompressed large text messages. */ public class Perf { public static void main(String[] args) throws Exception { | // resolve the queue connection factory and queue from JNDI | InitialContext ctx = new InitialContext(); | QueueConnectionFactory connFactory = (QueueConnectionFactory) | ctx.lookup("queue/connectionFactory"); | Queue queue = (Queue) ctx.lookup("queue/queue0"); | | // create a queue connection | QueueConnection queueConn = connFactory.createQueueConnection(); | | // create the queue session with auto acknowledge | QueueSession session = | queueConn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); | | // create the sender and receiver | QueueSender sender = session.createSender(queue); | QueueReceiver receiver = session.createReceiver(queue); | | // start the queue connection | queueConn.start(); | | // create a very large text message | String s = "text with lots of repetivive patterns ... "; | for (int i = 0; i < 10; i++) s += s; | Message message = session.createTextMessage(s); | | // record time before starting test | long start = System.currentTimeMillis(); | | // loop to send messages | for (int i = 0; i < 50; i++) | sender.send(message); | | // loop to receive messages | for (int i = 0; i < 50; i++) { | | TextMessage textMessage = (TextMessage) receiver.receive(); | | if (textMessage.getText().length() != s.length()) | | throw new Exception("wrong message: " + textMessage); | } | | // record time after test finished | long stop = System.currentTimeMillis(); | | // print result | System.out.println("without compression: " + (stop-start) + " ms"); | | // enable compression | message.setBooleanProperty("JMS_jbmq_Compress", true); | | // record time before starting test | start = System.currentTimeMillis(); | | // loop to send messages | for (int i = 0; i < 50; i++) | sender.send(message); | | // loop to receive messages | for (int i = 0; i < 50; i++) { | | TextMessage textMessage = (TextMessage) receiver.receive(); | | if (textMessage.getText().length() != s.length()) | | throw new Exception("wrong message: " + textMessage); | } | | // record time after test finished | stop = System.currentTimeMillis(); | | // print result | System.out.println("with compression : " + (stop-start) + " ms"); | | queueConn.close(); } }
Copyright © 2000-2003, Novell, Inc.All rights reserved. |