Author: mgoulish
Date: Mon Apr 15 13:49:21 2013
New Revision: 1468073

URL: http://svn.apache.org/r1468073
Log:
PROTON-260: initial checkin of addressing_and_routing.md

Added:
    qpid/proton/trunk/docs/markdown/messenger/addressing_and_routing.md

Added: qpid/proton/trunk/docs/markdown/messenger/addressing_and_routing.md
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/docs/markdown/messenger/addressing_and_routing.md?rev=1468073&view=auto
==============================================================================
--- qpid/proton/trunk/docs/markdown/messenger/addressing_and_routing.md (added)
+++ qpid/proton/trunk/docs/markdown/messenger/addressing_and_routing.md Mon Apr 
15 13:49:21 2013
@@ -0,0 +1,208 @@
+
+Messenger Addressing and Routing
+=================================================
+
+
+Addressing
+-------------------------
+
+An address has the following form:
+
+ [ amqp[s]:// ] [user[:password]@] domain [/[name]]
+
+Where domain can be one of:
+
+ host | host:port | ip | ip:port | name
+
+The following are valid examples of addresses:
+
+    * example.org
+    * example.org:1234
+    * amqp://example.org
+    * amqps://example.org
+    * example.org/incoming
+    * amqps://example.org/outgoing
+    * amqps://fred:trust...@example.org
+    * 127.0.0.1:1234
+    * amqps://127.0.0.1:1234
+
+The "/name" part of the address, that optionally follows
+the domain, is not used by the Messenger library.
+For example, if a receiver subscribes to 
+    
+        amqp://~0.0.0.0:5678
+
+Then it will receive messages sent to
+
+        amqp://~0.0.0.0:5678
+as well as
+        amqp://~0.0.0.0:5678/foo
+
+
+Likewise, if the receiver subscribes to
+
+        amqp://~0.0.0.0:5678/foo
+
+it will receive messages addressed to
+
+        amqp://~0.0.0.0:5678/foo
+        amqp://~0.0.0.0:5678
+
+and
+
+        amqp://~0.0.0.0:5678/bar
+
+
+
+
+<br/>
+Routing
+------------------------------
+
+### Pattern Matching and Address Translation ###
+
+The Messenger library provides message routing capability
+with an address translation table.  Each entry in the table 
+consists of a _pattern_ and a _translation_.
+
+You store a new route entry in the table with the call:
+
+        pn_messenger_route ( messenger, pattern, translation );
+
+
+The address of each outgoing message is compared to the 
+table's patterns until the first matching pattern is found,
+or until all patterns have failed to match.
+
+If no pattern matches, then Messenger will send (or attempt
+to send) your message with the address as given.
+
+If a pattern does match your outgoing message's address, then
+Messenger will create a temporary address by transforming
+your message's address.  Your message will be sent to the 
+transformed address, but **(note!)** the address on your 
+outgoing message will not be changed.  The receiver will see 
+the original, not the transformed address.
+
+
+<br/>
+
+### Two Translation Mechanisms ###
+
+
+Messenger uses two mechanisms to translate addresses.
+The first is simple string substitution.
+
+
+        pattern:     COLOSSUS
+        translation: amqp://0.0.0.0:6666
+        input addr:  COLOSSUS
+        result:      amqp://0.0.0.0:6666
+
+
+The second mechanism is wildcard/variable substitution.
+A wildcard in the pattern matches all or part of your 
+input address.  The part of your input address that matched
+the wildcard is stored.  The matched value is then inserted
+into your translated address in place of numbered variables:
+$1, $2, and so on, up to a maximum of 64.
+
+There are two wildcards: * and % .
+The rules for matching are:
+
+        * matches anything
+        % matches anything but a /
+        other characters match themselves
+        the whole input addr must be matched
+
+
+Examples of wildcard matching:
+
+        pattern:      /%/%/%
+        translation:  $1x$2x$3
+        input addr:   /foo/bar/baz
+        result:       fooxbarxbaz
+
+        pattern:      *
+        translation:  $1
+        inout addr:   /foo/bar/baz
+        result:       /foo/bar/baz
+
+        pattern:      /*
+        translation:  $1
+        input addr:   /foo/bar/baz
+        result:       foo/bar/baz
+
+        pattern:      /*baz
+        translation:  $1
+        input addr:   /foo/bar/baz
+        result:       foo/bar/
+
+        pattern:      /%baz
+        translation:  $1
+        input addr:   /foo/bar/baz
+        result:       FAIL
+
+        pattern:      /%/baz
+        translation:  $1
+        input addr:   /foo/bar/baz
+        result:       FAIL
+
+        pattern:      /%/%/baz
+        translation:  $1
+        input addr:   /foo/bar/baz
+        result:       foo
+
+        pattern:      /*/baz
+        translation:  $1
+        input addr:   /foo/bar/baz
+        result:       foo/bar
+
+
+Examples of route translation usage:
+
+        pattern:     foo
+        translation: amqp://foo.com
+        explanation: Any message sent to "foo" will be routed to 
"amqp://foo.com"
+
+
+        pattern:     bar/*
+        translation: amqp://bar.com/$1
+        explanation: Any message sent to bar/<path> will be routed to the 
corresponding path within the amqp://bar.com domain.
+
+
+        pattern:     amqp:*
+        translation: amqps:$1
+        explanation: Route all messages over TLS.
+
+
+        pattern:     amqp://foo.com/*
+        translation: amqp://user:passw...@foo.com/$1
+        explanation: Supply credentials for foo.com.
+
+
+        pattern:     amqp://*
+        translation: amqp://user:password@$1
+        explanation: Supply credentials for all domains.
+
+
+        pattern:     amqp://%/*
+        translation: amqp://user:password@proxy/$1/$2
+        explanation: Route all addresses through a single proxy while 
preserving the
+         original destination.
+
+
+        pattern:     *
+        translation: amqp://user:password@broker/$1
+        explanation: Route any address through a single broker.
+
+
+
+<br/>
+### First Match Wins ###
+
+If you create multiple routing rules, each new rule is appended
+to your Messenger's list.  At send-time, Messenger looks down the 
+list, and the first rule that matches your outgoing message's 
+address wins.  Thus, when creating your routing rules, you should
+create them in order of most specific first, most general last.



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org
For additional commands, e-mail: commits-h...@qpid.apache.org

Reply via email to