I see your point.  I supposed I was focusing on the title of his message
(i.e. "use initial connectors instead of received topology") rather than
the the details in the description of his problem.

FWIW, I plan on implementing a new connector parameter to support ignoring
the topology because I think it will be useful for this use-case as well as
some others I've run across.


Justin

On Thu, Aug 3, 2017 at 11:45 AM, Michael André Pearce <
michael.andre.pea...@me.com> wrote:

> From what I read the double connection due to using both lists is the
> underlying issue from the original mail.
>
> "
> There is a number of problems and inneficiencies we see on this approach.
> If we have a cluster with 3 hosts for example, and we declare those on the
> host list and get 3 connections using the round robin policy, we would
> expect to get one connection for each host. But that's not what happens.
> The
> load balancing policy starts iterating over one list (the initial connector
> list) and after the first successfull connection it continues iterating
> over
> another list (the received topology), so most of the time you would get two
> connections to the same host and none for one of them.
> "
>
> Sent from my iPhone
>
> > On 3 Aug 2017, at 17:41, Justin Bertram <jbert...@redhat.com> wrote:
> >
> > IMO the way to deal with this is to just add a bit of logic so you don't
> > get 2 consecutive connections to the same host.  Making a connection with
> > the static connectors, getting the topology, closing the connection, and
> > then making another connection with the topology is wasteful.
> >
> > In any case, an option not to use the topology at all would be useful.
> > That is, after all, what this thread is really about.
> >
> >
> > Justin
> >
> > On Thu, Aug 3, 2017 at 11:32 AM, Michael André Pearce <
> > michael.andre.pea...@me.com> wrote:
> >
> >> We saw this too when running cluster mode and static discovery before we
> >> moved to UDP and then finally went to single master cluster due to cost
> in
> >> some support licensing as had to reduce cpu counts.
> >>
> >> Sent from my iPhone
> >>
> >>> On 3 Aug 2017, at 17:31, Michael André Pearce <
> >> michael.andre.pea...@me.com> wrote:
> >>>
> >>> The bit I'm getting at is it uses the discovery connection when on
> >> static instead of discovering getting the topology and then using that
> to
> >> make the connection.
> >>>
> >>> This is why when using topology and static you see first two
> connections
> >> to same host as it uses the discovery connection first which for sake of
> >> discussing host a is first in list, and then the next uses the topology
> one
> >> where host a is first in list as such this is why it makes to
> connections
> >> to host a before it makes one to host b.
> >>>
> >>>
> >>>
> >>> Sent from my iPhone
> >>>
> >>>> On 3 Aug 2017, at 14:59, Clebert Suconic <clebert.suco...@gmail.com>
> >> wrote:
> >>>>
> >>>> On Thu, Aug 3, 2017 at 9:01 AM, Michael André Pearce
> >>>> <michael.andre.pea...@me.com> wrote:
> >>>>> But what I'm saying is should it be that the discovery should happen
> >> but then the real connection is made from the returned topology. Like
> for
> >> UDP instead of hoodwinking on the discovery connection.
> >>>>
> >>>> I'm not understanding your point here? the connection factory will
> >>>> always receive a list of the topology (No matter if UDP or TCP) and
> >>>> load balance based on the topology returned.
> >>>> There are users using this as a feature.
> >>>>
> >>>>
> >>>>
> >>>> What I think is needed here is a simple property to the connection
> >>>> factory, like.... useTopololgy, connectOntTopology (or please help me
> >>>> find a better name).
> >>>>
> >>>>
> >>>> then you could connect with:
> >>>>
> >>>>
> >>>> ActiveMQConnectionFactory factory = new
> >>>> ActiveMQConnectionFactory((tcp://NODE1:61616,tcp://NODE2:
> >> 61616)?blockOnDurableSend=false&useTopology=false");
> >>>>
> >>>>
> >>>> I"m not sure if useTopology would make it clear.. I'm still thinking
> >>>> about a better name.
> >>>>
> >>>>>
> >>>>> Sent from my iPhone
> >>>>>
> >>>>>> On 3 Aug 2017, at 12:52, Clebert Suconic <clebert.suco...@gmail.com
> >
> >> wrote:
> >>>>>>
> >>>>>> It is not a bug. People use this to feed an initial list than the
> >> topology
> >>>>>> could be much bigger.
> >>>>>>
> >>>>>> On Thu, Aug 3, 2017 at 1:18 AM Michael André Pearce <
> >>>>>> michael.andre.pea...@me.com> wrote:
> >>>>>>
> >>>>>>> To me this sounds like a bug, where you get two connections because
> >> you
> >>>>>>> use two lists.
> >>>>>>>
> >>>>>>> as in why doesn't it use the topology list straight away? Fair
> >> enough for
> >>>>>>> discovery of that topology is should temporarily make a connection
> >> using
> >>>>>>> the static connections, but it should disconnect and reconnect
> using
> >> the
> >>>>>>> topology. I.e. It should just discover the topology using the
> static
> >>>>>>> discovery list.
> >>>>>>>
> >>>>>>> Similar to udp discovery it simply discovers then it uses the
> >> topology
> >>>>>>> returned.
> >>>>>>>
> >>>>>>> Sent from my iPad
> >>>>>>>
> >>>>>>>> On 3 Aug 2017, at 04:59, Clebert Suconic <
> clebert.suco...@gmail.com
> >>>
> >>>>>>> wrote:
> >>>>>>>>
> >>>>>>>> I agree we could add an option. We could use the URI parameters
> >> Thought
> >>>>>>> as
> >>>>>>>> a beanUtils?
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>> On Wed, Aug 2, 2017 at 11:36 PM Justin Bertram <
> >> jbert...@redhat.com>
> >>>>>>> wrote:
> >>>>>>>>>
> >>>>>>>>> I agree there should be an option to stick with the "initial"
> >> connectors
> >>>>>>>>> rather than being forced to use the topology.  This would be an
> >> option
> >>>>>>> on
> >>>>>>>>> the Netty connector.  I think "useTopology" (defaults to true)
> >> would be
> >>>>>>> a
> >>>>>>>>> good name.
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> Justin
> >>>>>>>>>
> >>>>>>>>> On Wed, Aug 2, 2017 at 9:28 AM, cjaniake <
> >> christian.jani...@movile.com>
> >>>>>>>>> wrote:
> >>>>>>>>>
> >>>>>>>>>> Hi there, I have been using the ActiveMQ Artemis JMS interface
> >> without
> >>>>>>>>>> JNDI.
> >>>>>>>>>> We are not using server discovery, we use static connectors
> >> instead.
> >>>>>>>>>> In the connection factory configuration we supply a list of
> >> hosts, that
> >>>>>>>>> are
> >>>>>>>>>> located on two different datacenters, acting as two different
> >> clusters.
> >>>>>>>>>> Using the RoundRobinConnectionLoadBalancingPolicy we expected
> to
> >>>>>>> connect
> >>>>>>>>>> to
> >>>>>>>>>> every server on the list, but that was not what happened.
> >>>>>>>>>> Debugging the code we realized that, after connecting to the
> first
> >>>>>>>>> (random)
> >>>>>>>>>> host on the list, the Server Locator do not use the initial
> >> connectors
> >>>>>>>>> list
> >>>>>>>>>> anymore, it uses the received topology for the next connections.
> >>>>>>>>>> We understand this might be useful in simpler scenarios, but
> this
> >> is
> >>>>>>> not
> >>>>>>>>>> working for us.
> >>>>>>>>>> On a sandbox environment we have even tried to remove the
> cluster
> >>>>>>>>>> connection
> >>>>>>>>>> configuration, for the servers to act on a stadalone manner, but
> >> even
> >>>>>>>>>> though
> >>>>>>>>>> the server locator acts the same way, receiving a "topology" of
> >> only
> >>>>>>> one
> >>>>>>>>>> node and restrict the next connections this one host.
> >>>>>>>>>>
> >>>>>>>>>> There is a number of problems and inneficiencies we see on this
> >>>>>>> approach.
> >>>>>>>>>> If we have a cluster with 3 hosts for example, and we declare
> >> those on
> >>>>>>>>> the
> >>>>>>>>>> host list and get 3 connections using the round robin policy, we
> >> would
> >>>>>>>>>> expect to get one connection for each host. But that's not what
> >>>>>>> happens.
> >>>>>>>>>> The
> >>>>>>>>>> load balancing policy starts iterating over one list (the
> initial
> >>>>>>>>> connector
> >>>>>>>>>> list) and after the first successfull connection it continues
> >> iterating
> >>>>>>>>>> over
> >>>>>>>>>> another list (the received topology), so most of the time you
> >> would get
> >>>>>>>>> two
> >>>>>>>>>> connections to the same host and none for one of them.
> >>>>>>>>>>
> >>>>>>>>>> In a scenario like we have here, with two clusters in different
> >>>>>>>>> locations,
> >>>>>>>>>> it is even worse.
> >>>>>>>>>> We would like to know if we there is an option other than
> >> creating a
> >>>>>>>>>> connection factory for each host we want to use, and if we can
> >> propose
> >>>>>>> an
> >>>>>>>>>> improvement.
> >>>>>>>>>> We are willing to contribute with the development, if we have an
> >>>>>>>>>> understanding on a possible solution for that problem.
> >>>>>>>>>>
> >>>>>>>>>> Thank you very much.
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> --
> >>>>>>>>>> View this message in context: http://activemq.2283324.n4.
> >> nabble.com/
> >>>>>>>>>> ActiveMQConnectionFactory-use-initial-connectors-instead-of-
> >>>>>>>>>> received-topology-tp4729166.html
> >>>>>>>>>> Sent from the ActiveMQ - User mailing list archive at
> Nabble.com.
> >>>>>>>>>>
> >>>>>>>>>
> >>>>>>>> --
> >>>>>>>> Clebert Suconic
> >>>>>>>
> >>>>>> --
> >>>>>> Clebert Suconic
> >>>>
> >>>>
> >>>>
> >>>> --
> >>>> Clebert Suconic
> >>
>

Reply via email to