Abstract:
Systems and methods are provided that route a message only along routes in a messaging network that lead to a currently active consumer for the message. The messaging network adapts to changes in the message preferences of the message consumer, and the message consumer&#39;s availability throughout the messaging network. In various embodiments, changes to message routing criteria at a destination broker in the network are propagated to all other brokers in the network until the entire network is adapted, and the network routes messages based on the adaptations, which reflect the current connectivity and message accepting criteria of each message consumer.

Description:
FIELD 
       [0001]    The present invention relates to message routing generally, and more particularly relates to routing a message exclusively along paths in a network that lead to a consumer of the message. 
       BACKGROUND 
       [0002]    In conventional messaging systems, the communication routes between brokers are statically defined at system setup, often based on the connections of message consumers who exist at the time that the network is first configured. Such systems typically follow a publish and subscribe model of message distribution, forwarding all messages from message producers to all brokers in the network because a consumer for any particular message may potentially be connected to any broker in the network. Such conventional systems have no knowledge or tracking of whether or not a consumer for a particular message exists along any particular route through the network. 
         [0003]    As a consequence, conventional systems constantly forward messages to brokers that have no consumers connected to them, either directly or indirectly. This results in inefficient and unnecessary use of system resources, such as communication bandwidth between brokers, as well as processing and storage resources on each individual broker that unnecessarily handles a message for which there is no downstream consumer. This also results in increased and unnecessary security risks, as messages traverse communications links between brokers, and are stored at least briefly on brokers, in portions of the network that do not lead to message consumers. 
         [0004]    Accordingly, it is desirable to provide systems and methods that dynamically route messages only to brokers and portions of the messaging network that lead to currently connected consumer(s) of the messages. 
     
    
     
       DESCRIPTION OF DRAWINGS 
         [0005]    The accompanying drawings, which are incorporated in and constitute a part of this specification, illustrate several embodiments of the invention and together with the description, serve to explain the principles of the invention. 
           [0006]      FIG. 1  is a diagram showing a network of brokers illustrating prior art message processing; 
           [0007]      FIGS. 2   a - 2   c  are diagrams showing a network of message brokers illustrating an exemplary messaging system consistent with embodiments of the invention; 
           [0008]      FIGS. 3   a - 3   c  are diagrams showing a network of message brokers illustrating an exemplary messaging system consistent with embodiments of the invention; 
           [0009]      FIG. 4  is a flowchart showing an exemplary process for routing messages from one broker to another, consistent with embodiments of the invention; and 
           [0010]      FIG. 5  is a block diagram of an exemplary computing system that may be used to implement embodiments consistent with the invention. 
       
    
    
     DESCRIPTION OF EMBODIMENTS 
       [0011]    Reference will now be made in detail to embodiments of the invention, examples of which are illustrated in the accompanying drawings. Wherever convenient, the same reference numbers will be used throughout the drawings to refer to the same or like parts. 
         [0012]    Embodiments consistent with the present teachings relate to systems and methods for dynamic messaging routing that include a network of brokers that dynamically keep track of whether and where message consumers are connected to the network, including keeping track of when a connection status changes (e.g., when a consumer connects to, or disconnects from, the network, and the consumer&#39;s message acceptance criteria), and route each message only along network paths that lead to a consumer of that message. In various embodiments, consumers supply message routing criteria to the local broker to which they are connected (or conversely, disconnect from the network, which causes the removal of message routing criteria for the disconnected consumer). 
         [0013]    Brokers in the network coordinate with each other to apply the routing criteria of a destination broker to a source broker, so that any message that would match one of these routing criteria is routed to the destination broker. If routing criteria are added to or removed from the destination broker, these changes are propagated to all connected brokers throughout the network. When a destination broker removes a criteria that allows a specified type of message to pass, the connected brokers follow suit and no longer incur the overhead or security risks of transferring messages that match that criteria. 
         [0014]    According to various embodiments, systems, methods, and computer-readable media are provided for routing messages in a messaging network. The embodiments perform operations including maintaining routing information for each of a plurality of message consumers connected to the messaging network, receiving a message, comparing an attribute of the message to the routing information for each of the plurality message consumer connected to the messaging network, determining, based on the result of the comparison, (e.g., a match), whether there is a broker that is connected to a message consumer of the plurality of messages consumers that can receive the message, and routing the message to the broker that was determined only if the broker is connected to the message consumer that can receive the message. 
         [0015]    Further embodiments provide additional functionality, including functionality for determining, (based on the results of the comparison between the attribute of the message and the routing information), whether there is a message consumer of the plurality of message consumers that is directly connected to the computing system that can receive the message, and routing, by the computing system, the message to the message consumer that was determined only if the message consumer can receive the message. 
         [0016]    Still other embodiments are implemented such that the attribute of the message comprises metadata associated with the message. In other embodiments, the metadata associated with the message comprises a topic assigned to the message by a producer of the message. In various embodiments, the message includes content, and the attribute of the message comprises information in the content of the message, or the message includes content; and the routing information comprises information that must match corresponding information in the content of the message, wherein the information that must match is specified by the message consumer. In some embodiments, the operation of maintaining routing information for each message consumer comprises updating the routing information for a message consumer of the plurality of message consumers that changes a connection status with the messaging network. 
         [0017]    Referring now to the drawings,  FIG. 1  is a diagram showing a network of brokers  100  demonstrating prior art message processing. As shown, network  100  is formed of interconnected brokers, including broker  1   140 , which is connected to broker  2   120  and broker  5   150 . Broker  2   140  is connected to broker  3   110  and broker  4   130 . Broker  5   150  is connected to broker  6   160  and broker  7   170 . 
         [0018]    As shown, a producer  105  of messages is connected to broker  3   110 . In various networks, producer  105  may be a data processing system, such as a laptop or desktop computer, operated by a user, which sends messages. In other networks, producer  110  may be an application or software program running on a data processing system, which sends messages. There is also a consumer  135  connected to network  100  via broker  4   130 . Consumer  135  may be a data processing system, such as a laptop or desk top computer, operated by a user, which may receive messages from producer  105 . Alternatively, consumer  135  may be an application or software program running on a data processing system, which receives messages from producer  105 . 
         [0019]    Consumer  135  may use a message-matching criteria  137 , (such as a binding key in an advanced message queuing protocol (AMQP) implementation) to subscribe to messages published to messaging network  100 . The message-matching criteria  137  informs broker  4   130  which messages to provide to consumer  135 , such as messages that include a routing key (in an AMQP implementation) that matches message-matching criteria  137 . Thus, in conventional messaging systems such as system  100 , only the local broker that a message consumer is directly connected to (in this case, broker  4   130 ) knows the message acceptance criteria provided by the message consumer. The other brokers in the network are not provided with this information. 
         [0020]      FIG. 1  represents a typical publish and subscribe messaging system implemented on network  100 . In a publish and subscribe system, senders of messages (e.g., producer  105 ) do not specify that messages are to be sent directly to any specific receiver(s) (e.g consumer  135 ). Instead, published messages are distributed without knowledge by the producer  105  of what, if any, subscribers, such as consumer  135 , there may be. In many cases, a publisher may attach a label to each message that characterizes the message as belonging to a specific class or topic. Subscribers may express interest in one or more topic, for example by specifying the topic using message-matching criteria  137 , and subscribers only receive messages that are of interest, without knowledge of what, if any, publishers or producers there are. 
         [0021]    In the example shown in  FIG. 1 , producer  105  sends a message  180  into network  100  via broker  3   110 . Because brokers, like producers, do not know what, if any, consumers of message  180  are connected to network  100 , brokers simply distribute messages to all other brokers in the network, in case any of them may have an appropriate consumer connected to it. To implement the distribution, broker  3   110  sends message  180  to all the brokers (and any subscribed consumers) connected to it—in this case, to broker  2   120 . Broker  2   120 , in turn, then distributes message  180  to all brokers connected to it—in this case, broker  4   130  and broker  1   140 . Broker  1   140  sends message  180  to broker  5   150 , which in turn distributes copies of message  180  to broker  6   160  and broker  7   170 . 
         [0022]    As each broker receives message  180 , it checks whether or not there is a consumer connected to it that has subscribed to receive message  180 . If a broker has no consumer for message  180 , such as broker  6   160  or broker  7   170  in  FIG. 1 , then the broker discards message  180 . If, on the other hand, a broker does have a consumer that has subscribed to receive message  180 , then the broker provides message  180  to the consumer. In the example of  FIG. 1 , broker  4   130  is connected to consumer  135 , which has subscribed to receive a copy of message  180  by specifying criteria in message-matching criteria  137  that cause broker  4   130  to route message  180  to consumer  135 . 
         [0023]    As illustrated by the example of  FIG. 1 , a conventional messaging system does not restrict the distribution of messages. A message is distributed to every broker node in network  100  in order to make sure that the message gets to every broker node where a consumer may be attached. This system uses the destination broker nodes to delete unconsumed messages after the message gets to the node. 
         [0024]    There are, however, several drawbacks to this conventional system for distributing messages. First, this system wastes bandwidth unnecessarily. As shown in  FIG. 1 , distributing copies of message  180  from broker  2   120  among broker  1   140 , broker  5   150 , broker 6   160 , and broker  7   170  unnecessarily uses the bandwidth between these brokers, as well as the computing and storage resources of the brokers themselves, because there are no consumers for message  180  connected to that portion of network  100 . Another drawback is related to security. Creating and passing unneeded copies of message  180  to broker  1   140 , broker  5   150 , broker  6   160 , and broker  7   170  increases the risk that message  180  will be intercepted or otherwise compromised in transit between brokers or while temporarily stored on a broker before being forwarded to another broker or deleted. 
         [0025]      FIGS. 2   a - 2   c  are diagrams showing a network  200  of message brokers illustrating an exemplary messaging system consistent with embodiments of the invention, which does not suffer the aforementioned drawbacks. In the embodiment shown in  FIGS. 2   a - 2   c , the brokers of network  200  are configured to implement a publish/subscribe messaging system that dynamically routes a given message only along paths that lead to a consumer(s) of that message. U.S. patent application Ser. No. ______ entitled “Systems and Methods for Identifying Linked Message Brokers in a Dynamic Routing Network,” by Theodore Ross filed on ______, 2011 with attorney docket number 0040.0878, (which is hereby incorporated by reference in its entirety), describes in detail embodiments of brokers that are configured to route a given messages only along paths that lead to a consumer(s) of that message. 
         [0026]    As shown in  FIG. 2   a , and similar to  FIG. 1 , network  200  is formed of interconnected brokers, including broker  1   140 , which is connected to broker  2   120  and broker  5   150 . Broker  2   140  is connected to broker  3   110  and broker  4   130 . Broker  5   150  is connected to broker  6   160  and broker  7   170 . 
         [0027]    As shown, a producer  105  of messages is connected to broker  3   110 . In various networks, producer  105  may be a data processing system, such a laptop or desk top computer, operated by a user, which sends messages. In other networks, producer  110  may be an application or software program running on a data processing system, which sends messages. In the scenario depicted in  FIG. 2   a , producer  105  publishes a message  280  to broker  3   110  for distribution throughout network  200  when there are no consumers (i.e., subscribers) of message  280  currently connected to network  200 . As mentioned previously, in a publish and subscribe system, message senders (e.g., producer  105 ) do not specify who the receiver(s) of a message should be. Instead, a message sender publishes messages without any knowledge of who the subscribers are on the network and without knowledge of whether there any subscribers at all on the network. 
         [0028]    As shown in the scenario depicted in  FIG. 2   a , and unlike conventional network  100 , when producer  105  publishes message  280  to broker  3   110 , broker  3   110  does not transmit a copy of message  280  to any other brokers in network  200  because none of the other brokers in network  200  is connected to a consumer that subscribes to message  280 . In one embodiment according to this scenario, broker  3   110  discards message  280  undelivered to any consumer. 
         [0029]    Referring now to  FIG. 2   b , the same network  200  is shown. In the scenario shown in  FIG. 2   b , a message consumer  135  has connected to broker  4   130 . Consumer  135  may be a data processing system, such as a laptop or desktop computer, operated by a user, which may receive appropriate messages from producer  105 . Alternatively, consumer  135  may be an application or software program running on a data processing system, which may receive appropriate messages from producer  105 . Consumer  135  provides message-matching criteria  137  to broker  130 . Message-matching criteria  137  specifies attributes or characteristics of messages that consumer  135  will receive. In other words, message-matching criteria  137  defines the messages consumer  135  wants to receive and will consume (i.e., the messages that consumer  135  is subscribing to). 
         [0030]    In this scenario, when consumer  135  provides message-matching criteria  137  to broker  4   130 , broker  4   130  propagates message-matching criteria  137  to the broker it is connected to, broker  2   120 . Broker  2 , in turn, propagates message-matching criteria  137  to the brokers that it is connected to, namely broker  3   110  and broker  1   140 . Broker  1   140  then propagates message-matching criteria  137  to the broker that it is connected to, namely broker  5   150 . This process continues until all the brokers in network  200  receive message-matching criteria  137 . 
         [0031]    As message-matching criteria  137  propagates through network  200 , the brokers in network  200  configure themselves (e.g., by modifying their routing information) to forward messages that they receive and that correspond to message-matching criteria  137  toward consumer  135 . This is represented in  FIG. 2   b  by the arrows near each broker accompanied by the triangle representing message-matching criteria  137 . As noted above, the process of propagating message-matching criteria throughout the network and configuring the brokers to route messages only along network paths that lead to appropriate consumers is described in detail in the U.S. patent application entitled “Systems and Methods for Identifying Linked Message Brokers in a Dynamic Routing Network,” by Theodore Ross filed on ______, 2011 with attorney docket number 0040.0878, (which is incorporated herein by reference). 
         [0032]      FIG. 2   c  illustrates a scenario where a message  285  that matches message-matching criteria  137  enters network  200 . As shown, producer  105  publishes message  285  to broker  3   110 . Broker  3   110  determines whether message  285  matches message-matching criteria  137 , which it received as explained with respect to  FIG. 2   b . Upon determining that message  285  matches message-matching criteria  137 , broker  3   110  forwards message  285  to broker  2   120 . Broker  2   120 , in turn, determines whether message  285  matches message-matching criteria  137 . Upon determining that message  285  matches message-matching criteria  137 , broker  3   110  forwards message  285  to broker  4   130 . Note that broker  2   120  does not forward a copy of message  285  to broker  1   140  because broker  2   120  has not received any message-matching criteria from broker  1   140  indicating that there is a consumer or subscriber for message  285  connected to broker  1 &#39;s portion of network  200 . 
         [0033]    When broker  4   130  receives message  285 , it determines whether message  285  matches message-matching criteria  137  associated with consumer  135 . Upon determining that message  285  corresponds to message-matching criteria  137 , broker  4   130  provides message  285  to consumer  135 . As exemplified by the scenario of  FIG. 2   c , network  200  routes a message exclusively to broker nodes that lead to a currently connected consumer of the message at the time that the message is passing through the broker node. 
         [0034]    In some embodiments, messaging network  200  may be implemented as a direct matching system, wherein metadata associated with message  285 , and/or data in the contents of message  285 , must exactly match the message-matching criteria  137  in order to be routed to consumer  135 . Metadata may include information in, for example, a routing key(s) attached to a message or information in a header or in a property field that provides an “envelope” for the contents of a message. In various embodiments, message-matching criteria  137  may specify the value or information that must be matched in order to route a message, and specify where to find the relevant value or information—e.g., in a particular header, in a particular property field, in a specific portion of the message contents, etc. In other words, message-matching criteria  137  informs a broker where to look (e.g., routing key, message header, message contents, etc.) to find the information needed to route the message, as well as what to look for (e.g., what the value of field must be to match). 
         [0035]    In some embodiments, the publisher of a message (e.g., producer  105 ) can insert particular attributes into the metadata or contents of a given message (e.g., message  285 ) to ensure that only a specific intended recipient (or recipients) receives the message, and to ensure that the message is not distributed to portions of the messaging network that are not connected, either directly or indirectly, to the intended recipient. For example, producer  105  may insert a unique identification number into the metadata of message  285 , wherein the unique identification number is known only to consumer  135 , and wherein consumer  135  uses the unique identification number in message-matching criteria  137 . In this example, as shown in  FIG. 2   c , message  285  will be routed only from broker  3   110  to broker  2   120  to broker  4   130  to consumer  135  because only consumer  135  has configured message-matching criteria  137  with the unique identification number. Similarly, if a producer (not shown) connected to message broker  5   150  and published a message (not shown) having the same unique identification number from this example in its metadata, then that message would be routed from broker  5   150  to broker  1   140  to broker  2   120  to broker  4   130  to consumer  135 , without being routed to any other broker nodes in network  200 . 
         [0036]    One of ordinary skill will recognize that the topology, producer connections, consumer connections, and other details of messaging network  200  are exemplary and presented in the form shown for conciseness and ease of illustration. Other components, topologies, connections, etc. may be substituted for those shown without departing from the scope of the invention. In addition, one of ordinary skill will recognize that for implementations with two-way communications, consumer  135  may also be a producer/publisher of messages bound for producer  105 , and producer  105  may also be a consumer of messages published by consumer  135 . In addition, one of ordinary skill will recognize that messaging networks consistent with the principles of the invention may be implemented by adding functionality to or modifying known message-oriented middleware systems, such as advanced message queuing protocol (AMQP) systems, RestMS systems, Java Messaging Service (JMS), Microsoft Message Queue (MSMQ), and Size-Prefixed Blob (SPB) systems, and the like. 
         [0037]      FIGS. 3   a - 3   c  are diagrams showing a network  300  of message brokers illustrating an exemplary messaging system consistent with embodiments of the invention. In the embodiment shown in  FIGS. 3   a - 3   c , the brokers of network  300  are configured to implement a publish/subscribe messaging system that routes a given message only along paths that lead to a consumer(s) of that message. In the example shown, network  300  consists of message brokers as described with respect to the message brokers of network  200  of  FIGS. 2   a - 2   c.    
         [0038]    Referring now to  FIG. 3   a , network  300  includes a consumer  1   135  connected to broker  3   110  and a consumer  2   335  connected to broker  5   150 . Consumer  1   135  has used message-matching criteria  337  to subscribe to messages published to network  300 , and consumer  2   335  has used message-matching criteria  338  to subscribe to messages published to network  300 . In this example, message-matching criteria  337  includes subscription information that is used to identify a message, (for example, a binding key in an AMQP-based implementation), which is represented by the letter “A” in the triangle. Message-matching criteria  338  is similar. 
         [0039]    In some embodiments, messaging network  300  may implement a topic-based system, wherein a message producer publishes each messages with “topic” metadata, which may, for example, be a field or attribute in the message “envelope” (e.g., a message header) that identifies a topic or category, (such as “weather”) that describes the message. The publisher is responsible for defining the topics, and subscribers can subscribe to any topic provided by the publisher. Subscribers in a topic-based system will receive all messages published to the topic(s) to which they subscribe, and all subscribers to a topic will receive the same messages. For example, in an AMQP-based implementation, a message publisher (e.g., producer  105 ) may insert a topic word or words, such as “weather” into a standard header in an AMQP-based message that is called a routing key. Brokers in an AMQP network use the routing key header to match messages to queues, which provide messages to other brokers and subscribers (e.g. consumer  1   135 ). Each queue specifies a binding key (e.g., message-matching criteria  337 ) and if the binding key matches the value of the routing key header of a message, then the associated queue receives the message, which is then available to the broker or subscriber assigned to the queue. 
         [0040]    In an embodiment as shown in  FIG. 3   a , where network  300  is implemented as a topic-based messaging network, consumer  1   135  and consumer  2   335  have subscribed to topic “A” as represented by message-matching criteria  337  and message-matching criteria  338 . As previously explained with respect to  FIG. 2   b , when consumer  1   135  and consumer  2   335  subscribed to topic “A,” the corresponding message-matching criteria  337  and message-matching criteria  338  were propagated to each broker in network  300 , and each broker was configured to forward any messages matching topic “A” only along paths in network  300  that lead to consumer  1   135  and consumer  2   335 , and not along paths that do not lead to an appropriate consumer. 
         [0041]    In the scenario shown in  FIG. 3   a , producer  105  publishes to broker  4   130  a message  380  with the topic attribute “A.” Broker  4   130  forwards message  380  to broker  2   120 . Broker  2   120  routes copies of message  380  in two directions—one copy of message  380  is provided to broker  3   110  and another copy of message  380  is provided to broker  1   140 . Upon receiving message  380 , broker  3   110  checks the topic attribute, and finds that the topic is “A.” Broker  3   110  then checks whether any consumers connected to it have subscribed to topic “A.” Because message-matching criteria  337  for consumer  1   135  indicates topic “A” is of interest to consumer  1   135 , there is a match, and broker  3   110  provides message  380  to consumer  1   135 . 
         [0042]    The other copy of message  380  sent by broker  2   120  is received by broker  1   140 . Broker  1   140  routes message  380  to broker  5   150  based on its routing configuration, which was instigated when message-matching criteria  338  was provided to broker  1   140  by broker  5   150  at the time of subscription by consumer  2   335 . 
         [0043]    Upon receiving message  380 , broker  5   150  checks the topic attribute of message  380 , and finds that the topic is “A.” Broker  5   150  then checks whether any consumers connected to it have subscribed to topic “A.” Because message-matching criteria  338  for consumer  2   335  indicates topic “A” is of interest to consumer  2   335 , broker  5   150  provides message  380  to consumer  2   335 . 
         [0044]    Broker  5   150  also checks its routing information to determine whether to forward a copy of message  380  to broker  6   160  and/or broker  7   170 . Because there are no consumers that have subscribed to topic “A” connected to either of broker  6   160  or broker  7   170 , the routing information of broker  5   150  does not indicate that message  380  should be routed to either of broker  6   160  or broker  7   170 . 
         [0045]    Although  FIG. 3   a  has been described using the example of network  300  being implemented as a topic-based messaging system, one of ordinary skill will recognize that network  300  may be implemented as a content-based messaging system without departing from the principles of the invention. In various embodiments of a content-based messaging system, messages are only delivered to a subscriber if something in the content of those messages matches a criteria or constraint(s) defined by the subscriber. In a content-based messaging system the subscriber is responsible for classifying the messages that the subscriber wishes to receive. One of ordinary skill will further recognize that network  300  may also be implemented as some hybrid combination of a topic-based messaging system and a content-based messaging system, without departing from the principles of the invention. 
         [0046]    Turning now to the scenario illustrated in  FIG. 3   b , in the illustrated embodiment, network  300  is implemented as a hybrid topic-based and content-based messaging network. In this embodiment, publishers (e.g., message producer  105 ) post messages to a topic, while subscribers (e.g., consumer  1   135  and consumer  2   335 ) register content-based subscriptions to one or more topics. In the exemplary scenario shown, consumer  1   135  has subscribed to topic “A” as represented by message-matching criteria  337 . Consumer  2   335  has subscribed to topic “A” and further specified that he wishes to receive only messages containing content “B,” as represented by message-matching criteria  338 . As previously explained with respect to  FIG. 2   b , when consumer  1   135  and consumer  2   335  subscribe with message-matching criteria  337  and message-matching criteria  338 , respectively, then message-matching criteria  337  and message-matching criteria  338  are propagated to each broker in network  300 , and each broker is configured to forward any messages corresponding to the message-matching criteria only along paths in network  300  that lead to an appropriate consumer. In the exemplary embodiment shown in  FIG. 3   b , the brokers of messaging network  300  will forward messages having a topic that matches “A” along paths that lead to consumer  1   135 . Similarly, the brokers of messaging network  300  will forward messages having a topic that matches “A” and having content that matches “B” along paths that lead to consumer  2   335 . 
         [0047]    In the exemplary scenario illustrated in  FIG. 3   b , producer  105  publishes message  380 , which is classified with topic “A,” to network  300  via broker  4   130 . In this scenario, the content of message  380  does not contain information or an attribute (e.g., a specific word or number) that matches “B.” Upon receiving message  380 , broker  4   130  forwards message  380  to broker  2   120 , as its routing information tells it that broker  2   120  is connected, either directly or indirectly (in this case), to a consumer that has subscribed to topic “A.” Upon receiving message  380 , broker  2   120  examines the topic of message  380  and routes message  380  to broker  3   110 , as its routing information tells it that broker  3   110  is connected, either directly (in this case) or indirectly, to a consumer that has subscribed to topic “A.” Upon receiving message  380 , broker  3   110  examines the topic of message  380  and routes message  380  to consumer  1   135 , as its routing information tells it that consumer  1   135  has subscribed to topic “A,” as indicated in message-matching criteria  337 . 
         [0048]    When broker  2   120  receives message  380  from broker  4 ,  130 , broker  2   120  also examines the contents of message  380  to determine whether the content matches “B.” Because message  380  does not contain content that matches “B,” broker  2   120  does not forward message  380  to broker  1   140 , as its routing information indicates that only messages under topic “A” and having content “B” are to be sent to broker  1   140 . 
         [0049]    Although  FIG. 3   b  has been described using the example of network  300  being implemented as a hybrid messaging system that combines characteristics of a topic-based system and content-based messaging system, one of ordinary skill will recognize that network  300  may be implemented as a content-based messaging system without departing from the principles of the invention, wherein consumer  1   135  specifies a single content attribute “A” in message-matching criteria  337 , and consumer  2   335  specifies two content attributes “A” and “B” in message-matching criteria  338 . One of ordinary skill will further recognize that network  300  may also be implemented as a topic-based messaging system without departing from the principles of the invention, wherein consumer  1   135  specifies a single topic “A” in message-matching criteria  337 , and consumer  2   335  specifies two topics “A” and “B” in message-matching criteria  338 , and wherein message producer  105  may produce messages classified with two or more topics. 
         [0050]      FIG. 3   c  illustrates the same network configuration as  FIG. 3   b , but in the illustrated scenario, producer  105  publishes a message  385  under topic “A” and containing attribute “B” in the message content. As shown, broker  4   130  received message  385  from producer  105  and forwards message  385  to broker  2   120 , as the routing information of broker  4   130  tells it that broker  2   120  is connected, either directly or indirectly (in this case), to a consumer that has subscribed to topic “A” and to a consumer that has subscribed to topic “A” in conjunction with content “B.” 
         [0051]    Upon receiving message  385 , broker  2   120  examines the topic of message  385  and routes message  385  to broker  3   110 , as its routing information tells it that broker  3   110  is connected, either directly (in this case) or indirectly, to a consumer that has subscribed to topic “A.” Upon receiving message  385 , broker  3   110  examines the topic of message  385  and routes message  385  to consumer  1   135 , as its routing information tells it that consumer  1   135  has subscribed to topic “A,” as indicated in message-matching criteria  337 . 
         [0052]    When broker  2   120  receives message  385  from broker  4   130 , broker  2   120  also examines, (in addition to the topic), the contents of message  385  to determine whether the content matches “B.” In the scenario of  FIG. 3   c , message  385  contains content that matches “B,” and thus broker  2   120  forwards a copy of message  385  to broker  1   140 , according to its routing information, which indicates that there is consumer for messages published under topic “A” and having content “B” connected to broker  1   140 , either directly or indirectly (in this case). 
         [0053]    Upon receiving message  385 , broker  1   140  looks at the topic of message  385  and the contents of message  385  and determines whether the topic and content match any message routing criteria in its message routing information. In this scenario, the routing information of broker  1   140  indicates that broker  5   150  is connected, either directly or indirectly to a consumer that has subscribed to messages published under topic “A” and having content “B.” Accordingly, broker  1   140  sends message  385  to broker  5   150 . 
         [0054]    Upon receiving message  385 , broker  5   150  performs a similar process of examining the message topic and content, and determines that message  385  should be provided to consumer  2   335  because message-matching criteria  338  set up by consumer  2   335  indicates a subscription to messages under topic “A” and having content “B.” 
         [0055]    An example illustrating a simple use of this capability is the case where producer  105  publishes messages under the topic “weather,” where the content of each message describes the weather forecast in various geographic regions covered by message producer  105 , such as Boston, New York, Philadelphia, and Washington, D.C. In this example, consumer  2   335  may be located in Boston and connected locally to a server implementing broker  5   150 , which is also located in Boston. Because he is located in Boston, consumer  2   335  may be interested only in weather messages related to Boston and may not wish to receive weather messages related to New York, Philadelphia, or Washington, D.C. To realize these restrictions, consumer  2   335  may subscribe to messages with topic “weather” and further specify that he only wishes to receive messages published to the weather topic that also contain the word “Boston” in the message contents. 
         [0056]    For example, in an AMQP-based implementation, consumer  2   335  may connect to local broker  5   150  and create for itself a queue on broker  5   150  to receive messages. Consumer  2   335  supplies a key to bind their queue to an AMQP-based topic exchange implemented by broker  5   150 , where the binding key may specify a topic, such as topic=“weather*” and a metadata match, such as content=“Boston.” Note that without further specifying limiting conditions (i.e., the word “Boston” appearing in the message contents), all messages published under the weather topic would be forwarded to consumer  2   335 , including unwanted weather messages related to New York, Philadelphia, or Washington, D.C. 
         [0057]    Also note that in addition to providing message  385  to consumer  2   335 , broker  5   150  determines that it should not forward message  385  to either of broker  6   160  or broker  7   170 , because the routing information does not indicate that either of broker  6   160  or broker  7   170  has an appropriate consumer connected to it. Thus, no resources are wasted sending messages that will not be consumed to broker  6   160  and broker  7   170 . 
         [0058]    One of ordinary skill will recognize that the topology, producer connections, consumer connections, and other details of messaging network  300  are exemplary and presented in the form shown for conciseness and ease of illustration. Other components, topologies, connections, etc. may be substituted for those shown without departing from the scope of the invention. In addition, one of ordinary skill will recognize that two-way communications may be implemented between message producers and message consumers without departing from the scope of the invention. In addition, one of ordinary skill will recognize that the implementation examples mentioned in the context of an improved AMQP-based messaging network may just as readily be implemented in the context of improvements to other types of message-oriented middleware systems, such as, for example, RestMS systems, Java Messaging Service (JMS), Microsoft Message Queue (MSMQ), Size-Prefixed Blob (SPB) systems, and the like. 
         [0059]      FIG. 4  is a flowchart showing an exemplary process  400  for routing messages from one broker to another, consistent with embodiments of the invention. In various embodiments, process  400  may be implemented by a server computer, or other data processing system, functioning as a message broker, such as brokers  110 ,  120 ,  130   140 ,  150 ,  160 , and  170  of  FIGS. 2 and 3 . In the embodiment shown in  FIG. 4 , process  400  begins by dynamically maintaining routing information based on message-matching criteria for message consumers connected to a messaging network (stage  410 ). In various embodiments, dynamically maintaining the routing information may include storing 1) information representing the location and/or direction where each message consumer is connected to the network (e.g., the broker to which a consumer is connected), and 2) information representing messages the consumer would like to receive (e.g., the message-matching criteria, message subscription information, etc. provided by the consumer). Dynamically maintaining the routing information may also include updating the stored information whenever a message consumer changes its status (e.g., when a consumer connects or disconnects from the messaging network, when a consumer adds, deletes, or revises message-matching data, etc.). In various embodiments, the routing information for a broker indicates which directly connected brokers are themselves connected, either directly or indirectly via one or more hops, to a consumer that has registered or subscribed to receive messages having specific properties, characteristics, or attributes, such as specific topics and/or specific associated metadata information. Exemplary details related to stage  410  are described in the U.S. patent application entitled “Systems and Methods for Identifying Linked Message Brokers in a Dynamic Routing Network,” by Theodore Ross filed on ______, 2011 with attorney docket number 0040.0878, (which is incorporated herein by reference in its entirety), and in U.S. patent application Ser. No. ______ entitled “Systems and Methods for Providing Distributed Dynamic Routing Using a Logical Broker,” by Theodore Ross filed on ______, 2011 with attorney docket number 0040.0876, (which is hereby incorporated by reference in its entirety), which describes in detail embodiments of dynamically routed messaging systems and messaging networks that provide a single logical broker for a message consumer, regardless of where the consumer connects to the system or network. 
         [0060]    Process  400  continues by receiving a message (stage  420 ). The message may be received, for example, from a message producer (e.g., message producer  105 ) or from another broker. 
         [0061]    At stage  430 , a loop begins wherein the entity implementing process  400 , such as a message broker, seeks to route the message to a broker or brokers that are directly connected to it, but only if the directly connected broker is itself currently connected, either directly or indirectly, to a consumer for the message. To this end, at stage  440 , process  400  compares the attributes of the received message to the routing information for the directly connected broker that is currently being considered in the loop. 
         [0062]    If the attributes of the message do not match the routing information for the directly connected broker that is currently being considered in the loop (stage  450 , No), then process  400  proceeds to stage  470  and determines whether all the directly connected brokers have been processed, and if not (stage  470 , No), then the loop continues by considering another directly connected broker. 
         [0063]    If, on the other hand, the attributes of the received message do match the routing information for the directly connected broker that is currently being considered in the loop (stage  450 , Yes), then process  400  forwards the message to that directly connected broker (stage  460 ). 
         [0064]    In some embodiments, the attributes of the received message may be implemented in the form of metadata that accompanies a message, so that the metadata is used by each broker to decide where to route the message. For example, in an AMQP-based implementation, the metadata may be in the form of a routing key or keys attached to the content of a message, which is compared to routing information in the form of binding keys to determine a match that causes the message to be moved to particular output queues. In other implementations, the metadata may be in the form of information, data, or values in a header, or a field of a header, that is attached to the content of message. In yet other embodiments, the attributes of the received message may be implemented in the form of metadata that is in the content or body of the message. For example, a specific word or words may be placed in the contents of a message, and the broker may parse or analyze the message content to determine whether a word matching the routing information is present. For another example, an XML specification or XML document in the message content may contain information that is used by brokers to route the message according to routing information that is dynamically maintained by each broker. 
         [0065]    Next, as noted above, stage  470  determines whether all the directly connected brokers have been processed. If not, process  400  continues by looping back to stage  430 . And if so, process  400  ends. 
         [0066]    One of ordinary skill will recognize that stages may be added to, deleted from, or modified within process  400  without departing from the principles of the invention. For example, additional processing stages may be added to compare attributes of the message to the routing information, (which is based on the message-matching criteria), for a consumer(s) that is directly connected to the broker, and if there is a match, then to provide the message to the matching consumer(s). 
         [0067]      FIG. 5  is a block diagram of an exemplary computing system or data processing system  500  that may be used to implement embodiments consistent with the invention, such as for example, embodiments of messaging brokers, consumers and/or producers. The exact components and arrangement, however, are not critical to the invention. Computing system  500  includes a number of components, such as a central processing unit (CPU)  505 , a memory  510 , an input/output (I/O) device(s)  525 , and a nonvolatile storage device  520 . System  500  can be implemented in various ways. For example, an implementation as an integrated platform (such as a workstation, personal computer, laptop, etc.) may comprise CPU  505 , memory  510 , nonvolatile storage  520 , and I/O devices  525 . In such a configuration, components  505 ,  510 ,  520 , and  525  may connect and communicate through a local data bus and may access a database  580  (implemented, for example, as a separate database system) via an external I/O connection. I/O component(s)  525  may connect to external devices through a direct communication link (e.g., a hardwired or local wifi connection), through a network, such as a local area network (LAN) or a wide area network (WAN) and/or through other suitable connections. System  500  may be standalone or it may be a subsystem of a larger system. 
         [0068]    CPU  505  may be one or more known processors or processing devices, such as a microprocessor from the Core™  2  family manufactured by Intel™ Corporation (San Jose, Calif.) or the Athlon™ family manufactured by AMD™ Corporation (Sunnyvale, Calif.). Memory  510  may be one or more fast storage devices configured to store instructions and information used by CPU  505  to perform certain functions and processes related to embodiments of the present invention. Storage  520  may be a volatile or non-volatile, magnetic, semiconductor, tape, optical, or other type of storage device or computer-readable medium, including devices meant for long-term storage. 
         [0069]    In the illustrated embodiment, memory  510  contains one or more programs or subprograms  515  loaded from storage  520  that, when executed by CPU  505 , perform various procedures, processes, or methods consistent with the present invention. Alternatively, CPU  505  may execute one or more programs located remotely from system  500 . For example, system  500  may access one or more remote programs via a network  535  that, when executed, perform functions and processes related to or implementing embodiments of the present invention. 
         [0070]    In one embodiment, memory  510  may include a computer program  515  that implements process  400 . Memory  510  may also include other programs or applications that implement other methods and processes that provide ancillary functionality for a broker, consumer, or producer. 
         [0071]    Methods and systems consistent with the invention are not limited to programs or computers configured to perform dedicated tasks. For example, memory  510  may be configured with a program  515  that performs several functions when executed by CPU  505 . For example, memory  510  may include a single program  515  that implements both process  400  and the functionality of a message producer or the functionality of a network manager. 
         [0072]    Memory  510  may be also be configured with other programs (not shown) unrelated to the invention and/or an operating system (not shown) that performs several functions well known in the art when executed by CPU  505 . By way of example, the operating system may be Microsoft Windows™, UniX™, Linux™, an Apple Computers™ operating system, Personal Digital Assistant operating system such as Microsoft CE™, or other operating system. The choice of operating system, and even to the use of an operating system, is not critical to the invention. 
         [0073]    I/O device(s)  525  may comprise one or more input/output devices that allow data to be received and/or transmitted by system  500 . For example, I/O device  525  may include one or more input devices, such as a keyboard, touch screen, mouse, and the like, that enable data to be input from a user, such as a system operator. Further, I/O device  525  may include one or more output devices, such as a display screen, CRT monitor, LCD monitor, plasma display, printer, speaker devices, and the like, that enable data to be output or presented to a user. I/O device  525  may also include one or more digital and/or analog communication input/output devices that allow computing system  500  to communicate, preferably digitally, with other machines, computing systems and devices, such as network communication ports, etc. The configuration and number of input and/or output devices incorporated in I/O device  525  are not critical to the invention. 
         [0074]    In the embodiment shown, system  500  is connected to a network  535  (e.g., the Internet or a private network), which may in turn be connected to various systems and computing machines (not shown), such as computers that are brokers, consumers, or producers. In general, system  500  may input data (including messages) from external machines and devices and output data (including messages) to external machines and devices via network  535 . 
         [0075]    In the exemplary embodiment shown in  FIG. 5 , database  530  is a standalone database external to system  500 . In other embodiments, database  530  may be hosted by system  500 . In various embodiments, database  530  may manage and store data used to implement systems and methods consistent with the invention. For example, database  530  may manage and store data structures that contain subscription information, message-matching criteria, routing information, link information, network connection information, and the like. 
         [0076]    Database  530  may comprise one or more databases that store information and are accessed and/or managed through system  500 . By way of example, database  530  may be an Oracle™ database, a Sybase™ database, or other relational database. Systems and methods consistent with the invention, however, are not limited to separate data structures or databases, or even to the use of a database or data structure. 
         [0077]    The foregoing description is illustrative, and variations in configuration, implementation, and embodiment of the invention will be apparent to those skilled in the art from consideration of the specification and practice of the invention disclosed herein. It is intended that the specification and examples be considered as exemplary only, with a true scope of the invention being indicated by the following claims.