Queue Service has been updated to version 2.1 which allows searching of queues, recovery of any queue, ability to move messages, increased security.
Release Notes
Summary of Features
Increased management of queues which includes: queue searching for unprocessed, in-process or processed records, ability to move messages to other queues, recover in-process messages in any queue
Increased logging of queue activity: QueueLog now saves all parameters used to process a given item and they are searchable. QueueLog can show the life cycle of an item and split based on message iteration. All queue command execution is logged to QueueLog for auditing
All queues can be recovered. In Queuing 2.0 items that originated only from ObjectQueue could be recovered
Increased security: All actions on Queue.ashx are controlled by system functions
Processing views show items processing for all queues
UI Improvements: Queue.ashx will now automatically refresh relevant panels when taking manual actions
Performance enhancements for queue count checks (applicable to ServiceBroker and ObjectQueue)
Simplified, condensed logging: RetryQueue removed and mapped to FailureQueue. System/Debug logging now occurs without enabling DebugLog for traceability
QueueLog Purge/Expiration custom statement
Bug Fixes (see below)
Searching Explained
Queue messages have been extended to contain:
ParentMessageID - this is established at message inception and is carried through a message as it is processed throughout queues (assuming item is scheduled or reprocessed)
Iteration - represents lifecycle of a message withing a given queue. For example. If a scheduled message enters the ObjectQueue first, the entire process (and logging) through ObjectQueue would be represented as Iteration 1 and when the message is submitted to the target queue (E.g. DefaultQueue) Iteration would be incremented to 2.
Ability to search queued messages. Clicking on "Count" will display the queued items in the "Queued" tab below the summary tab. Queued Messages can be searched by: Attributes, Label, ClassName (Object), Operation, ObjectID, Queued User, ExecuteCount and QueuedDate. This allows searching and locating queued messages that users can take actions on (future queue, move, delete)
Ability to search in-process messages. Clicking on "Processing " under a queue will refresh the "Processing" panel. Items can be removed or recovered with the ability the future date if desired
Ability to track a queued item throughout it's lifecycle. Clicking on the search icon within a message label will pop up a history panel that shows all message activity which can then be filtered as desired. This is a single view of an item to show exact audit trail.
Processed queue item searching has been extended to search by Parameters. This allows for increased searching and better reconciliation since multiple calls to the same operation can now be distinguished based on parameters
Changes to CurrentQueue will now save to ConfigurationEntry instead of Queuing.config
Security failure for requeuing/rescheduling items due to queue caching fixed
QueueLog now contains a Purge statement that purges QueueLog records with the following algorithm:
Any QueueLog record with an expiration date. Expiration date is set for all non-scheduled queued item which are logged. Expiration date can be adjusted by qbo.Application.Properties.Settings.Default.QueueLogExpirationInDays and defaults to 14 days
Any scheduled items with an occurrence of more than 100 records. For example, for a scheduled item such as a data listener which runs every 15 minutes, records will be saved to QueueLog based on ParentMessageID. The purge statement will purge any records that are older than the most recent 100 occurances for a given ParentMessageID. This setting can be adjusted by setting the parameter "ScheduledOccurances" in QueueLog Purge statement.
Steps to update to version 2.1:
Ensure Steps to update to version 2.0 have been met.
Get latest from trunk:
Qbo.Application/qbo.ApplicationWeb
Qbo.Logging/qbo.LoggingWeb
Plugins:
Qbo.Queue.ObjectQueue
Qbo.Queue.MSSQL
/qbo v3/Installation/qbo.QueueService.2.10.msi
V2 – qbo.Application.Database/Tables:
ObjectQueue.sql
QueueLog.sql
QueueLog.indexes.sql
ObjectQueue.Indexes.sql
Ensure Queue Service is stopped
Backup
QueueService.exe.config
/Config/Queuing.config
/Config/QueueLog.config
Web.config
Remove qbo.Queue.MSMQ.dll from any bin folders
Run table update / index scripts - ensure they run successfully
Build and deploy all projects
web.config – add categorySource ‘QueueLog’
Queuing.config
Save current queuing.config to alternate location
use Queuing.config in ApplicationWeb
Log into site and cycle web.config
Navigate to /Application/ServiceBroker.ashx/ToggleRetention. This will toggle all user created ServiceBroker queues to enable message retention.
Ensure that SystemRole 'Public' with permission 'QueueLogInsert', 'HolidaySearch', 'ScheduleSelect', 'HolidayInstanceSearch', 'ConfigurationEntryUpdate' granted
Uninstall Queue Service
Install qbo.QueueService.2.10.msi
Replace QueueService.exe.config with backup version
Run Test Scripts from browser
Application – Queue Testing - All steps must pass to use this build. Note in some testing the DB Server time and Web Server time had to be manually synchronized for script to succeed:
Control Panel->Set the time and date->Internet Time->Change Settings->Update Now
Any additional test scripts you desire
Start Queue Service
Manually queue an item for immediate processing
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:
ServiceBroker message retention has not been enabled
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