OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

amqp message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: addressing summary


Please see the attached summary of the current state of addressing.

--Rafael
As promised at the TC meeting, here is a summary of where the global
addressing spec stands currently. What is contained below are
summaries of the key definitions and examples. This should cover the
full scope of the addressing spec, however it is obviously not
complete in detail, use cases, examples, so forth.

Definitions:

 - Address syntax:

               address = address-atom
                      / address-atom ";" address

         address-atom = address-literal
                      / address-space

        address-space = global-address "/*"
                      / global-address "/%"
                      / "//*." reg-name             ; reg-name is from RFC3986
                      / "//%." reg-name             ; reg-name is from RFC3986

      address-literal = global-address
                      / container-address

       global-address = "/" domain [ "/" path ]

    container-address = reg-name                    ; reg-name is from RFC3986

               domain = unregistered-domain
                      / registered-domain

    registered-domain = "/" srv-literal

          srv-literal = [ "_" service "._" proto "." ] host [ ":" port ]
              service = [a-zA-Z_]+
                proto = [a-zA-Z_]+
                 port = *DIGIT
                 host = IP-literal / IPv4address / reg-name    ; IP-literal, IPv4address, and reg-name are from RFC3986

  unregistered-domain = name

                 path = name [ "/" path ]
                 name = [^/*%;]+

 - Newly defined connection properties/capabilities:

   where-i-am: <address-space>

     Identifies a container's subspace within the global address
     space. Peers can define their own subspace within this, but it is
     the responsibility of the peer to use a unique subspace. This
     permits the peer to reuse stable subspaces or to simply make up a
     new one each time.

     A given address in this space is leased when a link endpoint is
     established. The lease expires when all matching link endpoints
     are terminated.

     For the period that the lease is held, the intermediary will
     route any globally addressed messages matching the leased address
     to the endpoint(s) holding the lease. (Need to clarify routing
     semantics when multiple link endpoints match.)

   who-i-am: <address> (container internal addresses not allowed)

     Advertizes a global address for a given container. Intermediaries
     or peers with the router capability (defined below) MUST route
     any messages that match this address and not a more specific one
     to the advertizing container. This could happen via the anonymous
     relay or direct addressing.

     This implies the advertizing container MUST accept incoming links
     where the source side is an anonymous relay.

   router: capability (True/False)

     If present indicates that the peer is capable of routing messages
     based on the who-i-am of connected partners.

     Existing links SHOULD be used to make delivery. If no existing
     links match, then a new link MAY be created either to the exact
     address, to an address pattern (e.g. //who-i-am/*), or to the
     anonymous relay.

 - In addition to the connection properties, we are defining the
   behaviour of the anonymous relay.

   The anonymous relay routes messages onto outgoing links based on
   matching the message address to the outgoing link target. Links
   from the anonymous relay to a container-address are not permitted.

   Messages from all links into the anonymous relay are routed.
   Messages from links established to other addresses MAY be routed
   depending on the semantics associated with those addresses. In
   other words, many addresses may be considered aliases for the
   anonymous relay, but some addresses may resolve directly to other
   kinds of nodes like queues.

   Success/failure of links to the anonymous terminus establishes
   whether a container is capable of relaying or routing messages
   through the anonymous terminus.

Examples:

  - The general mechanism for request response is to A) determine a
    suitable reply address and B) set the reply-to in your request to
    that address. The following scenarios cover some of the different
    ways you can determine a suitable reply address without creating a
    temporary queue and indicate some of the semantic differences
    betweeen each case.

    1. If partners support router capability: advertise who-i-am and
       simply set reply-to to an address matching who-i-am. Partners
       will initiate link(s) as needed to deliver replies.

       Message properties define the quality of service.

    2. Establish link from partner's anonymous relay ---> my-address
       (my-address may or may not match who-i-am). If link succeeds
       simply set reply-to to an address matching my-address and
       partner will respond via the relay.

       The link establishes the quality of service for addresses that
       do not match who-i-am or where the partner isn't a router.

    3. Establish direct link from service-node ---> my-address
       (my-address may or may not match who-i-am). Set reply-to to an
       address matching my-address and partner will respond via the
       established link.

       The link establishes the quality of service for addresses that
       do not match who-i-am or where the partner isn't a router.

       If the service node doesn't support matching, it can refuse
       links to address spaces and/or address lists.

       Note that my-address may be a container-address.


[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]