Stephane Ramet created AMQNET-554:
-------------------------------------
Summary: Added support for message queue properties and Selectors
in Apache.NMS.MSMQ
Key: AMQNET-554
URL: https://issues.apache.org/jira/browse/AMQNET-554
Project: ActiveMQ .Net
Issue Type: New Feature
Components: MSMQ
Affects Versions: 1.8.0
Reporter: Stephane Ramet
Assignee: Jim Gomes
Priority: Minor
The proposed package implements the following enhancements :
1. Support for communication of message properties between compatible peers
The DefaultMessageConverter has been enhanced, so as to marshall custom message
properties in the MSMQ Message.Extension field, along with the NMSCorrelationID
which was already marshalled in this field.
An additional flag specifies whether the MSMQ Message.Label field should be
populated with the NMSType (as currently - default value) or with the value of
a message property called "Label".
2. Support for selectors
A parser for selection strings has been introduced.
It is based on the Apache.ActiveMQ V4 implementation, ported from Java to C#.
MessageReaders have been developped, that support various types of filtering:
- no filtering when no selector strings are specified.
- filtering based on the Id (NMSMessageID), CorrelationId (NMSCorrelationID) or
LookupId properties.
- filtering based on any other valid selection string.
MessageReaders have been introduced in MessageConsumers and QueueBrowsers.
The generic filtering system, based on a selection string, has - at least - two
limitations:
- it cannot be fully included in the build chains: the source code is generated
from SelectorParser.csc (a port of ActiveMQ's SelectorParser.jj) by CSharpCC
(https://github.com/deveel/csharpcc, a port of JavaCC, now unmaintained). Due
to limitations and/or bugs in the CSharpCC (eg. support for namespace {}), the
generated code must be rectified manually. A port to another parser generator
(eg. ANTLR) would certainly be required.
- selection is performed by the client, by browsing through the messages in the
queue, via MessageQueue.GetMessageEnumerator2(), and retrieving only the
matching messages via MessageQueue.ReceiveByLookupId. When the queue gets very
long and the relevant messages are sparse, performance becomes an issue.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)