{"id":1182,"date":"2022-03-07T10:09:35","date_gmt":"2022-03-07T10:09:35","guid":{"rendered":"https:\/\/marketaylor.synology.me\/?p=1182"},"modified":"2022-03-08T10:15:48","modified_gmt":"2022-03-08T10:15:48","slug":"mq-message-routing-in-json","status":"publish","type":"post","link":"https:\/\/marketaylor.synology.me\/?p=1182","title":{"rendered":"MQ Message Routing in JSON"},"content":{"rendered":"\n<p>MQ V6 introduced a tool to help with administration and problem diagnosis in an MQ network. The <strong><a href=\"https:\/\/www.ibm.com\/docs\/en\/ibm-mq\/9.2?topic=reference-dspmqrte-display-route-information\" target=\"_blank\" rel=\"noreferrer noopener\">dspmqrte<\/a><\/strong> program shows the route that a message might take, reporting on the transmission queues and channels. It is considered  MQ&#8217;s equivalent to the TCP\/IP traceroute. This post discusses a new variation, <strong>dspmqrtj<\/strong>, available on <a href=\"https:\/\/github.com\/ibm-messaging\/mq-metric-samples\/tree\/master\/dspmqrtj\" target=\"_blank\" rel=\"noreferrer noopener\">GitHub<\/a>, that shows MQ message routing in  JSON format.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h3 class=\"wp-block-heading\">History and Evolution<\/h3>\n\n\n\n<p>Soon after the release of MQ V6, I created a plugin for the MQ Explorer that did something similar but could be driven by clicking on an object in the panels. This MS0P SupportPac component had two features beyond the product-shipped <strong>dspmqrte<\/strong>: <\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>It showed a summary of the complete flow<\/li><li>It could send multiple messages to a clustered queue and show the distribution to the different receiving queue managers<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large is-style-default\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"444\" src=\"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2022\/03\/traceroute-1-1024x444.png\" alt=\"MQ Explorer with MS0P plugins\" class=\"wp-image-1184\" srcset=\"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2022\/03\/traceroute-1-1024x444.png 1024w, https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2022\/03\/traceroute-1-300x130.png 300w, https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2022\/03\/traceroute-1-768x333.png 768w, https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2022\/03\/traceroute-1-1200x521.png 1200w, https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2022\/03\/traceroute-1.png 1279w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><figcaption>Explorer + MS0P Traceroute plugin<\/figcaption><\/figure>\n\n\n\n<p>With a broad strategy of making as much MQ information available as possible in JSON format, I wanted to do something with the message tracing feature. And so I looked at taking that Java code and reworking it as a command-line tool that could print to the screen instead of doing things graphically. Changing the <strong>dspmqrte <\/strong>program was not going to be an opti0n, at least for now. Once I started on the changes, I quickly decided that I would switch to using Go as the programming language instead. One reason for that was the inbuilt support for creating JSON objects.<\/p>\n\n\n\n<p><strong>Language Aside<\/strong>: I started this project in Java and converted it to Go. For another project I worked on last year, I wrote the prototype in Go. But I then switched to Java for the final version. The reasons for the final language choice were different for both, but it&#8217;s good to have the flexibility.<\/p>\n\n\n\n<p><strong>Deprecation Aside<\/strong>: One thing that started to slightly irritate me while working on this was how the Go bindings deal with the different PCF data types (integer, string, arrays etc). Noone to blame but myself for the choice &#8211; I think I didn&#8217;t originally appreciate use of the <code>interface{}<\/code> syntax in the language when creating the bindings. If I ever do a version of the Go interface that requires a new major number (it&#8217;s currently v5) then I may change the PCF interface. I did put a comment to that effect in the <a href=\"https:\/\/github.com\/ibm-messaging\/mq-golang\/blob\/master\/DEPRECATIONS.md\" target=\"_blank\" rel=\"noreferrer noopener\">DEPRECATIONS<\/a> file, though there&#8217;s no current plans to do such a version, or anything I can forsee that will require it.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Examples<\/h3>\n\n\n\n<p>This first extract is a reminder of how the <strong>dspmqrte <\/strong>program looks:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">AMQ8653I: DSPMQRTE command started with options '-c -m FR1 -q LOOP.ALIAS -v outline'.\nAMQ8659I: DSPMQRTE command successfully put a message on queue 'FR2.XMIT', queue manager 'FR1'.\nAMQ8674I: DSPMQRTE command is now waiting for information to display.\n \nActivity:\n  ApplName: 'dspmqrte                    '\nOperation:\n   OperationType: Put\n   QMgrName: 'FR1                                          '\n   QName: 'LOOP.ALIAS                                      '\n   ResolvedQName: 'FR2.XMIT                                '\n   RemoteQName: 'LOOP.RETURN                                 '\n   RemoteQMgrName: 'FR2                                    '\n...<\/pre>\n\n\n\n<p>Running the same test with <strong>dspmqrtj<\/strong>, we get<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">{\n   \"summary\": {\n     \"parameters\": \"-m FR1 -q LOOP.ALIAS -channel SYSTEM.DEF.SVRCONN -connName localhost(4714) -maxWait 3s\",\n     \"success\": \"Message successfully reached a destination\",\n     \"totalTimeMilliSec\": 0,\n     \"channelCount\": 2,\n     \"finalQueueManager\": \"FR1\"\n   },\n   \"activities\": [\n     {\n       \"applName\": \"dspmqrtj\",\n       \"applType\": \"Unix\",\n       \"description\": \"Display Route Application (GO\/JSON Version)\",\n       \"operations\": [\n         {\n           \"operation\": \"Put\",\n           \"date\": \"2022-03-07\",\n           \"time\": \"09:07:42.68\",\n           \"epochMilliSec\": 1646644062680,\n           \"details\": {\n             \"localQueueManager\": \"FR1\",\n             \"objectName\": \"LOOP.ALIAS\",\n             \"objectType\": \"queue\",\n             \"remoteQueue\": \"LOOP.RETURN\",\n             \"remoteQueueManager\": \"FR2\",\n             \"resolvedQueue\": \"FR2.XMIT\"\n           }\n         }\n       ]\n     },\n...<\/pre>\n\n\n\n<p>The first element in this output is a summary of the flow. It shows whether or not the message did reach a destination and how long it took. It also shows how many channels were traversed. Timestamps in each operation show both a readable date\/time and a converted epoch format. Again, that can make it easier for tools to calculate elapsed time at each stage. <\/p>\n\n\n\n<p>There is then an array of activities (basically each MQ process that touches the message), each of which contains a list of operations (usually a PUT\/GET or a channel flow).<\/p>\n\n\n\n<p>Having the output in JSON makes it possible to extract and format individual fields in a consistent way. Running exactly the same test, but passing the output to <strong><a href=\"https:\/\/stedolan.github.io\/jq\/\" target=\"_blank\" rel=\"noreferrer noopener\">jq<\/a><\/strong>, I can see which operations were done with no complicated coding or pattern matching:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ dspmqrtj -m FR1 -q LOOP.ALIAS -channel SYSTEM.DEF.SVRCONN -connName 'localhost(4714)' -maxWait 3s |\\\n   jq -r '.activities[].operations[].operation'\n Put\n Get\n Send\n Receive\n Put\n Get\n Send\n Receive\n Discard<\/pre>\n\n\n\n<p>We always look for &#8220;Discard&#8221; as the final operation as it means that the tracer message has successfully reached a queue and that the return route is working. <\/p>\n\n\n\n<p>Using <strong>jq<\/strong>, along with standard Unix programs, we can also construct the equivalent of the Explorer pie chart for showing cluster distribution. This cluster was defined with 4 partial repositories, 3 of which host the <code>CLUS.WL.TEST<\/code> queue. The trace messages are put to the fourth queue manager, and should be evenly distributed across the 3 available instances. The <code>-msgCount<\/code> parameter on the command line says how many times to run the trace:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ dspmqrtj -m PR1 -q CLUS.WL.TEST -msgCount 10 -bind notfixed |\\\n jq -r '.summary.finalQueueManager' |\\\n sort | uniq -c\n     3 PR2\n     4 PR3\n     3 PR4<\/pre>\n\n\n\n<p>For JSON-consuming programs that prefer to have the text presented on a single line instead of pretty-printed, the <code>-oneLine<\/code> command option gives an alternative format.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Error handling<\/h4>\n\n\n\n<p>If there is a real error reported, then the JSON includes an error block:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\"summary\": {\n     \"parameters\": \"-m FR1 -q Q.NOT.DEFINED -channel SYSTEM.DEF.SVRCONN -connName localhost(4714) -maxWait 3s\",\n     \"totalTimeMilliSec\": 0\n   },\n   \"error\": {\n     \"description\": \"Cannot open queue Q.NOT.DEFINED\",\n     \"detailedError\": \"MQOPEN: MQCC = MQCC_FAILED [2] MQRC = MQRC_UNKNOWN_OBJECT_NAME [2085]\",\n     \"mqcc\": 2,\n     \"mqrc\": 2085\n   }<\/pre>\n\n\n\n<p>And to see situations where no error has occurred but something is blocking the flow &#8211; in this case a channel that has not been started &#8211; the summary has a <code>failure<\/code> element. The rest of the output gives an idea of how far the trace reached, and therefore where you should start looking to work out what might be wrong.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\"summary\": {\n     \"parameters\": \"-m FR1 -q DEAD.END -channel SYSTEM.DEF.SVRCONN -connName localhost(4714) -maxWait 3s\",\n     \"failure\": \"Message not reported at a final destination\",\n     \"totalTimeMilliSec\": 1646646527880\n   },\n...<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">The source code repository<\/h3>\n\n\n\n<p>I&#8217;ve put the code for this program in the same <a href=\"https:\/\/github.com\/ibm-messaging\/mq-metric-samples\" target=\"_blank\" rel=\"noreferrer noopener\">repository<\/a> as the metric collectors. Those include a JSON variation as well as versions for databases like Prometheus, and this has a similar aim of using a common output format. You can clone the full repository and go directly to the <code>dspmqrtj<\/code> subdirectory if you only want to look at this piece.<\/p>\n\n\n\n<p>This program builds on the Go MQI bindings layer, but all of the prerequisite source code is in the <code>vendor<\/code> directory so you don&#8217;t need to clone any other repositories. To build the program, a Go compiler and a C compiler should be all you need along with a copy of the MQ client and SDK package.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Demonstration script<\/h3>\n\n\n\n<p>The repository contains some test scripts to build a cluster, and then run these examples. So you should be able to replicate them for yourself. <\/p>\n\n\n\n<p>The <code>demo.sh<\/code> script also makes it look as if you are typing the commands (accurately), which can be an effective way to do demonstrations. It can be really horrible watching demonstrations when someone cannot drive the tests at a reasonable pace and spends more time entering commands than showing the real features.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Conclusion<\/h3>\n\n\n\n<p>I know that some users have tooling for regularly running <strong>dspmqrte <\/strong>as part of monitoring the health of their MQ estate. This version of the tool started as an experiment to see if JSON was a good idea for looking at message flows, perhaps making it simpler to integrate with other monitoring solutions. I think this works but I&#8217;d be interested in any feedback.<\/p>\n<p class=\"last-modified\" style=\"border:1px solid;padding: 10px;\">This post was last updated on March 8th, 2022 at 10:15 am<\/p>","protected":false},"excerpt":{"rendered":"<p>MQ V6 introduced a tool to help with administration and problem diagnosis in an MQ network. The dspmqrte program shows the route that a message might take, reporting on the transmission queues and channels. It is considered MQ&#8217;s equivalent to the TCP\/IP traceroute. This post discusses a new variation, dspmqrtj, available on GitHub, that shows &hellip; <a href=\"https:\/\/marketaylor.synology.me\/?p=1182\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;MQ Message Routing in JSON&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":830,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[5],"tags":[35,38,20],"class_list":["post-1182","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mq","tag-ibmmq","tag-json","tag-mqseries"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>MQ Message Routing in JSON - Mark Taylor&#039;s Blog<\/title>\n<meta name=\"description\" content=\"This post describes a tool that shows MQ flows in an easily-parsable format. The MQ message routing is given in JSON.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/marketaylor.synology.me\/?p=1182\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"MQ Message Routing in JSON - Mark Taylor&#039;s Blog\" \/>\n<meta property=\"og:description\" content=\"This post describes a tool that shows MQ flows in an easily-parsable format. The MQ message routing is given in JSON.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/marketaylor.synology.me\/?p=1182\" \/>\n<meta property=\"og:site_name\" content=\"Mark Taylor&#039;s Blog\" \/>\n<meta property=\"article:published_time\" content=\"2022-03-07T10:09:35+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-03-08T10:15:48+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2020\/12\/json-e1607682376243.png\" \/>\n\t<meta property=\"og:image:width\" content=\"128\" \/>\n\t<meta property=\"og:image:height\" content=\"51\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Mark\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@marketaylor\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mark\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1182#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1182\"},\"author\":{\"name\":\"Mark\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/#\\\/schema\\\/person\\\/2d6f4113ff54187023e20c20186bbb3c\"},\"headline\":\"MQ Message Routing in JSON\",\"datePublished\":\"2022-03-07T10:09:35+00:00\",\"dateModified\":\"2022-03-08T10:15:48+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1182\"},\"wordCount\":1043,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1182#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/marketaylor.synology.me\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/json-e1607682376243.png\",\"keywords\":[\"ibmmq\",\"json\",\"mqseries\"],\"articleSection\":[\"IBM MQ\"],\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1182#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1182\",\"url\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1182\",\"name\":\"MQ Message Routing in JSON - Mark Taylor&#039;s Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1182#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1182#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/marketaylor.synology.me\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/json-e1607682376243.png\",\"datePublished\":\"2022-03-07T10:09:35+00:00\",\"dateModified\":\"2022-03-08T10:15:48+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/#\\\/schema\\\/person\\\/2d6f4113ff54187023e20c20186bbb3c\"},\"description\":\"This post describes a tool that shows MQ flows in an easily-parsable format. The MQ message routing is given in JSON.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1182#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1182\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1182#primaryimage\",\"url\":\"https:\\\/\\\/marketaylor.synology.me\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/json-e1607682376243.png\",\"contentUrl\":\"https:\\\/\\\/marketaylor.synology.me\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/json-e1607682376243.png\",\"width\":128,\"height\":51,\"caption\":\"JSON\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1182#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/marketaylor.synology.me\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"MQ Message Routing in JSON\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/#website\",\"url\":\"https:\\\/\\\/marketaylor.synology.me\\\/\",\"name\":\"Mark Taylor&#039;s Blog\",\"description\":\"Messaging, Music and Moving Around\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/marketaylor.synology.me\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/#\\\/schema\\\/person\\\/2d6f4113ff54187023e20c20186bbb3c\",\"name\":\"Mark\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9a5ae091c43730194cba7cabb5d65c1dc3f48d05caaddec6ff2319a1ce66376f?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9a5ae091c43730194cba7cabb5d65c1dc3f48d05caaddec6ff2319a1ce66376f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9a5ae091c43730194cba7cabb5d65c1dc3f48d05caaddec6ff2319a1ce66376f?s=96&d=mm&r=g\",\"caption\":\"Mark\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/marketaylor\"],\"url\":\"https:\\\/\\\/marketaylor.synology.me\\\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"MQ Message Routing in JSON - Mark Taylor&#039;s Blog","description":"This post describes a tool that shows MQ flows in an easily-parsable format. The MQ message routing is given in JSON.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/marketaylor.synology.me\/?p=1182","og_locale":"en_GB","og_type":"article","og_title":"MQ Message Routing in JSON - Mark Taylor&#039;s Blog","og_description":"This post describes a tool that shows MQ flows in an easily-parsable format. The MQ message routing is given in JSON.","og_url":"https:\/\/marketaylor.synology.me\/?p=1182","og_site_name":"Mark Taylor&#039;s Blog","article_published_time":"2022-03-07T10:09:35+00:00","article_modified_time":"2022-03-08T10:15:48+00:00","og_image":[{"width":128,"height":51,"url":"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2020\/12\/json-e1607682376243.png","type":"image\/png"}],"author":"Mark","twitter_card":"summary_large_image","twitter_creator":"@marketaylor","twitter_misc":{"Written by":"Mark","Estimated reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/marketaylor.synology.me\/?p=1182#article","isPartOf":{"@id":"https:\/\/marketaylor.synology.me\/?p=1182"},"author":{"name":"Mark","@id":"https:\/\/marketaylor.synology.me\/#\/schema\/person\/2d6f4113ff54187023e20c20186bbb3c"},"headline":"MQ Message Routing in JSON","datePublished":"2022-03-07T10:09:35+00:00","dateModified":"2022-03-08T10:15:48+00:00","mainEntityOfPage":{"@id":"https:\/\/marketaylor.synology.me\/?p=1182"},"wordCount":1043,"commentCount":0,"image":{"@id":"https:\/\/marketaylor.synology.me\/?p=1182#primaryimage"},"thumbnailUrl":"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2020\/12\/json-e1607682376243.png","keywords":["ibmmq","json","mqseries"],"articleSection":["IBM MQ"],"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/marketaylor.synology.me\/?p=1182#respond"]}]},{"@type":"WebPage","@id":"https:\/\/marketaylor.synology.me\/?p=1182","url":"https:\/\/marketaylor.synology.me\/?p=1182","name":"MQ Message Routing in JSON - Mark Taylor&#039;s Blog","isPartOf":{"@id":"https:\/\/marketaylor.synology.me\/#website"},"primaryImageOfPage":{"@id":"https:\/\/marketaylor.synology.me\/?p=1182#primaryimage"},"image":{"@id":"https:\/\/marketaylor.synology.me\/?p=1182#primaryimage"},"thumbnailUrl":"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2020\/12\/json-e1607682376243.png","datePublished":"2022-03-07T10:09:35+00:00","dateModified":"2022-03-08T10:15:48+00:00","author":{"@id":"https:\/\/marketaylor.synology.me\/#\/schema\/person\/2d6f4113ff54187023e20c20186bbb3c"},"description":"This post describes a tool that shows MQ flows in an easily-parsable format. The MQ message routing is given in JSON.","breadcrumb":{"@id":"https:\/\/marketaylor.synology.me\/?p=1182#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/marketaylor.synology.me\/?p=1182"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/marketaylor.synology.me\/?p=1182#primaryimage","url":"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2020\/12\/json-e1607682376243.png","contentUrl":"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2020\/12\/json-e1607682376243.png","width":128,"height":51,"caption":"JSON"},{"@type":"BreadcrumbList","@id":"https:\/\/marketaylor.synology.me\/?p=1182#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/marketaylor.synology.me\/"},{"@type":"ListItem","position":2,"name":"MQ Message Routing in JSON"}]},{"@type":"WebSite","@id":"https:\/\/marketaylor.synology.me\/#website","url":"https:\/\/marketaylor.synology.me\/","name":"Mark Taylor&#039;s Blog","description":"Messaging, Music and Moving Around","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/marketaylor.synology.me\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Person","@id":"https:\/\/marketaylor.synology.me\/#\/schema\/person\/2d6f4113ff54187023e20c20186bbb3c","name":"Mark","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/secure.gravatar.com\/avatar\/9a5ae091c43730194cba7cabb5d65c1dc3f48d05caaddec6ff2319a1ce66376f?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/9a5ae091c43730194cba7cabb5d65c1dc3f48d05caaddec6ff2319a1ce66376f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9a5ae091c43730194cba7cabb5d65c1dc3f48d05caaddec6ff2319a1ce66376f?s=96&d=mm&r=g","caption":"Mark"},"sameAs":["https:\/\/x.com\/marketaylor"],"url":"https:\/\/marketaylor.synology.me\/?author=1"}]}},"jetpack_featured_media_url":"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2020\/12\/json-e1607682376243.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/posts\/1182","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1182"}],"version-history":[{"count":3,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/posts\/1182\/revisions"}],"predecessor-version":[{"id":1197,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/posts\/1182\/revisions\/1197"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/media\/830"}],"wp:attachment":[{"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1182"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1182"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1182"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}