You can actually send management messages in via NMS/JMS, so again not so sure we need to be maintaining two clients here. I would expect if something to do some extra bits, via management address, to make some kind of management client, that a wrapper over the NMS could be done there. Again an i re-iterate, i would encourage contribution to extend the NMS client where needed here, not divergence. On a separate note, re just adding docs pointing to your project, which is a not an ASF sister project, I think we want to be careful going down that route too much, as an Apache project it gets us into some murky waters, i don't think we need or want to go down. e.g. we then open ourselves to having to accept every request to link to a client project, to keep things fair, and then further what about propriety clients, that would end up in a very odd position, im not sure where we even stand, with an Apache ASF project essentially promoting a NON open source tool, should someone then insist we promote theirs too. If you look at Kafka eco system, it provides very few clients, but in actual fact it is well known there are clients in nearly all languages, many/most actually developed outside the Apache Kafka project, and even in some cases for the same language there are a couple of clients on offer. But the Apache Kafka project does not list or promote those. Best M On 5 February 2021 at 10:44, Havret <h4v...@gmail.com> wrote: Hi Mike, thanks for the feedback, I totally get it. My main inspiration in this regard was RabbitMQ .NET Client, which of course works on AMQP 0.9.1 and (AMQP 1.0), but actually uses a proprietary protocol build on top of the mentioned (the same as ActiveMQ Artemis). Theoretically one could use NMS to talk to RabbitMQ but nobody does that. At least in the .NET world. This library is not to replace NMS.AMQP, it just to give the devs a simpler alternative. It is something between AmqpNetLite which is too low level and NMS.AMQP which is too overengineered (and constrained with many JMS-specific requirements), has a really high learning curve and requires additional tooling (spring container) just to start using it. I asked my initial question because I was looking for ActiveMQ Artemis counterpart of this page https://www.rabbitmq.com/devtools.html I didn't find one, so I asked. On Fri, Feb 5, 2021 at 10:37 AM Michael André Pearce <michael.andre.pea...@icloud.com.invalid> wrote: My points on this is two parts: 1) This only works for Artemis if this was the case, i would have expected an "Artemis" specific client to work on the CORE protocol level. 2) The point of NMS is its an API, and actually the NMS AMQP client has tested compatibility with ActiveMQ Classic, ActiveMQ Artemis, Solace, and because its agnostic should work with any other AMQP broker, thats working like with QPID clients. The main short coming of NMS atm is lack of task async api, and thats been acknowledged, but this is being added with the NMS 2.0 work, thats in progress as you know thats in PR. Obviously there's nothing stopping you continuing to maintain the client externally as its own project. For these reasons im personally not keen on supporting this/bringing this under the Apache ActiveMQ sub banner, i dont have the time, id rather if people feel something is missing in existing solutions, that they contribute there. On 4 February 2021 at 20:38, Havret <h4v...@gmail.com> wrote: Hi Justin, You made an excellent point. I will try to answer as thoroughly as I can. AmqpNetLite is a .NET implementation of AMQP 1.0 protocol. It gives you full control and all the building blocks you may need to communicate using AMQP 1.0. Unfortunately, to use it properly, you need to write quite a lot of tedious boilerplate code. For instance, in order to create a connection, you would need to write sth along these lines: https://github.com/Havret/dotnet-activemq-artemis-client/blob/0c7a165c77744ff1d0042511e6d5afc44a3e38e2/src/ActiveMQ.Artemis.Client/Builders/ConnectionBuilder.cs#L10-L53 The same rule applies to other resources like producers, consumers, sessions, etc. Having all this implemented one would only utilize the most basic features of ActiveMQ Artemis. There is however a good chunk of functionalities that require subtle knowledge specific to ActiveMQ Artemis implementation built on top of this protocol. For example things like scheduled message delivery, scheduled delivery delay, message selectors, attaching to address/queue based on routing type, fully qualified queue names, just to name a few. All these bits are not part of the original protocol and are proprietary to this specific implementation. My library packs all these scraps of knowledge into a simple strongly typed SDK, that can be used by any developer without the knowledge that to define a message selector on your consumer you need to add to FilterSet property of Source frame described value apache.org: selector-filter:string=0x0000468C00000004L. Besides that, it adds things that are not included in the raw AmqpNetLite by design but are pretty useful in real-life situations, like automatic recovery. The thing that I personally (and my fellow .NET developers :)) missed the most after switching from RabbitMQ to ActiveMQ Artemis is the topology management functionality built right into the client. In RabbitMQ .NET client, this is a first-class citizen, and there are extremely popular frameworks like NServiceBus and MassTransit that make heavy use of it. JMS/NMS 2.0 features like durable subscriptions try to compensate for the lack of this functionality to some extent, but unfortunately are far too limited. So this is the other thing that this library introduces, and that was welcomed with great enthusiasm when I showed it to my colleagues. As the lib doesn't implement nms/jms it is much simpler. You don't need a spring container, caching connection factories, single connection factories, etc, and the knowledge of how to configure and use them. You just need to create your producers and consumers and you're ready to go. Everything is thread-safe, so you don't need to worry about creating explicit memory barriers, etc. I started this library as a playground for experimentations while implementing nms-amqp, but in time it evolved into sth else. My current goal is to create a simple well-documented library that will make the adaptation of ActiveMQ Artemis as simple and non-intrusive as possible. I hope my reply is not too chaotic and answers your question at least to some extent. All the best, Krzysztof On Thu, Feb 4, 2021 at 3:14 AM Justin Bertram <jbert...@apache.org> wrote: The docs [1] indicate that the client is "a very lightweight wrapper around AmqpNetLite." If that is the case why is it advertised as the "ActiveMQ Artemis Client for .NET"? Couldn't it be used for *any* AMQP 1.0 use-case? How is it different from AmqpNetLite? What specifically does the wrapper provide? Generally speaking, one of the nice things about implementing standardized protocols in the broker is that anybody can implement clients and those clients exist completely independent of the broker. There are *lots* of clients for STOMP, AMQP, and MQTT written in lots of different languages for all kinds of different platforms. If we cited your client in the documentation then someone could logically ask why we don't also cite client X in the documentation as well. Clients come and go over time and in my opinion it would kind of be a drag to develop and maintain a list of these clients. Justin [1] https://havret.github.io/dotnet-activemq-artemis-client/ On Wed, Feb 3, 2021 at 3:21 PM Havret <h4v...@gmail.com> wrote:
Hi Guys,
I have been working for over a year now on unofficial ActiveMQ Artemis
Client for .NET, and a set of extension libraries that make its
integration
with .ASP.NET <http://asp.net/> Core projects as seamless as possible.
Recently I have written an article describing how to use it on my blog.
Do
you think there is any space in Artemis docs to include it, so it would
be
easier for .NET folks who are thinking about using Artemis to find it?
I've reached Clebert in the first place, and he suggested sharing this
here.
I am sending you links so you could check it out:
article: https://havret.io/activemq-artemis-net-core
repository: https://github.com/Havret/dotnet-activemq-artemis-client
extensions: https://github.com/Havret/activemq-artemis-extensions
docs: https://havret.github.io/dotnet-activemq-artemis-client/
Thanks,
Krzysztof