Home

Awesome

Apache-NMS-AMQP

Build Status

OSStatus
LinuxBuild Status
WindowsBuild status

Installing Apache NMS AMQP

You can install Apache NMS AMQP with NuGet:

Install-Package Apache.NMS.AMQP

Or via the .NET Core command line interface:

dotnet add package Apache.NMS.AMQP

Either commands, from Package Manager Console or .NET Core CLI, will download and install Apache NMS AMQP and all required dependencies.

Overview

The goal of this project is to combine the .NET Message Service API (NMS) with the Advanced Message Queuing Protocol (AMQP) 1.0 standard wireline protocol. Historically, the Apache community created the NMS API which provided a vendor agnostic .NET interface to a variety of messaging systems. The NMS API gives the flexibility to write .NET applications in C#, VB or any other .NET language, all while using a single API to connect to any number of messaging providers. The Advanced Message Queuing Protocol (AMQP) is an open and standardized internet protocol for reliably passing messages between applications or organizations. Before AMQP became a standard, organizations used proprietary wireline protocols to connect their systems which lead to vendor lock-in and integration problems when integrating with external organizations.

The key to enabling vendor independence and mass adoption of technology is to combine open source APIs and standard wireline protocols which is precisely what this project is all about. Here's how AMQP 1.0 support within NMS helps the .NET community:

If you are a .NET developer that doesn't want to be locked into a messaging implementation then get engaged with this project. Here you will find the open source code base and please provide comments and make your own enhancements. The project will be folded into the Apache community once fully mature.

AMQP1.0 Protocol Engine AmqpNetLite

Apache-NMS-AMQP uses AmqpNetLite as the underlying AMQP 1.0 transport Protocol engine.

Overall Architecture

Apache-NMS-AMQP should bridge the familiar NMS concepts to AMQP protocol concepts as described in the document amqp-bindmap-jms-v1.0-wd09.pdf. So in general most of the top level classes that implement the Apache.NMS interface Connection, Session, MessageProducer, etc create, manage, and destroy the amqpnetlite equivalent object Connection, Session, Link, etc.

Getting started

Amqp Provider NMS Feature Support

FeatureSupportedComments
TLS/SSLYConfiguration is supported using transport properties.
Client Certificate AuthenticationYConfiguration is supported using transport properties.
Transactions (AcknowledgementMode.Transactional)Y
Distributed Transactions (INetTxConnectionFactory, INetTxConnection, INetTxSession)N
AcknowledgementMode.AutoAcknowledgeY
AcknowledgementMode.DupsOkAcknowledgeY
AcknowledgementMode.ClientAcknowledgeY
AcknowledgementMode.IndividualAcknowledgeY
IObjectMessageY *Amqp value object bodies and dotnet serializable object bodies are supported.
IBytesMessageY
IStreamMessageY
IMapMessageY
ITextMessageY
IMessageY
IConnectionFactoryY
IConnectionYThe ConnectionInterruptedListener event and the ConnectionResumedListener are not supported.
ProducerTransformerDelegateNAny member access should throw a NotSupportedException.
ConsumerTransformerDelegateNAny member access should throw a NotSupportedException.
ISessionY
[ INMSContextY
IQueueY
ITopicY
ITemporaryQueueY
ITemporaryTopicY
IMessageProducerY *Anonymous producers are only supported on connections with the ANONYMOUS-RELAY capability.
INMSProducerY
MsgDeliveryMode.PersistentYProducers will block on send until an outcome is received or will timeout after waiting the RequestTimeout timespan amount. Exceptions may be throw depending on the outcome or if the producer times out.
MsgDeliveryMode.NonPersistentYProducers will not block on send nor expect to receive an outcome. Should an exception be raised from the outcome the exception will be delivered using the the connection ExceptionListener.
IMessageConsumerY
INMSConsumerY
Durable ConsumersY
Shared ConsumersY
IQueueBrowserY
Configurable NMSMessageID and amqp serializtionNFor future consideration. The prodiver will generate a MessageID from a sequence and serialize it as a string.
Flow control configurationYYou can configure link credit. Default value is 1000. See prefetchPolicy in Configuration.
Object Deserialization PolicyNFor future consideration. The provider considers all Dotnet serialized objects in Object Message bodies are safe to deserialize.
FailoverY

Licensing

This software is licensed under the terms you may find in the file named "LICENSE" in this directory.