diff options
Diffstat (limited to 'content/xdocs/Message API Design.html')
-rwxr-xr-x | content/xdocs/Message API Design.html | 182 |
1 files changed, 0 insertions, 182 deletions
diff --git a/content/xdocs/Message API Design.html b/content/xdocs/Message API Design.html deleted file mode 100755 index 5eaa5c6a13..0000000000 --- a/content/xdocs/Message API Design.html +++ /dev/null @@ -1,182 +0,0 @@ -<html> - <head> - <title>Apache Qpid : Message API Design</title> - <link rel="stylesheet" href="styles/site.css" type="text/css" /> - <META http-equiv="Content-Type" content="text/html; charset=UTF-8"> - </head> - - <body> - <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff"> - <tr> - <td valign="top" class="pagebody"> - <div class="pageheader"> - <span class="pagetitle"> - Apache Qpid : Message API Design - </span> - </div> - <div class="pagesubheading"> - This page last changed on Aug 15, 2007 by <font color="#0050B2">rajith</font>. - </div> - - <h1><a name="MessageAPIDesign-MessageAPIDesign"></a>Message API Design</h1> - -<p>This document describes the new message API for the restructured client.</p> - -<ul> - <li>Sending Messages</li> - <li>Receiving Messages</li> - <li>Message abstraction</li> - <li><a href="http://people.apache.org/~rajith/qpid_docs/client_api/" title="Visit page outside Confluence">Java Doc</a></li> -</ul> - - -<h2><a name="MessageAPIDesign-SendingMessages"></a>Sending Messages</h2> -<p>The Session class provides the following methods to send messages.</p> - -<div class="code" style="border-style: solid; "><div class="codeContent"> -<pre class="code-java"><span class="code-keyword">public</span> <span class="code-keyword">interface</span> Session{
-.........
-
-<span class="code-comment">//Option1 - <span class="code-keyword">for</span> small messages
-</span><span class="code-keyword">public</span> void messageTransfer(<span class="code-object">String</span> destination, Message msg, <span class="code-object">short</span> confirmMode, <span class="code-object">short</span> acquireMode)<span class="code-keyword">throws</span> IOException;
-
-<span class="code-comment">//Option2 - <span class="code-keyword">for</span> large messages
-</span><span class="code-keyword">public</span> void messageStream(<span class="code-object">String</span> destination, Message msg, <span class="code-object">short</span> confirmMode, <span class="code-object">short</span> acquireMode)<span class="code-keyword">throws</span> IOException;
-
-<span class="code-comment">//Option3 - can use it with any message size, recomended <span class="code-keyword">for</span> large messages
-</span><span class="code-keyword">public</span> void messageTransfer(<span class="code-object">String</span> destination, <span class="code-object">short</span> confirmMode, <span class="code-object">short</span> acquireMode);
-<span class="code-keyword">public</span> void headers(Struct... headers);
-<span class="code-keyword">public</span> void data(<span class="code-object">byte</span>[] data);
-<span class="code-keyword">public</span> void data(ByteBuffer buf);
-<span class="code-keyword">public</span> void data(<span class="code-object">String</span> str);
-<span class="code-keyword">public</span> void endData();
-
-.........
-
-}</pre> -</div></div> - -<h3><a name="MessageAPIDesign-SendingsmallMessages"></a>Sending small Messages </h3> -<p>Option1 provides a convinience method to send small messages.<br/> -You could use the ByteBufferMessage to create small in memory messages (or your own implementation).<br/> -Underneath it maps onto methods defined under option3</p> - -<h3><a name="MessageAPIDesign-SendinglargeMessages"></a>Sending large Messages</h3> -<p>You have two options for sending large messages, using either pull style or push style semantics</p> - -<h4><a name="MessageAPIDesign-UsingtheSessionclassmethods%28Option3%29"></a>Using the Session class methods (Option3)</h4> -<p>Option3 provides a more natural AMQP style set of methods<br/> -You can stream data using Option3 by pushing your data using one of the data methods defined in the session class.</p> - -<h4><a name="MessageAPIDesign-UsingOption2%28pullstyle%29"></a>Using Option2 (pull style)</h4> -<p>The messageStream method will pull data from the message and stream using the methods defined in option3.<br/> -You could use FileMessage or StreamingMessage or your own Message implementation that backs a large data stream.</p> - -<ul> - <li>FileMessage takes in a FileInputStream and create a nio FileChannel. It then uses a MappedByteBuffer to map a region of the file when the readData method is invoked. You could specify a chunksize in the constructor to control how much data is mapped each time.</li> -</ul> - - -<ul> - <li>StreamingMessage takes in a SocketChannel and reads a chunk of data at a time until the SocketChannel is closed. This could be useful when u need to transfer a data stream received from a legacy application or a hardware device. In such cases the StreamingMessage provides a convinient abstraction to stream the data without any intermediate copying.</li> -</ul> - - -<h2><a name="MessageAPIDesign-ReceivingMessages"></a>Receiving Messages</h2> -<p>To receive messages you can subscribe using the following method</p> -<div class="code" style="border-style: solid; "><div class="codeContent"> -<pre class="code-java"><span class="code-keyword">public</span> <span class="code-keyword">interface</span> Session{
-.........
-
-<span class="code-keyword">public</span> void messageSubscribe(<span class="code-object">String</span> queue, <span class="code-object">String</span> destination, <span class="code-object">short</span> confirmMode, <span class="code-object">short</span> acquireMode,
- MessagePartListener listener, Map<<span class="code-object">String</span>, ?> filter, Option... options);
------
-}</pre> -</div></div> - -<p>The API provides support for receiving messages in parts as and when they arrive using the MessagePartListener.<br/> -This enables the user to start consuming the message while it is being streamed.</p> -<div class="code" style="border-style: solid; "><div class="codeContent"> -<pre class="code-java"><span class="code-keyword">public</span> <span class="code-keyword">interface</span> MessagePartListener{
-
-<span class="code-keyword">public</span> void messageTransfer(<span class="code-object">long</span> transferId);
-
-<span class="code-keyword">public</span> void messageHeaders(Struct... headers);
-
-<span class="code-keyword">public</span> void data(ByteBuffer src);
-
-<span class="code-keyword">public</span> void messageReceived();
-
-}</pre> -</div></div> - -<p>The messageTransfer method signals the start of a transfer and passes the transferId.<br/> -The Transfer Id is used for the following operations defined in the Session API.</p> -<ul> - <li>to Acquire the message (if the message was transfered in no-acquire mode)</li> - <li>to release the message ( if already acquired)</li> - <li>to Reject or Acknowledge the message</li> -</ul> - - -<p>The data method will be called each time Frame arrives. The messageReceived method will signal the end of the message.</p> - -<h3><a name="MessageAPIDesign-Consumingsmallmessages"></a>Consuming small messages</h3> -<p>The API also provides a convinient way for consuming small messages through the MessageListener interface and the MessagePartListenerAdapter.<br/> -The MessagePartListenerAdapter will build the message and will notify the user through MessageListener when the message is complete.</p> -<div class="code" style="border-style: solid; "><div class="codeContent"> -<pre class="code-java"><span class="code-keyword">public</span> <span class="code-keyword">interface</span> MessageListener{
-
- <span class="code-keyword">public</span> void onMessage(Message message);
-
-}</pre> -</div></div> - -<p>you can use it the following way.</p> -<div class="code" style="border-style: solid; "><div class="codeContent"> -<pre class="code-java">.........
-
- MessageListener myMessageListener ....
-
- session.messageSubscribe(....,<span class="code-keyword">new</span> MessagePartListenerDapter(myMessageListener),...);
------</pre> -</div></div> - - -<h2><a name="MessageAPIDesign-Messageabstraction"></a>Message abstraction</h2> -<p>Message Interface provides an abstraction for creating messages from different data streams.<br/> -Please read the java doc for a complete description of each method.</p> - -<div class="code" style="border-style: solid; "><div class="codeContent"> -<pre class="code-java"><span class="code-keyword">public</span> <span class="code-keyword">interface</span> Message{
-
-<span class="code-keyword">public</span> MessageProperties getMessageProperties();
-<span class="code-keyword">public</span> DeliveryProperties getDeliveryProperties();
-
-<span class="code-keyword">public</span> void appendData(<span class="code-object">byte</span>[] src) <span class="code-keyword">throws</span> IOException;
-<span class="code-keyword">public</span> void appendData(ByteBuffer src) <span class="code-keyword">throws</span> IOException;
-
-<span class="code-keyword">public</span> void readData(<span class="code-object">byte</span>[] target) <span class="code-keyword">throws</span> IOException;
-<span class="code-keyword">public</span> ByteBuffer readData() <span class="code-keyword">throws</span> IOException;
-
-<span class="code-keyword">public</span> void clearData();
-<span class="code-keyword">public</span> <span class="code-object">long</span> getMessageTransferId();
-
-}</pre> -</div></div> - - - - </td> - </tr> - </table> - <table border="0" cellpadding="0" cellspacing="0" width="100%"> - <tr> - <td height="12" background="border/border_bottom.gif"><img src="border/spacer.gif" width="1" height="1" border="0"/></td> - </tr> - <tr> - <td align="center"><font color="grey">Document generated by Confluence on Apr 22, 2008 02:47</font></td> - </tr> - </table> - </body> -</html>
\ No newline at end of file |