{"id":912,"date":"2005-09-07T11:16:00","date_gmt":"2005-09-07T15:16:00","guid":{"rendered":"http:\/\/www.markbaker.ca\/wp\/2005\/09\/07\/soap-message-path-quiz\/"},"modified":"2005-09-07T11:16:00","modified_gmt":"2005-09-07T15:16:00","slug":"soap-message-path-quiz","status":"publish","type":"post","link":"http:\/\/www.markbaker.ca\/blog\/2005\/09\/soap-message-path-quiz\/","title":{"rendered":"SOAP message path quiz"},"content":{"rendered":"<p>A quiz for Web services architects on SOAP message paths &#8230;<\/p>\n\n<p>Say we had a purely SOAP based (i.e. not HTTP or other underlying\nprotocol issues to concern us) publish\/subscribe configuration, with\nthree nodes; node A publishes to a queue at node B, and node C subscribes\nto the queue at node B, receiving all documents published to B.\nNow assume a scenario where C is already subscribed to B, and A publishes\na document to B;<\/p>\n\n<img decoding=\"async\" src=\"http:\/\/www.markbaker.ca\/2005\/09\/PubSub\/\" \/>\n\n<p>My question is, <em>how many SOAP message paths did I just describe?<\/em><\/p>\n\n<p>Scroll down for the answer.<\/p>\n\n<br \/>\n<br \/>\n<br \/>\n<br \/>\n<br \/>\n<br \/>\n<br \/>\n<br \/>\n<br \/>\n<br \/>\n<br \/>\n<br \/>\n<br \/>\n<br \/>\n<br \/>\n<br \/>\n<br \/>\n<br \/>\n<br \/>\n<br \/>\n<br \/>\n<br \/>\n<br \/>\n<br \/>\n<br \/>\n<br \/>\n<br \/>\n<br \/>\n<br \/>\n<br \/>\n<br \/>\n\n<p>I think there are two possible answers that people will give (though\nonly one correct one, of course 8-).  One answer is that this is\n<em>one<\/em> message path; A as sender, C as ultimate destination, and\nB as a (non-terminating) intermediary.  The other possible answer is that\nthere are <em>two<\/em> message paths; the first path with A as sender and\nB as ultimate destination, and the second with B as sender and C as\nultimate destination (which also happens to make B a <em>terminating<\/em>\nintermediary).<\/p>\n\n<p>I think &#8220;two&#8221; is the correct answer, primarily because pub\/sub is\nabout identity decoupling; removing the need for A to know about C.\nTherefore C cannot possibly be the ultimate destination since A\ndoesn&#8217;t know it exists.  From A&#8217;s POV, it&#8217;s sending the SOAP message\nto B, period.  And from C&#8217;s POV, it is receiving a SOAP message from\nB, period.  The SOAP envelopes sent along each path might be bitwise\nidentical, but they are different SOAP <em>messages<\/em>.  FWIW, this\nis why the SOAP spec\n<a href=\"http:\/\/www.w3.org\/TR\/2003\/REC-soap12-part1-20030624\/#senderreceiverconcepts\">says<\/a>\n(as a result of a clarification request of mine, IIRC);<\/p>\n\n<blockquote cite=\"http:\/\/www.w3.org\/TR\/2003\/REC-soap12-part1-20030624\/#senderreceiverconcepts\">\nAn ultimate SOAP receiver cannot also be a SOAP intermediary for the same SOAP message\n<\/blockquote>\n\n<p>Also note that any attempt on A&#8217;s part to try to identify a recipient\npast B is known as\n<a href=\"http:\/\/computing-dictionary.thefreedictionary.com\/source+route\">source routing<\/a>,\nand is, as a wise friend reminded me yesterday, the root of all evil.<\/p>","protected":false},"excerpt":{"rendered":"A quiz for Web services architects on SOAP message paths &#8230; Say we had a purely SOAP based (i.e. not HTTP or other underlying protocol issues to concern us) publish\/subscribe configuration, with three nodes; node A publishes to a queue at node B, and node C subscribes to the queue at node B, receiving all [&hellip;]","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[26],"class_list":["post-912","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-soap"],"_links":{"self":[{"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/posts\/912","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/comments?post=912"}],"version-history":[{"count":0,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/posts\/912\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/media?parent=912"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/categories?post=912"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/tags?post=912"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}