{"id":261,"date":"2018-04-19T10:18:57","date_gmt":"2018-04-19T09:18:57","guid":{"rendered":"https:\/\/www.cogin.com\/blog\/?p=261"},"modified":"2018-04-26T10:39:16","modified_gmt":"2018-04-26T09:39:16","slug":"more-about-queues-rabbitmq-for-msmq-users-part-3","status":"publish","type":"post","link":"https:\/\/www.cogin.com\/blog\/rabbitmq\/more-about-queues-rabbitmq-for-msmq-users-part-3\/","title":{"rendered":"More about queues &#8211; RabbitMQ for MSMQ users, part 3"},"content":{"rendered":"<p>On the first glance, RabbitMQ queues are very similar to MSMQ queues. First important difference is that you can&#8217;t change queue properties once a\u00a0queue is created. There&#8217;s a way around that using policies, and we&#8217;ll talk about them later. Also, RabbitMQ queues don&#8217;t have\u00a0 subqueues or journals.<\/p>\n<h2>Queue properties<\/h2>\n<p>Each queue has only these two mandatory settings (flags):<\/p>\n<ul>\n<li><strong>Durable<\/strong> &#8211; queue or exchange will survive broker restart. Otherwise, it won\u2019t be available after restart\u00a0&#8211; this doesn&#8217;t\u00a0only\u00a0apply to its messages but to entire queue. And if queue is durable it still doesn&#8217;t mean its messages will survive restarting &#8211; to achieve that they should be created as \u201cPersistent\u201d. This is similar to \u201crecoverable\u201d MSMQ messages.<\/li>\n<li><strong>Auto delete<\/strong> &#8211; these queues exist only while there are consumers for them. When the last subscriber unsubscribes, queue is automatically deleted.<\/li>\n<\/ul>\n<h2>Additional queue properties<\/h2>\n<p>There are additional settings you can set for a queue when it&#8217;s created, which configure\u00a0its behavior in more details. These settings are key-value pairs &#8211; a setting name and its value. Since these are free entries you can put anything you want there. However, there are some predefined settings which all queues recognize, and they start with &#8220;x-&#8220;. And some plugins might support their own properties. If you don&#8217;t set one of predefined properties, that\u00a0value will be taken from the policy, if there is a policy applicable to a queue. We&#8217;ll deal with policies later.<\/p>\n<p>Here are some of settings\u00a0available for all queues:<\/p>\n<ul>\n<li><strong>x-message-<\/strong>ttl\u00a0&#8211; how long to keep message\u00a0while it waits processing. If it times out, message will be deadlettered. This applies to all messages in a queue. You can also set expiration time for individual message separately, and that parameter is similar to MSMQ\u2019s Time to live message property.<\/li>\n<li><strong>x-max-length<\/strong> and\u00a0<strong>x-max-length-bytes<\/strong> &#8211; max size of queue. MSMQ can specify that only in kilobytes, but RabbitMQ can limit both number of messages and their total size.<\/li>\n<li><strong>x-max-priority<\/strong> &#8211; message priorities are not a predefined set like in MSMQ, but numbers.<\/li>\n<\/ul>\n<h2>Deadlettering<\/h2>\n<p>Message is moved to deadletter in few cases: when it\u2019s rejected by receiving application (by calling basic.reject or basic.nack without requeue\u00a0option), when it expires because of &#8220;Time to live&#8221; setting, or if queue limit is exceeded. There are no system deadletter queues like in MSMQ, so you have to create your own and instruct RabbitMQ to use them for deadlettered messages. Or, to be more precise,\u00a0 you specify dead letter <i>exchange<\/i> since we always send to exchanges, not to queues.<\/p>\n<p>Since this is configurable for each queue, you can set it up that each important queue has separate deadletter exchange, or it can be shared by multiple queues. When messages end up in deadletter they&#8217;ll have\u00a0<strong>x-first-death-queue<\/strong> header set to original queue, so even if deadletter is shared you&#8217;ll know where they came from.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-308\" src=\"https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2018\/04\/Deadletter-headers.png\" alt=\"RabbitMQ deadletter headers\" width=\"396\" height=\"250\" srcset=\"https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2018\/04\/Deadletter-headers.png 396w, https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2018\/04\/Deadletter-headers-300x189.png 300w\" sizes=\"auto, (max-width: 396px) 100vw, 396px\" \/><\/p>\n<p>Deadlettered message gets additional data in its headers &#8211; fields starting with \u201cx-death\u201d, which describe the reason for deadlettering, original queue, time, etc. <a href=\"https:\/\/www.cogin.com\/mq\/\">QueueExplorer<\/a> allows you to see these details:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-313\" src=\"https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2018\/04\/Deadletter-messages.png\" alt=\"RabbitMQ deadlettered messages\" width=\"547\" height=\"217\" srcset=\"https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2018\/04\/Deadletter-messages.png 547w, https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2018\/04\/Deadletter-messages-300x119.png 300w\" sizes=\"auto, (max-width: 547px) 100vw, 547px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Deadlettering is turned on for a queue by adding \u201cx-dead-letter-exchange\u201d to queue\u2019s properties, or to a policy which is applied to that queue. Optionally, you can specify \u201cx-dead-letter-routing-key\u201d which will be used instead of message\u2019s original routing key. Dead letter exchange is like any other exchange, you specify its type and bindings.<\/p>\n<p>In the\u00a0<a href=\"https:\/\/www.cogin.com\/blog\/rabbitmq\/policies-rabbitmq-for-msmq-users-part-4\/\">next part<\/a> we&#8217;ll see what are policies and how to use them.<\/p>\n<p><a href=\"https:\/\/www.cogin.com\/articles\/Introduction-to-RabbitMQ-for-MSMQ-users.php\">Links to all 6 parts<\/a> of this series.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>On the first glance, RabbitMQ queues are very similar to MSMQ queues. First important difference is that you can&#8217;t change queue properties once a\u00a0queue is created. There&#8217;s a way around that using policies, and we&#8217;ll talk about them later. Also, RabbitMQ queues don&#8217;t have\u00a0 subqueues or journals. Queue properties Each queue has only these two [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,12],"tags":[5,13],"class_list":["post-261","post","type-post","status-publish","format-standard","hentry","category-msmq","category-rabbitmq","tag-msmq","tag-rabbitmq"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>More about queues - RabbitMQ for MSMQ users, part 3<\/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\/rabbitmq\/more-about-queues-rabbitmq-for-msmq-users-part-3\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"More about queues - RabbitMQ for MSMQ users, part 3\" \/>\n<meta property=\"og:description\" content=\"On the first glance, RabbitMQ queues are very similar to MSMQ queues. First important difference is that you can&#8217;t change queue properties once a\u00a0queue is created. There&#8217;s a way around that using policies, and we&#8217;ll talk about them later. Also, RabbitMQ queues don&#8217;t have\u00a0 subqueues or journals. Queue properties Each queue has only these two [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.cogin.com\/blog\/rabbitmq\/more-about-queues-rabbitmq-for-msmq-users-part-3\/\" \/>\n<meta property=\"og:site_name\" content=\"Cogin blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-04-19T09:18:57+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-04-26T09:39:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2018\/04\/Deadletter-headers.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\":\"Article\",\"@id\":\"https:\\\/\\\/www.cogin.com\\\/blog\\\/rabbitmq\\\/more-about-queues-rabbitmq-for-msmq-users-part-3\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.cogin.com\\\/blog\\\/rabbitmq\\\/more-about-queues-rabbitmq-for-msmq-users-part-3\\\/\"},\"author\":{\"name\":\"Dejan Grujic\",\"@id\":\"https:\\\/\\\/www.cogin.com\\\/blog\\\/#\\\/schema\\\/person\\\/e0c4fd92043868daa052d5978d69ed22\"},\"headline\":\"More about queues &#8211; RabbitMQ for MSMQ users, part 3\",\"datePublished\":\"2018-04-19T09:18:57+00:00\",\"dateModified\":\"2018-04-26T09:39:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.cogin.com\\\/blog\\\/rabbitmq\\\/more-about-queues-rabbitmq-for-msmq-users-part-3\\\/\"},\"wordCount\":607,\"image\":{\"@id\":\"https:\\\/\\\/www.cogin.com\\\/blog\\\/rabbitmq\\\/more-about-queues-rabbitmq-for-msmq-users-part-3\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.cogin.com\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/04\\\/Deadletter-headers.png\",\"keywords\":[\"MSMQ\",\"RabbitMQ\"],\"articleSection\":[\"MSMQ\",\"RabbitMQ\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.cogin.com\\\/blog\\\/rabbitmq\\\/more-about-queues-rabbitmq-for-msmq-users-part-3\\\/\",\"url\":\"https:\\\/\\\/www.cogin.com\\\/blog\\\/rabbitmq\\\/more-about-queues-rabbitmq-for-msmq-users-part-3\\\/\",\"name\":\"More about queues - RabbitMQ for MSMQ users, part 3\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.cogin.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.cogin.com\\\/blog\\\/rabbitmq\\\/more-about-queues-rabbitmq-for-msmq-users-part-3\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.cogin.com\\\/blog\\\/rabbitmq\\\/more-about-queues-rabbitmq-for-msmq-users-part-3\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.cogin.com\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/04\\\/Deadletter-headers.png\",\"datePublished\":\"2018-04-19T09:18:57+00:00\",\"dateModified\":\"2018-04-26T09:39:16+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.cogin.com\\\/blog\\\/#\\\/schema\\\/person\\\/e0c4fd92043868daa052d5978d69ed22\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.cogin.com\\\/blog\\\/rabbitmq\\\/more-about-queues-rabbitmq-for-msmq-users-part-3\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.cogin.com\\\/blog\\\/rabbitmq\\\/more-about-queues-rabbitmq-for-msmq-users-part-3\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.cogin.com\\\/blog\\\/rabbitmq\\\/more-about-queues-rabbitmq-for-msmq-users-part-3\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.cogin.com\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/04\\\/Deadletter-headers.png\",\"contentUrl\":\"https:\\\/\\\/www.cogin.com\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/04\\\/Deadletter-headers.png\",\"width\":396,\"height\":250,\"caption\":\"RabbitMQ deadletter headers\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.cogin.com\\\/blog\\\/rabbitmq\\\/more-about-queues-rabbitmq-for-msmq-users-part-3\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.cogin.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"More about queues &#8211; RabbitMQ for MSMQ users, part 3\"}]},{\"@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:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7edfd9071a535694242755af2736da7972b73f5d026be6563586a9b0ff7829d0?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7edfd9071a535694242755af2736da7972b73f5d026be6563586a9b0ff7829d0?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7edfd9071a535694242755af2736da7972b73f5d026be6563586a9b0ff7829d0?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":"More about queues - RabbitMQ for MSMQ users, part 3","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\/rabbitmq\/more-about-queues-rabbitmq-for-msmq-users-part-3\/","og_locale":"en_US","og_type":"article","og_title":"More about queues - RabbitMQ for MSMQ users, part 3","og_description":"On the first glance, RabbitMQ queues are very similar to MSMQ queues. First important difference is that you can&#8217;t change queue properties once a\u00a0queue is created. There&#8217;s a way around that using policies, and we&#8217;ll talk about them later. Also, RabbitMQ queues don&#8217;t have\u00a0 subqueues or journals. Queue properties Each queue has only these two [&hellip;]","og_url":"https:\/\/www.cogin.com\/blog\/rabbitmq\/more-about-queues-rabbitmq-for-msmq-users-part-3\/","og_site_name":"Cogin blog","article_published_time":"2018-04-19T09:18:57+00:00","article_modified_time":"2018-04-26T09:39:16+00:00","og_image":[{"url":"https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2018\/04\/Deadletter-headers.png","type":"","width":"","height":""}],"author":"Dejan Grujic","twitter_misc":{"Written by":"Dejan Grujic","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.cogin.com\/blog\/rabbitmq\/more-about-queues-rabbitmq-for-msmq-users-part-3\/#article","isPartOf":{"@id":"https:\/\/www.cogin.com\/blog\/rabbitmq\/more-about-queues-rabbitmq-for-msmq-users-part-3\/"},"author":{"name":"Dejan Grujic","@id":"https:\/\/www.cogin.com\/blog\/#\/schema\/person\/e0c4fd92043868daa052d5978d69ed22"},"headline":"More about queues &#8211; RabbitMQ for MSMQ users, part 3","datePublished":"2018-04-19T09:18:57+00:00","dateModified":"2018-04-26T09:39:16+00:00","mainEntityOfPage":{"@id":"https:\/\/www.cogin.com\/blog\/rabbitmq\/more-about-queues-rabbitmq-for-msmq-users-part-3\/"},"wordCount":607,"image":{"@id":"https:\/\/www.cogin.com\/blog\/rabbitmq\/more-about-queues-rabbitmq-for-msmq-users-part-3\/#primaryimage"},"thumbnailUrl":"https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2018\/04\/Deadletter-headers.png","keywords":["MSMQ","RabbitMQ"],"articleSection":["MSMQ","RabbitMQ"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.cogin.com\/blog\/rabbitmq\/more-about-queues-rabbitmq-for-msmq-users-part-3\/","url":"https:\/\/www.cogin.com\/blog\/rabbitmq\/more-about-queues-rabbitmq-for-msmq-users-part-3\/","name":"More about queues - RabbitMQ for MSMQ users, part 3","isPartOf":{"@id":"https:\/\/www.cogin.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.cogin.com\/blog\/rabbitmq\/more-about-queues-rabbitmq-for-msmq-users-part-3\/#primaryimage"},"image":{"@id":"https:\/\/www.cogin.com\/blog\/rabbitmq\/more-about-queues-rabbitmq-for-msmq-users-part-3\/#primaryimage"},"thumbnailUrl":"https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2018\/04\/Deadletter-headers.png","datePublished":"2018-04-19T09:18:57+00:00","dateModified":"2018-04-26T09:39:16+00:00","author":{"@id":"https:\/\/www.cogin.com\/blog\/#\/schema\/person\/e0c4fd92043868daa052d5978d69ed22"},"breadcrumb":{"@id":"https:\/\/www.cogin.com\/blog\/rabbitmq\/more-about-queues-rabbitmq-for-msmq-users-part-3\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.cogin.com\/blog\/rabbitmq\/more-about-queues-rabbitmq-for-msmq-users-part-3\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.cogin.com\/blog\/rabbitmq\/more-about-queues-rabbitmq-for-msmq-users-part-3\/#primaryimage","url":"https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2018\/04\/Deadletter-headers.png","contentUrl":"https:\/\/www.cogin.com\/blog\/wp-content\/uploads\/2018\/04\/Deadletter-headers.png","width":396,"height":250,"caption":"RabbitMQ deadletter headers"},{"@type":"BreadcrumbList","@id":"https:\/\/www.cogin.com\/blog\/rabbitmq\/more-about-queues-rabbitmq-for-msmq-users-part-3\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.cogin.com\/blog\/"},{"@type":"ListItem","position":2,"name":"More about queues &#8211; RabbitMQ for MSMQ users, part 3"}]},{"@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:\/\/secure.gravatar.com\/avatar\/7edfd9071a535694242755af2736da7972b73f5d026be6563586a9b0ff7829d0?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/7edfd9071a535694242755af2736da7972b73f5d026be6563586a9b0ff7829d0?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/7edfd9071a535694242755af2736da7972b73f5d026be6563586a9b0ff7829d0?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\/261","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=261"}],"version-history":[{"count":8,"href":"https:\/\/www.cogin.com\/blog\/wp-json\/wp\/v2\/posts\/261\/revisions"}],"predecessor-version":[{"id":348,"href":"https:\/\/www.cogin.com\/blog\/wp-json\/wp\/v2\/posts\/261\/revisions\/348"}],"wp:attachment":[{"href":"https:\/\/www.cogin.com\/blog\/wp-json\/wp\/v2\/media?parent=261"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.cogin.com\/blog\/wp-json\/wp\/v2\/categories?post=261"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.cogin.com\/blog\/wp-json\/wp\/v2\/tags?post=261"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}