Hello, I'm relatively new to the ActiveMQ community, but I've been watching this list for the last little while and would like to propose some rework to the NMS.AMQP API.
I'm interested in any feedback you folks may have. Thanks in advance! NMS.AMQP REWORK PROPOSAL Abstract A pure .NET implementation of NMS[1] using the AMQP .NET Lite API[2]. Proposal This proposal is to rework the ActiveMQ NMS.AMQP codebase in order to achieve: 1. A pure .NET implementation of the NMS API using the AMQP 1.0[3] wireline protocol as a transport. To do this, the AMQP .NET Lite API will be used. 2. Interoperability with other APIs following the AMQP JMS Mapping Specification[4], namely Qpid JMS[5]. 3. Interoperability via AMQP 1.0 brokers such as ActiveMQ[6], the Qpid C++ broker[7], and the Qpid broker for Java[8]. While we would be open to alternate approaches, we propose starting work on a development branch within the ActiveMQ NMS.AMQP repository[9], then replace the contents of the trunk with the branch when the branch has reached an appropriate level of maturity. There are two major components changing: 1. The underlying transport API providing AMQP capabilities. 2. The mapping between the NMS API and the underlying AMQP API. Therefore, there is little of the existing implementation that could be reused. Hence the proposal is replace the implementation rather than refactor it. Background AMQP 1.0[3] is a standard wireline protocol. There are already open source APIs that expose native AMQP 1.0 concepts directly: 1. Apache Qpid Proton[10], which is available for a number of different languages. 2. AMQP .Net Lite[2], which is a pure .NET API implementation. AMQP .Net Lite is not an Apache project, but it is licensed under the Apache 2.0 license. There are also open source APIs that implement other messaging APIs, and map the APIs concepts to the AMQP 1.0 protocol. Examples of such APIs are: 1. Apache Qpid JMS[5], a JMS implementation that follows the AMQP JMS Mapping Specification[4]. 2. The existing Apache ActiveMQ NMS.AMQP[9], an NMS implementation using .NET-wrapped native code, and using a different API to protocol mapping than Qpid JMS. Rationale AMQP 1.0[3] is an attractive technology choice for deploying middleware solutions. As a standardized protocol, it offers operational flexibility for middleware solutions. For example, if it is desired change the AMQP 1.0 provider, this is much more readily achieved with minimal impact to applications compared to changing a provider when applications use a vendor-specific API and/or protocol. Many software architects and developers are familiar with topic and queue based messaging. The prevalence of Message Oriented Middleware offerings such as IBM MQ, Amazon Simple Queue Service, and JMS demonstrate this. In addition, .NET is a very popular software framework. However, AMQP 1.0 is a relative newcomer to the middleware marketspace. A vibrant ecosystem of open source APIs is seen as a vital component to the future success of the technology. Therefore, an NMS API using AMQP 1.0 is an important piece of the AMQP 1.0 ecosystem. Implementing pure .NET libraries will make it easier to deploy solutions. By using a standardized API to protocol mapping, greater interoperability will be achieved. Overall, this project seeks to make AMQP 1.0 more accessible to architects and developers. This API complements rather than competes with APIs such as Qpid Proton and AMQP .NET Lite, both excellent options for those wishing to embrace AMQP 1.0 messaging paradigm directly. External Dependencies There are two external dependencies for this project: 1. NMS[1], an Apache project. 2. AMQP .NET Lite[2], an open source project licensed under the Apache 2.0 license. Since both dependencies use an Apache license, there are no issues with respect to the licensing of the project's dependencies. References [1] Apache ActiveMQ NMS API: http://activemq.apache.org/nms/ [2] AMQP .NET Lite API: https://github.com/Azure/amqpnetlite/ [3] AMQP Version 1.0: http://docs.oasis-open.org/amqp/core/v1.0/amqp-core-complete-v1.0.pdf [4] AMQP JMS Mapping Version 1.0: https://www.oasis-open.org/committees/download.php/56418/ [5] Apache Qpid JMS: https://qpid.apache.org/components/jms/ [6] Apache ActiveMQ: http://activemq.apache.org/ [7] Apache Qpid C++ Broker: http://qpid.apache.org/components/cpp-broker/index.html [8] Apache Qpid Broker for Java: http://qpid.apache.org/components/java-broker/index.html [9] Existing Apache NMS.AMQP Repository: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.AMQP/ [10] Apache Qpid Proton: http://qpid.apache.org/proton/ Cheers, Duane