Queue Service has been updated to version 2.0 which increases robustness,
redundancy and ease of configuration.
- Queues now use Schedules from the
Schedule module to determine execution time. They only use “Continuous”
schedules as these are based on a time range. Daily Continuous schedules are
most common but weekly and monthly schedules are supported as well.
- Queuing.config and any other
qbo.Config entries that inherit from DbConfigurationElementCollection (eg.
DBStatement) now utilize SqlDependency. This allows for automatic configuration
change propagation to all subscribing application. For example, if the
application has 1 web server and 2 application servers, the Queuing settings
can be modified from the web server and the changes will automatically
propagate the application servers.
- Queue Service can be installed in
a redundant scenario (multiple app servers monitoring the same queues).
ObjectQueue.PopItem is now thread safe so the number of threads can be
increased to 5 (total across all app servers). See Greg for setup.
- Addition of StagedQueue. Staged
Queue is a view into ObjectQueue that shows any queue item that originated from
ObjectQueue (Eg. CurrentQueue) and has been added to the target queue store but
has not started processed .
- Addition of ProcessingQueue.
ProcessingQueue is a view into ObjectQueue that shows any staged item that is
currently processing. Since it’s currently processing, the item is not viewable in the target queue
as it’s in memory.
- Queue Recovery
- Recover All – From Queue Summary
recovery can be executed based on a date range. The recovery observes all items
in the ProcessingQueue (based on date range) and will release records back to
ObjectQueue so they can be processed again.
- Recovery Individual – Can be
executed on individual records in staged and processing queue. A check will be
made to ensure item does not exist in target queue.
- Queue Management – Additional
“safe-guard” logic has been implemented:
- Queue must be stopped to be Purged
- Queue must be empty and stopped to
- Queue Removal will now remove the
underlying queue store
- Errors raised from Queuing.ashx
will show as alerts for ease of use
- Now tracks what machine name and
application name processed item
- Filters (‘Success’, ‘Failure’,
‘Debug’, etc.) now functional when accessing QueueLog
- Schedule module now has a working
UI to create, modify and test schedules. The schedule module can now calculate
next run date which includes observing the Calendar associated with a schedule.
Steps to Update to Current Version:
- Ensure ServiceBroker is functional
on application’s target database
- Get latest from trunk:
- /qbo v3/Installation/qbo.QueueService.2.00.msi
- V2 –
- Ensure Queue Service is stopped
- All config files - optional
- Run table update scripts
- Build and deploy all projects
- web.config – add categorySource
- Save current queuing.config to
- use Queuing.config in ApplicationWeb
- Log into site and cycle web.config
- Ensure that Schedule, Calendar, Holiday are implemented in Entity view
- Navigate to
/Application/Queue.ashx/Setup. This should seed Schedule table with default
Queue Schedule in new Queuing.config
- Ensure that SystemRole 'Public' with permission 'QueueLogInsert', 'HolidaySearch', 'ScheduleSelect', 'HolidayInstanceSearch' granted. Ensure that ObjectQueue* (except ObjectQueueSearch) is granted to all roles.
- Manually add custom queues via
- Manually update ObjectQueues with
custom settings using Queue.ashx
- Note that all customization (eg.
New queues or updates to system queues) should be represented in the
- Uninstall Queue Service
- Install qbo.QueueService.2.00.msi
- Replace QueueService.exe.config
with backup version
- Run Test Scripts from browser
- Application – Queuing
- Application – Schedule
- Application – Sql Pattern
- Any additional test scripts you
- Start Queue Service
- Manually queue an item for
Upon starting the Queue Service refresh the Queue list from Queue.ashx. If you observe any "Paused" queues this indicates a problem. Inspect (Edit) each queue individually and observe the settings. Common issues to look for are:
- No schedule specified
- Queue is set to ExecuteAs "AdminUser" and no Admin Person is specified and/or account is inactive or locked out
- Queue threshold was set to x and there were x consecutive processing errors