{"id":1865,"date":"2020-05-13T10:15:34","date_gmt":"2020-05-13T08:15:34","guid":{"rendered":"http:\/\/web.evertop.pl\/how-to-use-rabbitmq-with-symfony-messenger\/"},"modified":"2020-10-23T21:00:46","modified_gmt":"2020-10-23T19:00:46","slug":"how-to-use-rabbitmq-with-symfony-messenger","status":"publish","type":"post","link":"https:\/\/www.evertop.pl\/no\/how-to-use-rabbitmq-with-symfony-messenger\/","title":{"rendered":"How To Use RabbitMQ With Symfony Messenger"},"content":{"rendered":"<p>In this article I will first explain how the queues work and in the second part we will install Symfony, messenger component and rabbitMQ and we will create a simple project example of product order basket in the store.<\/p>\n<p>As a rule, new <strong>queue<\/strong> items are added as last ones (enqueue) and then they are removed as they move to the beginning of a queue (dequeue).<\/p>\n<p>(First In, First Out, FIFO)<\/p>\n<p><strong>Type of queue:<\/strong><\/p>\n<ul>\n<li>Cyclic<\/li>\n<li>Double-sided<\/li>\n<li>Priority<\/li>\n<\/ul>\n<p><strong>Cyclic queue<\/strong> has a wheel structure, if it comes down to the last element of the list it automatically starts from the beginning.<\/p>\n<p><strong>Double-sided queue<\/strong> &#8211; both sides can be used for adding as well as deleting nodes.<\/p>\n<p>In case of<strong> priority queue<\/strong>, elements are added according to a given pre-defined priority which means that element with a higher priority will be moved up higher in a hierarchy and will be serviced earlier, not like in a classic queue when it is added up to the end of a queue.<\/p>\n<p>The examples of such queues are the services with free accounts and fee-paying subscribed accounts, or insurance application where you report a damage and it is pre-defined that more serious damages (like accidents) are serviced with a higher priority than just regular bumps.<\/p>\n<p>Symfony Messenger<\/p>\n<p><strong>Main concepts:<\/strong><\/p>\n<ul>\n<li><strong>Message<\/strong> &#8211; any object<\/li>\n<li><strong>Bus<\/strong> &#8211; dispatching messages<\/li>\n<li><strong>Message Handler<\/strong> &#8211; processes for servicing messages<\/li>\n<li><strong>Transport<\/strong> \u2013 sending and receiving messages, sending to queues for example via RabbitMQ<\/li>\n<li><strong>Worker<\/strong> \u2013 processing and consuming messages<\/li>\n<\/ul>\n<p>Stack: Symfony 4.3.11, PHP 7.3.16, MySQL 5.7.29<\/p>\n<ol>\n<li>Create a project with the following command.<br \/>\n<strong>composer create-project symfony\/website-skeleton queue-project &laquo;4.3.*&raquo;<br \/>\n<\/strong><\/li>\n<li>Start the server with the command.<br \/>\n<strong>bin\/console server:run<br \/>\n<\/strong><\/li>\n<li>Install Messenger component.<br \/>\n<strong>composer require symfony\/messenger<br \/>\n<\/strong><\/li>\n<li>Create controller.<br \/>\n<strong>bin\/console make:controller<br \/>\n<\/strong><\/li>\n<li>In method basket messages are dispatching.\n<pre>&lt;?php\r\ndeclare(strict_types=1);\r\n\r\nnamespace AppController;\r\n\r\nuse AppMessageCommandOrderProduct;\r\nuse SymfonyBundleFrameworkBundleControllerAbstractController;\r\nuse SymfonyComponentHttpFoundationResponse;\r\nuse SymfonyComponentMessengerMessageBusInterface;\r\nuse SymfonyComponentRoutingAnnotationRoute;\r\n\r\nclass ShopBasketController extends AbstractController\r\n{\r\n    private $messageBus;\r\n\r\n    \/**\r\n     * ShopBasketController constructor.\r\n     * @param MessageBusInterface $messageBus\r\n     *\/\r\n    public function __construct(MessageBusInterface $messageBus)\r\n    {\r\n        $this-&gt;messageBus = $messageBus;\r\n    }\r\n\r\n    \/**\r\n     * @Route(\"\/\", name=\"shop\")\r\n     *\/\r\n    public function index(): Response\r\n    {\r\n        return $this-&gt;render('shop_basket\/index.html.twig', [\r\n            'controller_name' =&gt; 'ShopBasketController',\r\n        ]);\r\n    }\r\n\r\n    \/**\r\n     * @Route(\"\/shop\/basket\", name=\"shop_basket\")\r\n     * @throws Exception\r\n     *\/\r\n    public function basket(): Response\r\n    {\r\n        $productNumber = 1;\r\n        $productAmount = 9.90;\r\n\r\n        try {\r\n            $this-&gt;messageBus-&gt;dispatch(\r\n                new OrderProduct($productNumber, $productAmount\r\n                ));\r\n        } catch (Exception $exception) {\r\n            throw new Exception('Error buy product.');\r\n        }\r\n\r\n        return new Response(sprintf(\r\n            ' success add to basket!' . self::randProduct()\r\n        ));\r\n    }\r\n\r\n    public function randProduct()\r\n    {\r\n        define('PRODUCTS', [\r\n            'Backpack',\r\n            'Cap',\r\n            'Bag'\r\n        ]);\r\n        echo PRODUCTS[array_rand(PRODUCTS)];\r\n    }\r\n}<\/pre>\n<\/li>\n<li>Next, we create OrderProductHandler. This handler evokes $orderProduct, and in example time interval 9 second, it consumes messages. Here your domain logic is located.\n<pre>&lt;?php\r\ndeclare(strict_types=1);\r\n\r\nnamespace AppMessageHandlerCommand;\r\n\r\nuse AppMessageCommandOrderProduct;\r\nuse SymfonyComponentMessengerHandlerMessageHandlerInterface;\r\n\r\nfinal class OrderProductHandler implements MessageHandlerInterface\r\n{\r\n    public function __invoke(OrderProduct $orderProduct)\r\n    {\r\n        sleep(9);\r\n        var_dump($orderProduct);\r\n    }\r\n}<\/pre>\n<\/li>\n<li>Create directory Message\/Command and PHP class OrderProduct. This is a class where there is a PHP object that can be handled by a handler.\n<pre>&lt;?php\r\ndeclare(strict_types=1);\r\n\r\nnamespace AppMessageCommand;\r\n\r\n\r\nclass OrderProduct\r\n{\r\n    private $productNumber;\r\n    private $productAmount;\r\n\r\n    public function __construct(int $productNumber, float    $productAmount)\r\n    {\r\n        $this-&gt;productNumber = $productNumber;\r\n        $this-&gt;productAmount = $productAmount;\r\n    }\r\n\r\n    public function getProductNumber(): int\r\n    {\r\n        return $this-&gt;productNumber;\r\n    }\r\n\r\n    public function getProductAmount(): float\r\n    {\r\n        return $this-&gt;productAmount;\r\n    }\r\n}<\/pre>\n<\/li>\n<li>Register handler.\n<pre>#config\/service.yaml\r\nAppMessageHandler:\r\n    resource: '..\/src\/MessageHandler'\r\n    tags: ['messenger.message_handler']<\/pre>\n<\/li>\n<li>Doctrine transport configuration.\n<pre>#config\/packages\/messenger.yaml\r\nframework:\r\n    messenger:\r\n        transports:\r\n             async:\r\n               dsn: '%env(MESSENGER_TRANSPORT_DSN)%'\r\n        routing:\r\n             'AppMessageCommandOrderProduct': async<\/pre>\n<\/li>\n<li>We also need to define the messenger transport. Doctrine transport was introduced in Symfony 4.3.\n<pre>#.env\r\nMESSENGER_TRANSPORT_DSN=doctrine:\/\/default<\/pre>\n<\/li>\n<li>The following command will consume the messages from the queue.<br \/>\n<strong>bin\/console messenger:consum<\/strong><img loading=\"lazy\" class=\"aligncenter wp-image-1724\" src=\"http:\/\/web.evertop.pl\/wp-content\/uploads\/2020\/09\/1_-AWcL31h8iFkQY-hmrbMmw-1024x382-1.jpeg\" alt=\"\" width=\"799\" height=\"298\" srcset=\"https:\/\/www.evertop.pl\/wp-content\/uploads\/2020\/09\/1_-AWcL31h8iFkQY-hmrbMmw-1024x382-1.jpeg 1024w, https:\/\/www.evertop.pl\/wp-content\/uploads\/2020\/09\/1_-AWcL31h8iFkQY-hmrbMmw-1024x382-1-300x112.jpeg 300w, https:\/\/www.evertop.pl\/wp-content\/uploads\/2020\/09\/1_-AWcL31h8iFkQY-hmrbMmw-1024x382-1-768x287.jpeg 768w\" sizes=\"(max-width: 799px) 100vw, 799px\" \/><\/li>\n<\/ol>\n<ol>\n<li>Then install RabbitMQ, login and password default is <strong>guest\/guest.<br \/>\n<\/strong><strong>brew install rabbitmq<br \/>\n<\/strong> <strong>brew services start rabbitmq<br \/>\n<\/strong><strong>http:\/\/localhost:15672\/<\/strong><\/li>\n<li>You still need to install AMQP transport and add to <strong>php.ini extension=amqp.so<\/strong> (configuration below it works on Symfony 4.2).<br \/>\n<strong>composer require symfony\/amqp-pack<\/strong><\/li>\n<li>Define the transport.\n<pre>#.env\r\nMESSENGER_TRANSPORT_DSN=amqp:\/\/guest:guest@localhost:5672\/\/\/messages<\/pre>\n<\/li>\n<li>In case of RabbitMQ transport, the remaining part of its configuration is analogous to Doctrine transport.\n<pre>config\/packages\/messenger.yaml\r\nframework:\r\n    messenger:\r\n      transports:\r\n          amqp: '%env(MESSENGER_TRANSPORT_DSN)%'\r\n\r\n      routing:\r\n        'AppMessageCommandOrderProduct': amqp<\/pre>\n<\/li>\n<\/ol>\n<h2><strong>Summary<\/strong><\/h2>\n<p>You have learned the Messenger component. We used the two transports Doctrine and RabbitMQ.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this article I will first explain how the queues work and in the second part we will install Symfony, messenger component and rabbitMQ and we will create a simple project example of product order basket in the store. As a rule, new queue items are added as last ones (enqueue) and then they are [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[15],"tags":[93,23,94],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v16.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How To Use RabbitMQ With Symfony Messenger - Evertop<\/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.evertop.pl\/no\/how-to-use-rabbitmq-with-symfony-messenger\/\" \/>\n<meta property=\"og:locale\" content=\"nb_NO\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How To Use RabbitMQ With Symfony Messenger - Evertop\" \/>\n<meta property=\"og:description\" content=\"In this article I will first explain how the queues work and in the second part we will install Symfony, messenger component and rabbitMQ and we will create a simple project example of product order basket in the store. As a rule, new queue items are added as last ones (enqueue) and then they are [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.evertop.pl\/no\/how-to-use-rabbitmq-with-symfony-messenger\/\" \/>\n<meta property=\"og:site_name\" content=\"Evertop\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/EvertopPoland\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-13T08:15:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-10-23T19:00:46+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/web.evertop.pl\/wp-content\/uploads\/2020\/09\/email-image.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1020\" \/>\n\t<meta property=\"og:image:height\" content=\"255\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Skrevet av\" \/>\n\t<meta name=\"twitter:data1\" content=\"lpabian\" \/>\n\t<meta name=\"twitter:label2\" content=\"Ansl. lesetid\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutter\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.evertop.pl\/#organization\",\"name\":\"Evertop\",\"url\":\"https:\/\/www.evertop.pl\/\",\"sameAs\":[\"https:\/\/www.facebook.com\/EvertopPoland\/\",\"https:\/\/www.linkedin.com\/company\/evertop-software-development\/\"],\"logo\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.evertop.pl\/#logo\",\"inLanguage\":\"nb-NO\",\"url\":\"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/04\/logo_new.png\",\"contentUrl\":\"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/04\/logo_new.png\",\"width\":582,\"height\":114,\"caption\":\"Evertop\"},\"image\":{\"@id\":\"https:\/\/www.evertop.pl\/#logo\"}},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.evertop.pl\/#website\",\"url\":\"https:\/\/www.evertop.pl\/\",\"name\":\"Evertop\",\"description\":\"we code the future\",\"publisher\":{\"@id\":\"https:\/\/www.evertop.pl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.evertop.pl\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"nb-NO\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.evertop.pl\/no\/how-to-use-rabbitmq-with-symfony-messenger\/#primaryimage\",\"inLanguage\":\"nb-NO\",\"url\":\"http:\/\/web.evertop.pl\/wp-content\/uploads\/2020\/09\/1_-AWcL31h8iFkQY-hmrbMmw-1024x382-1.jpeg\",\"contentUrl\":\"http:\/\/web.evertop.pl\/wp-content\/uploads\/2020\/09\/1_-AWcL31h8iFkQY-hmrbMmw-1024x382-1.jpeg\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.evertop.pl\/no\/how-to-use-rabbitmq-with-symfony-messenger\/#webpage\",\"url\":\"https:\/\/www.evertop.pl\/no\/how-to-use-rabbitmq-with-symfony-messenger\/\",\"name\":\"How To Use RabbitMQ With Symfony Messenger - Evertop\",\"isPartOf\":{\"@id\":\"https:\/\/www.evertop.pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.evertop.pl\/no\/how-to-use-rabbitmq-with-symfony-messenger\/#primaryimage\"},\"datePublished\":\"2020-05-13T08:15:34+00:00\",\"dateModified\":\"2020-10-23T19:00:46+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.evertop.pl\/no\/how-to-use-rabbitmq-with-symfony-messenger\/#breadcrumb\"},\"inLanguage\":\"nb-NO\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.evertop.pl\/no\/how-to-use-rabbitmq-with-symfony-messenger\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.evertop.pl\/no\/how-to-use-rabbitmq-with-symfony-messenger\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\\u0142\\u00f3wna\",\"item\":\"https:\/\/www.evertop.pl\/no\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How To Use RabbitMQ With Symfony Messenger\"}]},{\"@type\":\"Article\",\"@id\":\"https:\/\/www.evertop.pl\/no\/how-to-use-rabbitmq-with-symfony-messenger\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.evertop.pl\/no\/how-to-use-rabbitmq-with-symfony-messenger\/#webpage\"},\"author\":{\"@id\":\"https:\/\/www.evertop.pl\/#\/schema\/person\/7fa9c3dddc7eabfad26b496cb9a97628\"},\"headline\":\"How To Use RabbitMQ With Symfony Messenger\",\"datePublished\":\"2020-05-13T08:15:34+00:00\",\"dateModified\":\"2020-10-23T19:00:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.evertop.pl\/no\/how-to-use-rabbitmq-with-symfony-messenger\/#webpage\"},\"wordCount\":458,\"publisher\":{\"@id\":\"https:\/\/www.evertop.pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.evertop.pl\/no\/how-to-use-rabbitmq-with-symfony-messenger\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/web.evertop.pl\/wp-content\/uploads\/2020\/09\/1_-AWcL31h8iFkQY-hmrbMmw-1024x382-1.jpeg\",\"keywords\":[\"php\",\"programming tips\",\"queue\"],\"articleSection\":[\"Blog\"],\"inLanguage\":\"nb-NO\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.evertop.pl\/#\/schema\/person\/7fa9c3dddc7eabfad26b496cb9a97628\",\"name\":\"lpabian\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.evertop.pl\/#personlogo\",\"inLanguage\":\"nb-NO\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/330a0a7408b1711d2acb1b0cb39b7e2d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/330a0a7408b1711d2acb1b0cb39b7e2d?s=96&d=mm&r=g\",\"caption\":\"lpabian\"},\"sameAs\":[\"http:\/\/web.evertop.pl\"],\"url\":\"https:\/\/www.evertop.pl\/no\/author\/lpabian\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How To Use RabbitMQ With Symfony Messenger - Evertop","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.evertop.pl\/no\/how-to-use-rabbitmq-with-symfony-messenger\/","og_locale":"nb_NO","og_type":"article","og_title":"How To Use RabbitMQ With Symfony Messenger - Evertop","og_description":"In this article I will first explain how the queues work and in the second part we will install Symfony, messenger component and rabbitMQ and we will create a simple project example of product order basket in the store. As a rule, new queue items are added as last ones (enqueue) and then they are [&hellip;]","og_url":"https:\/\/www.evertop.pl\/no\/how-to-use-rabbitmq-with-symfony-messenger\/","og_site_name":"Evertop","article_publisher":"https:\/\/www.facebook.com\/EvertopPoland\/","article_published_time":"2020-05-13T08:15:34+00:00","article_modified_time":"2020-10-23T19:00:46+00:00","og_image":[{"width":1020,"height":255,"url":"http:\/\/web.evertop.pl\/wp-content\/uploads\/2020\/09\/email-image.jpg","path":"\/home\/evertop\/web-evertop\/wp-content\/uploads\/2020\/09\/email-image.jpg","size":"full","id":1725,"alt":"","pixels":260100,"type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Skrevet av":"lpabian","Ansl. lesetid":"3 minutter"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Organization","@id":"https:\/\/www.evertop.pl\/#organization","name":"Evertop","url":"https:\/\/www.evertop.pl\/","sameAs":["https:\/\/www.facebook.com\/EvertopPoland\/","https:\/\/www.linkedin.com\/company\/evertop-software-development\/"],"logo":{"@type":"ImageObject","@id":"https:\/\/www.evertop.pl\/#logo","inLanguage":"nb-NO","url":"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/04\/logo_new.png","contentUrl":"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/04\/logo_new.png","width":582,"height":114,"caption":"Evertop"},"image":{"@id":"https:\/\/www.evertop.pl\/#logo"}},{"@type":"WebSite","@id":"https:\/\/www.evertop.pl\/#website","url":"https:\/\/www.evertop.pl\/","name":"Evertop","description":"we code the future","publisher":{"@id":"https:\/\/www.evertop.pl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.evertop.pl\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"nb-NO"},{"@type":"ImageObject","@id":"https:\/\/www.evertop.pl\/no\/how-to-use-rabbitmq-with-symfony-messenger\/#primaryimage","inLanguage":"nb-NO","url":"http:\/\/web.evertop.pl\/wp-content\/uploads\/2020\/09\/1_-AWcL31h8iFkQY-hmrbMmw-1024x382-1.jpeg","contentUrl":"http:\/\/web.evertop.pl\/wp-content\/uploads\/2020\/09\/1_-AWcL31h8iFkQY-hmrbMmw-1024x382-1.jpeg"},{"@type":"WebPage","@id":"https:\/\/www.evertop.pl\/no\/how-to-use-rabbitmq-with-symfony-messenger\/#webpage","url":"https:\/\/www.evertop.pl\/no\/how-to-use-rabbitmq-with-symfony-messenger\/","name":"How To Use RabbitMQ With Symfony Messenger - Evertop","isPartOf":{"@id":"https:\/\/www.evertop.pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.evertop.pl\/no\/how-to-use-rabbitmq-with-symfony-messenger\/#primaryimage"},"datePublished":"2020-05-13T08:15:34+00:00","dateModified":"2020-10-23T19:00:46+00:00","breadcrumb":{"@id":"https:\/\/www.evertop.pl\/no\/how-to-use-rabbitmq-with-symfony-messenger\/#breadcrumb"},"inLanguage":"nb-NO","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.evertop.pl\/no\/how-to-use-rabbitmq-with-symfony-messenger\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.evertop.pl\/no\/how-to-use-rabbitmq-with-symfony-messenger\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/www.evertop.pl\/no\/"},{"@type":"ListItem","position":2,"name":"How To Use RabbitMQ With Symfony Messenger"}]},{"@type":"Article","@id":"https:\/\/www.evertop.pl\/no\/how-to-use-rabbitmq-with-symfony-messenger\/#article","isPartOf":{"@id":"https:\/\/www.evertop.pl\/no\/how-to-use-rabbitmq-with-symfony-messenger\/#webpage"},"author":{"@id":"https:\/\/www.evertop.pl\/#\/schema\/person\/7fa9c3dddc7eabfad26b496cb9a97628"},"headline":"How To Use RabbitMQ With Symfony Messenger","datePublished":"2020-05-13T08:15:34+00:00","dateModified":"2020-10-23T19:00:46+00:00","mainEntityOfPage":{"@id":"https:\/\/www.evertop.pl\/no\/how-to-use-rabbitmq-with-symfony-messenger\/#webpage"},"wordCount":458,"publisher":{"@id":"https:\/\/www.evertop.pl\/#organization"},"image":{"@id":"https:\/\/www.evertop.pl\/no\/how-to-use-rabbitmq-with-symfony-messenger\/#primaryimage"},"thumbnailUrl":"http:\/\/web.evertop.pl\/wp-content\/uploads\/2020\/09\/1_-AWcL31h8iFkQY-hmrbMmw-1024x382-1.jpeg","keywords":["php","programming tips","queue"],"articleSection":["Blog"],"inLanguage":"nb-NO"},{"@type":"Person","@id":"https:\/\/www.evertop.pl\/#\/schema\/person\/7fa9c3dddc7eabfad26b496cb9a97628","name":"lpabian","image":{"@type":"ImageObject","@id":"https:\/\/www.evertop.pl\/#personlogo","inLanguage":"nb-NO","url":"https:\/\/secure.gravatar.com\/avatar\/330a0a7408b1711d2acb1b0cb39b7e2d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/330a0a7408b1711d2acb1b0cb39b7e2d?s=96&d=mm&r=g","caption":"lpabian"},"sameAs":["http:\/\/web.evertop.pl"],"url":"https:\/\/www.evertop.pl\/no\/author\/lpabian\/"}]}},"_links":{"self":[{"href":"https:\/\/www.evertop.pl\/no\/wp-json\/wp\/v2\/posts\/1865"}],"collection":[{"href":"https:\/\/www.evertop.pl\/no\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.evertop.pl\/no\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.evertop.pl\/no\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.evertop.pl\/no\/wp-json\/wp\/v2\/comments?post=1865"}],"version-history":[{"count":1,"href":"https:\/\/www.evertop.pl\/no\/wp-json\/wp\/v2\/posts\/1865\/revisions"}],"predecessor-version":[{"id":1956,"href":"https:\/\/www.evertop.pl\/no\/wp-json\/wp\/v2\/posts\/1865\/revisions\/1956"}],"wp:attachment":[{"href":"https:\/\/www.evertop.pl\/no\/wp-json\/wp\/v2\/media?parent=1865"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.evertop.pl\/no\/wp-json\/wp\/v2\/categories?post=1865"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.evertop.pl\/no\/wp-json\/wp\/v2\/tags?post=1865"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}