{"id":41,"date":"2016-01-28T13:59:32","date_gmt":"2016-01-28T13:59:32","guid":{"rendered":"http:\/\/cogin.com\/blog\/?p=41"},"modified":"2016-01-29T11:25:21","modified_gmt":"2016-01-29T11:25:21","slug":"automatically-resend-expired-msmq-dead-letter-messages-back-to-original-queue-using-queuemonitor","status":"publish","type":"post","link":"https:\/\/www.cogin.com\/blog\/msmq\/automatically-resend-expired-msmq-dead-letter-messages-back-to-original-queue-using-queuemonitor\/","title":{"rendered":"Automatically resend expired MSMQ dead letter messages using QueueMonitor"},"content":{"rendered":"<p>There were few inquires recently on what to do with messages which were moved by MSMQ to dead letter queue because they reached &#8220;<em>Time to be received<\/em>&#8221; timeout.<\/p>\n<h3>When is\u00a0<em>Time to be received<\/em>\u00a0property useful?<\/h3>\n<p>Sometimes messages are of temporary value and are not important unless they are processed immediately. For instance if we use queue to send current status of some process, next message will anyway be come after few seconds. Even if we stop processing we don&#8217;t want to process all pending messages if we&#8217;re only interested in latest one. For these scenarios Time to be received makes sense, since MSMQ will automatically remove these messages from queue once timeout is reached. If messages are set to use Dead letter queue, they will be moved to one of two System Dead-letter queues &#8211; one for transactional messages and one for non-transactional.<\/p>\n<p>However sometimes reality gets in a way. Sender has some expectations and sets <em>Time to be received<\/em>\u00a0to few minutes, but circumstances change and we find out that these messages are still needed and important even if they were moved to dead letter queue.<\/p>\n<h3>How to automatically resend messages to their original queue using QueueMonitor<\/h3>\n<p>For this to work you&#8217;ll need <a href=\"https:\/\/www.cogin.com\/QueueMonitor\/download.php\" target=\"_blank\">QueueMonitor Professional<\/a>, since it offers more complex processing.<\/p>\n<p>&nbsp;<\/p>\n<h4>Step 1 &#8211; New task<\/h4>\n<p>Click on &#8220;New Task&#8230;&#8221; and pick &#8220;Process messages &#8211; scheduled&#8221; task.<\/p>\n<p><a href=\"https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2016\/01\/Select-a-task.png\" rel=\"attachment wp-att-42\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-42\" src=\"https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2016\/01\/Select-a-task.png\" alt=\"QueueMonitor - Select a task\" width=\"668\" height=\"585\" srcset=\"https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2016\/01\/Select-a-task.png 668w, https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2016\/01\/Select-a-task-300x263.png 300w\" sizes=\"auto, (max-width: 668px) 100vw, 668px\" \/><\/a><\/p>\n<p>Why scheduled processing? Because dead letter queues can contain messages which came there for various reasons &#8211; for instance purged messages, etc. We don&#8217;t want to return all of these messages back to their queues, we&#8217;re interested only in expired ones. There&#8217;s similar task &#8220;Process messages &#8211; constantly&#8221; but it constantly watches a queue and should be used when all arriving messages should be processed as soon as they arrive. If we don&#8217;t want to remove all messages after they&#8217;re processed, constant processing will be suboptimal because it will keep iterating through queue all the time which could be a problem for system resources.<\/p>\n<p>&nbsp;<\/p>\n<h4>Step 2 &#8211; Pick a queue<\/h4>\n<p>Choose one of System queues &#8211; &#8220;Dead letter messages&#8221; or &#8220;Transactional dead-letter messages&#8221;. In you want to monitor both DL queues, you should create two separate tasks because of limitations in current version of QueueMonitor we&#8217;ll discuss later.<\/p>\n<p><a href=\"https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2016\/01\/Select-a-queue.png\" rel=\"attachment wp-att-47\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-47\" src=\"https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2016\/01\/Select-a-queue.png\" alt=\"Select a queue\" width=\"668\" height=\"585\" srcset=\"https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2016\/01\/Select-a-queue.png 668w, https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2016\/01\/Select-a-queue-300x263.png 300w\" sizes=\"auto, (max-width: 668px) 100vw, 668px\" \/><\/a><\/p>\n<h4><\/h4>\n<h4>Step 3 &#8211; Schedule<\/h4>\n<p>Pick how often you want this task to occur:<\/p>\n<p><a href=\"https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2016\/01\/Schedule.png\" rel=\"attachment wp-att-46\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-46\" src=\"https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2016\/01\/Schedule.png\" alt=\"Schedule\" width=\"668\" height=\"585\" srcset=\"https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2016\/01\/Schedule.png 668w, https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2016\/01\/Schedule-300x263.png 300w\" sizes=\"auto, (max-width: 668px) 100vw, 668px\" \/><\/a><\/p>\n<h4><\/h4>\n<h4>Step 4 &#8211; Message filter<\/h4>\n<p>If we want to only resend messages which were expired, we should make appropriate filter:<\/p>\n<p><a href=\"https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2016\/01\/Message-filter-for-ReceiveTimeout.png\" rel=\"attachment wp-att-45\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-45\" src=\"https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2016\/01\/Message-filter-for-ReceiveTimeout.png\" alt=\"Message filter for ReceiveTimeout\" width=\"668\" height=\"585\" srcset=\"https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2016\/01\/Message-filter-for-ReceiveTimeout.png 668w, https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2016\/01\/Message-filter-for-ReceiveTimeout-300x263.png 300w\" sizes=\"auto, (max-width: 668px) 100vw, 668px\" \/><\/a><\/p>\n<p>Turn on <em>Advanced query<\/em> option, select <strong>Acknowledgment<\/strong> property and set it to equals <strong>ReceiveTimeout<\/strong><\/p>\n<p>You can make more complex query here, if you want to process only certain messages.<\/p>\n<p>&nbsp;<\/p>\n<h4>Step 5 &#8211; Actions<\/h4>\n<p><a href=\"https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2016\/01\/Change-Time-to-be-received.png\" rel=\"attachment wp-att-44\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-44\" src=\"https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2016\/01\/Change-Time-to-be-received.png\" alt=\"Change Time to be received\" width=\"668\" height=\"585\" srcset=\"https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2016\/01\/Change-Time-to-be-received.png 668w, https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2016\/01\/Change-Time-to-be-received-300x263.png 300w\" sizes=\"auto, (max-width: 668px) 100vw, 668px\" \/><\/a><\/p>\n<p>Add <strong>Change message properties<\/strong> action and configure it to change &#8220;Time to be received&#8221; property.<\/p>\n<p><a href=\"https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2016\/01\/Send-to-queue-action.png\" rel=\"attachment wp-att-43\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-43\" src=\"https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2016\/01\/Send-to-queue-action.png\" alt=\"Send to queue action\" width=\"668\" height=\"585\" srcset=\"https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2016\/01\/Send-to-queue-action.png 668w, https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2016\/01\/Send-to-queue-action-300x263.png 300w\" sizes=\"auto, (max-width: 668px) 100vw, 668px\" \/><\/a><\/p>\n<p>Add <strong>Send to queue<\/strong> action. For destination name type <strong>{msg_destination}<\/strong> (you can also insert macros by clicking on M button). This will make sure that message goes back to its original destination.<\/p>\n<p>And here&#8217;s a reason why you had to create separate tasks for transactional and non-transactional DLQs. Sending in MSMQ requires that you either wrap it in Transaction or not, depending on type of queue. For local queues QueueMonitor can determine whether queue is transactional, but if it&#8217;s remote queue or if macros are used (like in this case), it can&#8217;t and you have to set it manually. So if this task is for transactional DLQ check Transactional checkbox, otherwise leave it unchecked.<\/p>\n<h4><\/h4>\n<h4>Step 6 &#8211; Done<\/h4>\n<p>You can save new task now. In order to read system queues, QueueMonitor service will have to work under account with administrative privileges. If it&#8217;s not already set, go to Computer Management, find QueueMonitor service and change it&#8217;s Log On as setting.<\/p>\n<p>You can use &#8220;Run once now&#8221; option to test new task whether it works correctly. If everything is ok, you can enable this task and it will continue to work in background, happily resending all expired messages back to their original queues.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>There were few inquires recently on what to do with messages which were moved by MSMQ to dead letter queue because they reached &#8220;Time to be received&#8221; timeout. When is\u00a0Time to be received\u00a0property useful? Sometimes messages are of temporary value and are not important unless they are processed immediately. For instance if we use queue [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":47,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,4],"tags":[5],"class_list":["post-41","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-msmq","category-queuemonitor","tag-msmq"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v23.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Automatically resend expired MSMQ dead letter messages using QueueMonitor<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.cogin.com\/blog\/msmq\/automatically-resend-expired-msmq-dead-letter-messages-back-to-original-queue-using-queuemonitor\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Automatically resend expired MSMQ dead letter messages using QueueMonitor\" \/>\n<meta property=\"og:description\" content=\"There were few inquires recently on what to do with messages which were moved by MSMQ to dead letter queue because they reached &#8220;Time to be received&#8221; timeout. When is\u00a0Time to be received\u00a0property useful? Sometimes messages are of temporary value and are not important unless they are processed immediately. For instance if we use queue [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.cogin.com\/blog\/msmq\/automatically-resend-expired-msmq-dead-letter-messages-back-to-original-queue-using-queuemonitor\/\" \/>\n<meta property=\"og:site_name\" content=\"Cogin blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-01-28T13:59:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2016-01-29T11:25:21+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2016\/01\/Select-a-queue.png\" \/>\n\t<meta property=\"og:image:width\" content=\"668\" \/>\n\t<meta property=\"og:image:height\" content=\"585\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Dejan Grujic\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Dejan Grujic\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.cogin.com\/blog\/msmq\/automatically-resend-expired-msmq-dead-letter-messages-back-to-original-queue-using-queuemonitor\/\",\"url\":\"https:\/\/www.cogin.com\/blog\/msmq\/automatically-resend-expired-msmq-dead-letter-messages-back-to-original-queue-using-queuemonitor\/\",\"name\":\"Automatically resend expired MSMQ dead letter messages using QueueMonitor\",\"isPartOf\":{\"@id\":\"https:\/\/www.cogin.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.cogin.com\/blog\/msmq\/automatically-resend-expired-msmq-dead-letter-messages-back-to-original-queue-using-queuemonitor\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.cogin.com\/blog\/msmq\/automatically-resend-expired-msmq-dead-letter-messages-back-to-original-queue-using-queuemonitor\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2016\/01\/Select-a-queue.png\",\"datePublished\":\"2016-01-28T13:59:32+00:00\",\"dateModified\":\"2016-01-29T11:25:21+00:00\",\"author\":{\"@id\":\"https:\/\/www.cogin.com\/blog\/#\/schema\/person\/e0c4fd92043868daa052d5978d69ed22\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.cogin.com\/blog\/msmq\/automatically-resend-expired-msmq-dead-letter-messages-back-to-original-queue-using-queuemonitor\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.cogin.com\/blog\/msmq\/automatically-resend-expired-msmq-dead-letter-messages-back-to-original-queue-using-queuemonitor\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.cogin.com\/blog\/msmq\/automatically-resend-expired-msmq-dead-letter-messages-back-to-original-queue-using-queuemonitor\/#primaryimage\",\"url\":\"https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2016\/01\/Select-a-queue.png\",\"contentUrl\":\"https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2016\/01\/Select-a-queue.png\",\"width\":668,\"height\":585},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.cogin.com\/blog\/msmq\/automatically-resend-expired-msmq-dead-letter-messages-back-to-original-queue-using-queuemonitor\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.cogin.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Automatically resend expired MSMQ dead letter messages using QueueMonitor\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.cogin.com\/blog\/#website\",\"url\":\"https:\/\/www.cogin.com\/blog\/\",\"name\":\"Cogin blog\",\"description\":\"Queuing tools and articles\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.cogin.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.cogin.com\/blog\/#\/schema\/person\/e0c4fd92043868daa052d5978d69ed22\",\"name\":\"Dejan Grujic\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.cogin.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/e0bf2f4ab23ef7c6f2784ae50708b926?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/e0bf2f4ab23ef7c6f2784ae50708b926?s=96&d=mm&r=g\",\"caption\":\"Dejan Grujic\"},\"sameAs\":[\"http:\/\/www.cogin.com\"],\"url\":\"https:\/\/www.cogin.com\/blog\/author\/gruja\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Automatically resend expired MSMQ dead letter messages using QueueMonitor","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:\/\/www.cogin.com\/blog\/msmq\/automatically-resend-expired-msmq-dead-letter-messages-back-to-original-queue-using-queuemonitor\/","og_locale":"en_US","og_type":"article","og_title":"Automatically resend expired MSMQ dead letter messages using QueueMonitor","og_description":"There were few inquires recently on what to do with messages which were moved by MSMQ to dead letter queue because they reached &#8220;Time to be received&#8221; timeout. When is\u00a0Time to be received\u00a0property useful? Sometimes messages are of temporary value and are not important unless they are processed immediately. For instance if we use queue [&hellip;]","og_url":"https:\/\/www.cogin.com\/blog\/msmq\/automatically-resend-expired-msmq-dead-letter-messages-back-to-original-queue-using-queuemonitor\/","og_site_name":"Cogin blog","article_published_time":"2016-01-28T13:59:32+00:00","article_modified_time":"2016-01-29T11:25:21+00:00","og_image":[{"width":668,"height":585,"url":"https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2016\/01\/Select-a-queue.png","type":"image\/png"}],"author":"Dejan Grujic","twitter_misc":{"Written by":"Dejan Grujic","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.cogin.com\/blog\/msmq\/automatically-resend-expired-msmq-dead-letter-messages-back-to-original-queue-using-queuemonitor\/","url":"https:\/\/www.cogin.com\/blog\/msmq\/automatically-resend-expired-msmq-dead-letter-messages-back-to-original-queue-using-queuemonitor\/","name":"Automatically resend expired MSMQ dead letter messages using QueueMonitor","isPartOf":{"@id":"https:\/\/www.cogin.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.cogin.com\/blog\/msmq\/automatically-resend-expired-msmq-dead-letter-messages-back-to-original-queue-using-queuemonitor\/#primaryimage"},"image":{"@id":"https:\/\/www.cogin.com\/blog\/msmq\/automatically-resend-expired-msmq-dead-letter-messages-back-to-original-queue-using-queuemonitor\/#primaryimage"},"thumbnailUrl":"https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2016\/01\/Select-a-queue.png","datePublished":"2016-01-28T13:59:32+00:00","dateModified":"2016-01-29T11:25:21+00:00","author":{"@id":"https:\/\/www.cogin.com\/blog\/#\/schema\/person\/e0c4fd92043868daa052d5978d69ed22"},"breadcrumb":{"@id":"https:\/\/www.cogin.com\/blog\/msmq\/automatically-resend-expired-msmq-dead-letter-messages-back-to-original-queue-using-queuemonitor\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.cogin.com\/blog\/msmq\/automatically-resend-expired-msmq-dead-letter-messages-back-to-original-queue-using-queuemonitor\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.cogin.com\/blog\/msmq\/automatically-resend-expired-msmq-dead-letter-messages-back-to-original-queue-using-queuemonitor\/#primaryimage","url":"https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2016\/01\/Select-a-queue.png","contentUrl":"https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2016\/01\/Select-a-queue.png","width":668,"height":585},{"@type":"BreadcrumbList","@id":"https:\/\/www.cogin.com\/blog\/msmq\/automatically-resend-expired-msmq-dead-letter-messages-back-to-original-queue-using-queuemonitor\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.cogin.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Automatically resend expired MSMQ dead letter messages using QueueMonitor"}]},{"@type":"WebSite","@id":"https:\/\/www.cogin.com\/blog\/#website","url":"https:\/\/www.cogin.com\/blog\/","name":"Cogin blog","description":"Queuing tools and articles","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.cogin.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.cogin.com\/blog\/#\/schema\/person\/e0c4fd92043868daa052d5978d69ed22","name":"Dejan Grujic","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.cogin.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/e0bf2f4ab23ef7c6f2784ae50708b926?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e0bf2f4ab23ef7c6f2784ae50708b926?s=96&d=mm&r=g","caption":"Dejan Grujic"},"sameAs":["http:\/\/www.cogin.com"],"url":"https:\/\/www.cogin.com\/blog\/author\/gruja\/"}]}},"_links":{"self":[{"href":"https:\/\/www.cogin.com\/blog\/wp-json\/wp\/v2\/posts\/41","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.cogin.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.cogin.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.cogin.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.cogin.com\/blog\/wp-json\/wp\/v2\/comments?post=41"}],"version-history":[{"count":6,"href":"https:\/\/www.cogin.com\/blog\/wp-json\/wp\/v2\/posts\/41\/revisions"}],"predecessor-version":[{"id":53,"href":"https:\/\/www.cogin.com\/blog\/wp-json\/wp\/v2\/posts\/41\/revisions\/53"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.cogin.com\/blog\/wp-json\/wp\/v2\/media\/47"}],"wp:attachment":[{"href":"https:\/\/www.cogin.com\/blog\/wp-json\/wp\/v2\/media?parent=41"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.cogin.com\/blog\/wp-json\/wp\/v2\/categories?post=41"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.cogin.com\/blog\/wp-json\/wp\/v2\/tags?post=41"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}