diff --git a/assets/images/blog/private-message-queue.png b/assets/images/blog/private-message-queue.png
new file mode 100644
index 00000000..815af133
Binary files /dev/null and b/assets/images/blog/private-message-queue.png differ
diff --git a/source/_layouts/post.html.twig b/source/_layouts/post.html.twig
index 4e311670..71228e57 100644
--- a/source/_layouts/post.html.twig
+++ b/source/_layouts/post.html.twig
@@ -24,7 +24,10 @@
{% include 'post/header' %}
{% include 'post/intro-image' %}
- {% block content %}{% endblock %}
+
+ {% block excerpt %}{% endblock %}
+ {% block content %}{% endblock %}
+
{% include 'post/twitter-link' %}
{% include 'post/tags' %}
diff --git a/source/_posts/2018-02-27-queuing-private-messages-in-drupal-8.md b/source/_posts/2018-02-27-queuing-private-messages-in-drupal-8.md
new file mode 100644
index 00000000..c9cdbe6f
--- /dev/null
+++ b/source/_posts/2018-02-27-queuing-private-messages-in-drupal-8.md
@@ -0,0 +1,69 @@
+---
+title: Queuing Private Messages in Drupal 8
+tags:
+ - drupal
+ - drupal-8
+ - drupal-modules
+ - drupal-planet
+ - open-source
+meta:
+ og:
+ title: Queuing Private Messages in Drupal 8
+ description: How to queue private messages in Drupal 8 with the Private Message Queue module.
+ type: website
+---
+{% block excerpt %}
+My current project at [Microserve][0] is a Drupal 8 website that uses the [Private Message][1] module for users to send messages to each other.
+
+In some cases though, the threads could contain hundreds of recipients so I decided that it would be good to queue the message requests so that they can be processed as part of a background process for better performance. The Private Message module does not include this, so I've written and released a separate [Private Message Queue][2] module.
+{% endblock %}
+
+{% block content %}
+## Queuing a Message
+
+The module provices a `PrivateMessageQueuer` service (`private_message_queue.queuer`) which queues the items via the `queue()` method.
+
+The method accepts an array of `User` objects as the messsage recipients, the message body text and another user as the message owner. (I’m currently considering [whether to make the owner optional][4], and default to the current user if one is not specified)
+
+Here is an example:
+
+```php
+$recipients = $this->getRecipients(); // An array of User objects.
+$message = 'Some message text';
+$owner = \Drupal::currentUser();
+
+$queuer = \Drupal::service('private_message_queue.queuer');
+$queuer->queue($recipients, $message, $owner);
+```
+
+These three pieces of data are then saved as part of the queued item. You can see these by checking the "queue" table in the database or by running `drush queue-list`.
+
+![](/assets/images/blog/private-message-queue.png)
+
+```
+$ drush queue-list
+Queue Items Class
+private_message_queue 19 Drupal\Core\Queue\DatabaseQueue
+```
+
+## Processing the Queue
+
+The module also provides a `PrivateMessageQueue` queue worker, which processes the queued items. For each item, it creates a new private message setting the owner and the message body.
+
+It uses the `PrivateMessageThread` class from the Private Message module to find for an existing thread for the specified recipients, or creates a new thread if one isn't found. The new message is then added to the thread.
+
+The queue is processed on each cron run, so I recommend adding a module like [Ultimate Cron][3] so that you can process the queued items frequently (e.g. every 15 minutes) and run the heavier tasks like checking for updates etc less frequently (e.g. once a day).
+
+You can also process the queue manually with Drush using the `drush queue-run ` command - e.g. `drush queue-run private_message_queue`.
+
+```
+$ drush queue-run private_message_queue
+Processed 19 items from the private_message_queue queue in 3.34 sec.
+```
+{% endblock %}
+
+[0]: https://microserve.io
+[1]: https://www.drupal.org/project/private_message
+[2]: https://www.drupal.org/project/private_message_queue
+[3]: https://www.drupal.org/project/ultimate_cron
+[4]: https://www.drupal.org/project/private_message_queue/issues/2948233