You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@qpid.apache.org by Timothy Bish <ta...@gmail.com> on 2022/04/06 21:49:06 UTC

An Imperative API AMQP client for .NET written in C#

Hi everyone, some time ago Justin Ross introduced the idea of an 
imperative messaging API that could be implemented in various languages 
and live alongside our existing AMQP clients like Qpid JMS and the 
various Proton-based reactive style clients that we offer.

The goals of the imperative API are to allow for development of clients 
that utilize modern language features to offer a mixture of asynchronous 
programming with options for blocking as needed within the application.  
These new clients would be client only implementations no server 
functionality is offered.

The Imperative API spec as previously introduced resides here:
http://www.ssorj.net/pumpjack/client/index.html 
<http://www.ssorj.net/pumpjack/client/index.html>

The previous mailing list thread introducing the imperative API can be 
found here:
http://mail-archives.apache.org/mod_mbox/qpid-users/202001.mbox/%3CCANVjZ_R31Hw4r9tWq6rDWNR6i-bJeyM9jKNbkRcWWOkbw%3DwBeA%40mail.gmail.com%3E 
<http://mail-archives.apache.org/mod_mbox/qpid-users/202001.mbox/%3CCANVjZ_R31Hw4r9tWq6rDWNR6i-bJeyM9jKNbkRcWWOkbw%3DwBeA%40mail.gmail.com%3E>

Here I am introducing an initial .NET-based implementation of the 
proposal imperative API written in C# that uses .NET Tasks to back the 
asynchronous APIs allowing for blocking if needed but also for pipelined 
operation when desired.

Within this implementation I’ve provided support for things like the 
asynchronous sends and disposition tracking defined in the imperative 
API presently as well as support for transactions and large message 
streamed send and receive.  The client also implements reconnection and 
has a basic but working SSL layer for secure connections.

As a reminder, the imperative API and this .NET implementation remain 
subject to change.  We want to gather feedback from the community and 
make any important API changes that are called for.

The .NET client code is currently located here for review:
https://github.com/tabish121/Proton.NET 
<https://github.com/tabish121/protonj2>

A set of examples has been provided which should help in reviewing the 
basics of the new imperative API client, these are all located here:
https://github.com/tabish121/Proton.NET/tree/main/examples 
<https://github.com/tabish121/protonj2/tree/master/protonj2-client-examples/src/main/java/org/apache/qpid/protonj2/client/examples>

The client is implemented atop an AMQP protocol engine that is 
implemented in a similar reactive or event based model as the existing 
protonj2 engine.

-- 
Tim Bish