My understanding was that auto-creation of FQQN queues was always an
intention but was never implemented.  Enabling this in the AMQP (and other
protocols) *should* allow any JMS over AMQP clients to utilize this
feature.  There may be some details here in terms of order of
precedence when using topic/queue capabilities (as defined in the JMS AMQP
mapping) and what is specified in the FQQN, but could be implemented
relatively easily.

On Fri, Jan 10, 2020 at 10:47 PM Clebert Suconic <clebert.suco...@gmail.com>
wrote:

> Up until artemis 1.x we only had the concept of address-name / queue-name.
>
> We had to add a few hacks back then during 1.x on the server
> (specially on the JMS implementation) such as queues with forced-empty
> filters to ensure we hold the existence of the address. So, the new
> address model helped to eliminate these hacks. (Damn JMS.. as it
> requires certain semantics such as knowing when an "empty" address
> does not exist.. damn topics!)
>
> Other than that the address model I think it's pretty flexible. The
> routing type exists pretty much to differentiate empty addresses.
> Again.. damn JMS! as we require that kind of thing to satisfy topics.
>
> Martyn Taylor and Justin Bertram can speak more about that as they
> wrote the changes. I had extensive conversations with them at the
> time.. but they can speak more on that.
>
>
> On Fri, Jan 10, 2020 at 4:44 PM Krzysztof <h4v...@gmail.com> wrote:
> >
> > @Justin
> >
> > In my humble opinion the greatest power of JMS is also its greatest
> > weakness, and it's not the fact that its Java based. It's the
> > specification, that enforces some serious constraints like requirement of
> > serial execution of consumer callbacks inside the same session, ability
> to
> > "recover" session on the client, enforcing transactions on all link
> actions
> > (acks and sends) inside the same session, session based acknowledgment
> etc.
> > that doesn't add much value from the user perspective, and at the same
> time
> > seriously degrade the overall implementation and usability.
> >
> > I think that from Artemis perspective there is no concept of AMQP
> > flexibility. As you pointed out, AMQP doesn't "know" anything about
> routing
> > types, addresses, and queues (actually it does know sth about addresses
> ;)
> > But at the same time it doesn't know anything about topics, queues,
> shared
> > durable subscriptions, non shared durable subscriptions, and all that
> > either. You do not map AMQP concepts onto the Artemis addressing model.
> You
> > are mapping qpid-jms implementation to Artemis addressing model. As a
> > result Artemis amqp provider is so tightly coupled to jms, that if you do
> > not know the internals of qpid-jms amqp protocol you are forced to either
> > pre-configure all of your messaging topology upfront on the broker, and
> use
> > FQQN, or you can use only some rudimentary features of the addressing
> > model.
> >
> > I don't want to implement the core protocol because there is already a
> > great low level library AmqpNetLite (it is the counterpart of proton in
> > java world) that I am using as a base for my Artemis client. I don't want
> > to reinvent the wheel. But at the same time I don't want to adapt JMS
> > addressing model and concepts because it simply doesn't feel right to me.
> > It doesn't have to be so complicated.
> >
> > I was talking with developers from my company for the last 6 months and
> > collecting feedback regarding NMS.AMQP implementation (that I was working
> > on) and they were all complaining about the API. Most of the teams ended
> up
> > creating their own abstractions on top of it, just to hide the nms bits.
> > And they haven't even seen jms 2.0 spec. I think in java world it is
> quite
> > similar (that's why there are bits like JmsTemplate,
> > SimpleListenerContainers and the like.
> >
> > I don't want to impose anything. I just think that Artemis is a great
> piece
> > of technology and it is a shame that it's so dramatically unpopular in
> .net
> > world. It deserves better. But without a decent client it's hard to hope
> > for it.
> >
> > I don't want to shoehorn anything. I think the concept of FQQN provides a
> > nice loophole for everything I need, besides maybe some minor changes
> > (creating queues if they aren't created upfront, and basically that's
> it).
> >
> > On Fri, Jan 10, 2020 at 12:04 AM Justin Bertram <jbert...@apache.org>
> wrote:
> >
> > > This seems a little strange to me.
> > >
> > > The power of JMS is that it is broker agnostic. It's just an API of
> fairly
> > > generic messaging concepts for which any broker can implement a client.
> > >
> > > The weakness of JMS is that it is Java based. NMS, as I understand it,
> was
> > > meant to mitigate that weakness by porting the same basic API to .Net
> (and
> > > the same goes for CMS with C++). The goal was to have an API for which
> any
> > > broker could implement a client. Early implementations could talk to
> > > ActiveMQ (via the OpenWire protocol), Tibco EMS, and IBM WebSphereMQ.
> One
> > > implementation was even apparently built on Microsoft's MSMQ API.
> There was
> > > also a STOMP implementation and then later an AMQP one. The benefit of
> > > these two is that they used standard communication protocols and
> therefore
> > > could be used with any broker which supported that protocol. So, for
> > > example, a messaging application using NMS AMQP could talk to RabbitMQ,
> > > Apache Qpid, ActiveMQ 5.x, or ActiveMQ Artemis.
> > >
> > > You're taking a standard communication protocol (i.e. AMQP) and
> putting an
> > > API on top of it that mirrors the ActiveMQ Artemis address model. This
> > > ruins the flexibility that AMQP provides and marries client
> applications to
> > > a single broker. Furthermore, AMQP doesn't "know" about routing types,
> > > addresses, and queues. It has different concepts which we *map* onto
> the
> > > Artemis addressing model in the broker.
> > >
> > > The Artemis addressing model is low-level in order to be able to
> support
> > > all kinds of different protocols which each have their own
> > > similar-but-slightly-different models.
> > >
> > > Why don't you just implement the core protocol in .Net? It appears to
> me
> > > that if you use AMQP you're going to have to somehow shoehorn in
> Artemis
> > > addressing model concepts on the client and then interpret those on the
> > > broker. You are certainly free to implement the client the way you
> want,
> > > but I don't think I would endorse broker changes to support it. If you
> used
> > > the core protocol then you'd have access to everything.
> > >
> > > Aside from that, what's wrong with the APIs for other AMQP or STOMP
> clients
> > > for .Net?
> > >
> > >
> > > Justin
> > >
> > > On Thu, Jan 9, 2020 at 4:12 PM Krzysztof <h4v...@gmail.com> wrote:
> > >
> > > > @Clebert
> > > > So the idea is to reduce the impedance mismatch between Artemis
> address
> > > > model (which is geat!) and the concepts from jms/nms (not so great,
> at
> > > > least for folks from .net world, who used to work with rabbit mq
> before).
> > > >
> > > > I would like to be able to create a consumer and attach it by
> defining
> > > its
> > > > address, routing type (Multicast, Anycast) and queue name. It would
> be
> > > nice
> > > > if I could define if the subscription is shared and durable as well.
> If
> > > > this particular queue doesn't exist, currently the exception is
> thrown. I
> > > > would like to change this behavior, to create the queue dynamically.
> The
> > > > same way as queues are created for jms 2.0 subscriptions. Sample api
> > > would
> > > > look like this
> > > >
> > > > var consumer = await connection.CreateConsumerAsync("test-consumer",
> > > > RoutingType.Anycast, "q1");
> > > >
> > > > @Justin
> > > > I'm using AMQP. The very early POC is here
> > > > https://github.com/Havret/ActiveMQ.Net
> > > >
> > > > On Thu, Jan 9, 2020 at 3:16 AM Justin Bertram <jbert...@apache.org>
> > > wrote:
> > > >
> > > > > What protocol is the client going to use?
> > > > >
> > > > >
> > > > > Justin
> > > > >
> > > > > On Sun, Dec 29, 2019 at 3:53 PM Krzysztof <h4v...@gmail.com>
> wrote:
> > > > >
> > > > > > I'm just wondering if it should be possible to create queue
> based on
> > > > the
> > > > > > value specified via FQQN. Currently you cannot attach to the
> queue if
> > > > it
> > > > > is
> > > > > > not pre-configured.
> > > > > >
> > > > > > I'm working on POC of .NET ActiveMQ client and I am trying to
> give
> > > the
> > > > > > potential user as flexible API as possible.
> > > > > >
> > > > > > The draft API assumes that it should be feasible to specify
> address,
> > > > > > routing type (Multicast, Anycast), queue name, durability, and
> > > whether
> > > > > the
> > > > > > queue should be shared or not.
> > > > > >
> > > > > > This way user would be able to leverage most of the Artemis
> Address
> > > > Model
> > > > > > configuration options directly from the code without
> > > pre-configuration
> > > > > > anything on the broker side.
> > > > > >
> > > > > > What do you think?
> > > > > >
> > > > >
> > > >
> > >
>
>
>
> --
> Clebert Suconic
>

Reply via email to