Hi,

Thanks for the reply.  My earlier distinction was sloppy, I ought to have
written something like 'partially connected mesh' vs. a complete graph.   I
was trying to distinguish between a topology where nodes are only connected
to immediate neighbors, and therefore may always be required to travel
across multiple brokers to get to a particular destination.

In this particular setup all the brokers will have the same capabilities
and will be connected to the same network, so I think I'll go ahead with
these scheme.  I appreciate the feedback!

Jim

On Sun, Apr 26, 2015 at 9:10 AM Tim Bain <tb...@alumni.duke.edu> wrote:

> Your understanding of this is good and you've got the right concepts here.
> The only two reasons I can think of that you shouldn't use a mesh (which I
> think is the same as a complete graph, though you drew a distinction
> between the two in your email so maybe there's a difference I'm not
> understanding) is if you have non-homogeneous network links where the most
> efficient routing between two brokers isn't necessarily the path "directly"
> (from a network-of-brokers standpoint, not from a network standpoint)
> between the two, or if you don't want to have to specify all of the other
> clusters so you'd use a hub-and-spoke topology so you only have to specify
> the hub node in your config.
>
> On Fri, Mar 13, 2015 at 12:21 AM, James A. Robinson <
> jim.robin...@gmail.com>
> wrote:
>
> > Hi folks,
> >
> > I joined this list because we're starting to look into setting up
> > ActiveMQ for our developers.  My preference at this time is to set
> > up a highly reliable system that doesn't have single points of
> > failure.
> >
> > Due to the concern about single points of failure I didn't want to
> > introduce a shared persistence layer.  That's why I've been looking
> > at replicated LevelDB.
> >
> > After spending some time reading up on ActiveMQ my first inclination
> > has been to propose setting up 3-node replicated LevelDB clusters,
> > and to build a network of brokers out of sets of those 3-node
> > clusters.
> >
> > E.g., start with two clusters, and then keep adding on as we see
> > the need in terms of capacity.
> >
> > [amq-1a, amq-1b, amq-1c]
> > [amq-2a, amq-2b, amq-2c]
> > ...
> > [amq-9a, amq-9b, amq-9c]
> > ...
> >
> > I'm not sure what the best option is w/re to the network of broker
> > topology.  I could see mesh working, but my first instinct would
> > be to set up a complete graph, and have each broker cluster configured
> > with a uni-directional network connector to every other cluster
> > using the masterslave scheme.
> >
> > I am wondering if this is a naive approach, and if so why it wouldn't
> > be a good idea.
> >
> > If it is reasonable, I'm still trying to fully understand how one
> > deals with forwarding messages from brokers w/o consumers to those
> > brokers w/ consumers.  The page
> >
> > http://activemq.apache.org/networks-of-brokers.html
> >
> > discusses this topic and mentions rebalanceClusterClients, and it
> > isn't clear to me how that option will help if the clusters and
> > clients are fairly static:
> >
> >   rebalanceClusterClients:
> >     if true, connected clients will be asked to rebalance across a
> >     cluster of brokers when a new broker joins the network of brokers
> >     (note: priorityBackup=true can override)
> >
> > Reading the list of options available for transport connectors, it
> > seems reasonable to configure the transport connector with:
> >
> > updateClusterClients="true"
> > rebalanceClusterClients="true"
> > updateClusterClientsOnRemove="true"
> >
> > But if one has mostly static clients and we aren't frequently
> > bringing broker clusters up and down, I would assume there would
> > still be a problem of having messages on a broker that doesn't have
> > consumers attached.  If I'm wrong I'd like to understand what I'm
> > missing.
> >
> > The network-of-brokers page, after mentioning rebalanceClusterClients
> > as one solution, continues the discussion and states that:
> >
> >   Another, is to allow replay of messages back to the origin as
> >   there is no local consumer on that broker.
> >
> >   There is a destination policy that allows this behavior for queues
> >   by configuring a conditionalNetworkBridgeFilterFactory with
> >   replayWhenNoConsumers=true. The conditionalNetworkBridgeFilterFactory
> >   provides an optional replayDelay based on the broker-in time.
> >
> >   N.B.: When using replayWhenNoConsumers=true for versions < 5.9,
> >   it is necessary to also disable the cursors duplicate detection
> >   using enableAudit=false as the cursor could mark the replayed
> >   messages as duplicates (depending on the time window between
> >   playing and replaying these messages over the network bridge).
> >   The problem is fully explained in this blog post.
> >
> > And I see in that ticket AMQ-4607 says this about the network
> > connector options:
> >
> >   networkTTL sets both consumerTTL and messageTTL a value of -1
> > denotes infinite hops.
> >   In a mesh, use consumerTTL=1, messageTTL=-1 to allow consumers to
> > bounce around the mesh and messages to follow demand.
> >   In a linear topology use networkTTL == length of network (as before)
> >
> > So would it be reasonable to set up a complete graph, with each
> > 3-node cluster configured with a uni-directional network connector
> > to every other 3-node cluster using masterslave, and to set
> >
> >   consumerTTL="1"
> >   messageTTL="-1"
> >   decreaseNetworkConsumerPriority="true"
> >
> > and a networkBridgeFilterFactory/conditionalNetworkBridgeFilterFactory
> > with
> >
> >   replayWhenNoConsumers="true"
> >
> > I'd appreciate any input from the folks here, including any pointers
> > on any more material I should read.
> >
> > Jim
> >
>

Reply via email to