Recently I've read the AMQP (Advanced Message Queuing Protocol specification http://www.amqp.org/). Obviously this is the different protocol level then BizTalk messaging system but…

The AMQP specification let me get some thoughts.

And take in mind this topic is not a critic of AMQP or BizTalk, not at all. And this is not a comparing them, maybe sometimes 😉

AMQP:


Questions:

 

  •  I don't understand why the router functionality (in terms of AMQP it is an "Exchange") is placed only in the inputs of the system. Routing in BizTalk is symmetrical; it placed in the inputs and the outputs, before and after the queue.
    The consumer of the message can setup the Exchange and this substitutes the output routing (?), not sure.
  •  AMQP does not include the "Transformation" of the messages. I think the "pipeline" paradigm in the BizTalk is quite productive and helpful. It can be implied in the Exchange but anyway AMQP does not have the transformation API. All implementations of transformation API will be out of standard.
  • In AMQP the "consumer-cardinality" is the feature of the Queue or it seems so. I mean the Queue can have one consumer or many. In BizTalk the queue (MessageBox + agents) doesn’t care about consumers, it is the feature of Subscription agent (which works like the Exchange in AMQP).


What I like in AMQP:


What I like in AMQP:

  •  The "Fanout" Exchange. It works as follow: if the message come to the system but does not have consumers, it is passed to this Fanout exchange. In BizTalk we don't have such functionality. In the same case we have to create the "Fanout" send port manually or we've got the suspended message. In the application with broad using of the direct routing this is the continual case.
  •  The File Content class. It works as a message type to perform bulk file transfer. It is the case when we do not transform the message only route it and all routing data are outside the message (in binding parameters, for example). In BizTalk we have to do a lot of work only to transfer the bulk file through the system. This is the continual case too.
  •  The "Topics" Subscription. It uses the wild-cards for routing, like "STOK.USD.*" against routing parameter values as "STOK.USD.NYSE".
    Can we use the wild-cards in the Filters in BizTalk? No. But I think there is a simple implementation of the Topic subscription and much more if we could use the custom filters in BizTalk. Why do not add the new feature to BizTalk the "Users predicate" as it implemented for Functoids with Script functoids, for example? Now we have to at first evaluate our predicate in expression shape, for example, then set it to the promoted property, then use this property for routing.
  •  The message priority in the Queue.
  •  The processing of the messages with zero size body.
  •  The Standard for Error handling. In BizTalk we have many places where we got the errors and there are no strict rules. For example different adapters have different error handling when we sometimes get exceptions, sometimes the suspended messages. It is a "gray area" in BizTalk.

Please, feel free to critique and comments.