Message Queueing

posted Sep 12, 2011, 6:37 AM by Eric Patrick   [ updated Apr 10, 2013, 9:49 AM ]
QBO 3 abstracts the notion of message queuing to enable use of EventQueue, MSMQ, SQL Service Broker, or Amazon's SQS.

Use Case: Event Queue

QBO 2.0 relies heavily on the use of the Event and EventQueue tables for asynchronous processing.  QBO 3 will continue to support this infrastructure.

Use Case: MSMQ (Direct) for Attachment Generation

When generating Attachments, QBO 3 will enable offloading the processing to multiple application machines. The mechanism will be to queue an attachment generation request directly to a MSMQ, which is in turn monitored by a WCF instance that knows how to generate the requested attachment. This implies one or more distinct queues for each attachment plugin, such as:
  • Aspose Word Generator: 3 queues
  • Google Map Generator: 1 queue
  • XHTML Generator: 1 queue
  • HTML to PDF Generator: 2 queues
The following of communications for generation of a Word document via Aspose might be:
  • A web component calls qbo.Attachment.Invoke('Generate', {parameters}), which
  • Creates a MSMQ in the Aspose Word Generator queue, logging that fact to a queuing logging sink
  • The MSMQ is read by the Aspose plugin WCF, logging that fact to a queuing logging sink
  • The Aspose plugin generates the document, logging that fact to a queuing logging sink
  • The Aspose plugin WCF removes the message from the MSMQ, logging that fact to a queuing logging sink
In this scenario, there is no use made of the EventQueue table. However, the use of a logging sink enables more detail tracking that currently allowed by the EventQueue table. For example, a logging sink might be:
  • The QBO Message table, binding each log entry to a message bound to the attachment
  • Amazon Simple DB, with the QBO UI providing a popup window view on the messages associated with an Object/ID
  • A local file system
  • A customized table / database designed precisely for such logging

Use Case: Amazon Simple Queuing Services (SQS)

When calling QDS for build-in functionality like geo-coding or credit reporting, QBO 3 will enable offloading the processing to external parties, such as Quandis Data Services (QDS). The mechanism will follow MSMQ, but leveraging the cross-network convenience of Amazon SQS.

Use Case: SQL Service Broker

SQL Service Broker offers an alternative to MSMQ, with the distinct advantage of being accessible for TSQL reporting and insertion. However, it may not be available during backups or heavy SQL usage. We shall create an IQueue instance of SQL Service Broker should a use case for it arise, possibly including:


QBO 3 will include automatic configuration of queues, as well as a dashboard to quickly display the status of each queue participating in the installation's processing.  The dashboard will include key information such as:
  • Queue: name of the queue
  • Type: plugin used to communicate with the queue (MSMQ, Amazon SQS, etc.)
  • Monitored From: 1 or more machines monitoring the queue
  • Monitored By: plugin being used to monitor the queue
  • Messages in Queue: number of messages currently in the queue
  • Last Processed: age of the last message processed
  • Processing Rate: rate at which messages are being processed
  • Average Age: of items in queue
  • Check endpoints
  • Schema Validation
  • Max message size?
See the attached spreadsheet as an example.

Functionality provided by this dashboard will include:
  • Start, Stop and Restart the machine/plugin (WCF endpoint) being used to monitor a queue
  • Add a machine/plugin (WCF endpoint) to monitoring a queue
  • Prioritize queues that share a common machine/plugin (WCF endpoint)


  • Intra-system: Object/ID
  • All: method, dictionary
  • Extra-system: XML Payload


  • Restart functionality: does it become obsolete?
  • Heartbeat infrastructure?
  • Is batching involved?

Eric Patrick,
Sep 12, 2011, 7:43 AM