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

Reply via email to