Return-Path: Delivered-To: apmail-activemq-users-archive@www.apache.org Received: (qmail 28424 invoked from network); 1 Oct 2008 17:57:52 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 1 Oct 2008 17:57:52 -0000 Received: (qmail 15878 invoked by uid 500); 1 Oct 2008 17:57:50 -0000 Delivered-To: apmail-activemq-users-archive@activemq.apache.org Received: (qmail 15861 invoked by uid 500); 1 Oct 2008 17:57:50 -0000 Mailing-List: contact users-help@activemq.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: users@activemq.apache.org Delivered-To: mailing list users@activemq.apache.org Received: (qmail 15849 invoked by uid 99); 1 Oct 2008 17:57:50 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 01 Oct 2008 10:57:49 -0700 X-ASF-Spam-Status: No, hits=2.6 required=10.0 tests=DNS_FROM_OPENWHOIS,SPF_HELO_PASS,SPF_PASS,WHOIS_MYPRIVREG X-Spam-Check-By: apache.org Received-SPF: pass (athena.apache.org: domain of lists@nabble.com designates 216.139.236.158 as permitted sender) Received: from [216.139.236.158] (HELO kuber.nabble.com) (216.139.236.158) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 01 Oct 2008 17:56:46 +0000 Received: from isper.nabble.com ([192.168.236.156]) by kuber.nabble.com with esmtp (Exim 4.63) (envelope-from ) id 1Kl5wu-0007A4-5y for users@activemq.apache.org; Wed, 01 Oct 2008 10:57:20 -0700 Message-ID: <19765870.post@talk.nabble.com> Date: Wed, 1 Oct 2008 10:57:20 -0700 (PDT) From: Joe Fernandez To: users@activemq.apache.org Subject: Re: Not quite sure where to go next - network bridging, reliable delivery, store and forward. In-Reply-To: <200810011125.18084.thomas.corbin@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Nabble-From: joe.fernandez@ttmsolutions.com References: <200810011125.18084.thomas.corbin@gmail.com> X-Virus-Checked: Checked by ClamAV on apache.org Are the 'assignments' messages being sent out as non persistent messages? Joe Get a free ActiveMQ user guide @ http://www.ttmsolutions.com Tom Corbin wrote: > > > Now, it seems like the recommendation is for Master/Slave for reliable > delivery, but I don't think we can do that. > > We've got field laptops which may or may not have connectivity with the > central > office, but they want to be able to run the application and have it send > messages that get delivered when the network comes up. > > And the client wants the central office to be able to send assignments to > the > field whether or not the network to the field laptop is up. > > So for the field laptops I've set up an embedded broker which then > connects to > a central office broker. The reason is that the application won't come > up if > there isn't a local broker that it can connect to. If the application is > started w/o a local broker or a connection to the central office it > doesn't come > up. Plus, I wanted the local message persistence so that the user of the > application can trigger messages to be sent even when the connection to > the > central office isn't present. > > In the central office we've get server processes also with embedded > brokers. > > I've been fiddling with the setup configuration for the embedded brokers > and the > central office brokers and I've gotten to the point that messages from the > field > get sent to the central office on reconnect, but don't get sent from the > central > office to the field on reconnect. > > And everything works if everything is connected. But if the laptop isn't > connected to the central office when the central office sends out > assignments to > the field, then the laptop will never see those messages. > > I've tried using durable subscription topics, I've tried setting > "conduitSubscriptions" to both true and false - and I'm not sure if I > should > set it one way for the central office broker and the same or different for > the > laptop and server process embedded brokers. > > The network kind of looks like this: > > Field laptop|---------|central office broker|-----|Server Process| > > The central office broker is intended to be the "master", in as much as > there is > a master - this isn't really a master/slave setup. > > I can use JMX to look at the enqueue/dequeue counts to see where messages > are > getting hung up - but I am not ever sure why. > > I had thought that with durable subscriptions, the messages would get > sent, > but that *seems* not to be the case. > > I have looked through ActiveMQ bug reports and the online documentation. > Of > which there is a lot, but I am still quite confused. > > Seeing as how I'm doing the embedded broker set up in Groovy, rather than > in > spring or xbean - should I explicitly be using a DemandForwardingBridge as > in > the ThreeBroker tests? Or does the underlying code just use it anyway? > > What would that imply for the activemq.xml config file for the master > broker? > Is there configuration that explicitly says use a DemandForwardingBridge? > Or > is the DemandForwardingBridge not the issue? > > What should these values be set to? > > decreaseNetworkConsumerPriority="false" > conduitSubscriptions="true" > bridgeTempDestinations="true" > duplex="true" > > Sorry for such a newbie set of questions and so long an email. > > /* > * $$ > * > > *************************************************************************** > * > * Copyright (c) 2006 Coned. All rights reserved. > * > * Company: http://www.coned.com > * > > *************************************************************************** > */ > package com.coned.util.db; > > > import java.net.URI; > import javax.sql.DataSource > > import org.apache.activemq.broker.BrokerService > import org.apache.activemq.network.NetworkConnector > import org.apache.activemq.network.DiscoveryNetworkConnector > import org.apache.activemq.broker.jmx.ManagementContext > import org.apache.activemq.store.journal.JournalPersistenceAdapterFactory > import org.apache.activemq.broker.view.ConnectionDotFilePlugin > import org.apache.activemq.broker.view.DestinationDotFilePlugin > > import org.apache.derby.jdbc.EmbeddedDataSource > > import org.apache.log4j.Logger; > > import com.samsix.util.LoggerControl > import com.samsix.util.HostNameProvider > > > > /** > * Utility to create the jms broker. > */ > public class JmsBroker > { > private static final Logger logger = Logger.getLogger( JmsBroker ); > > > String applicationNickname; > String transportConnectorUri; > String networkConnectorUri; > DataSource dataSource > > > public void createBroker() > { > turnOnActiveMqLogging() > > BrokerService broker = new BrokerService(); > > // configure the broker > broker.brokerName = getBrokerName() > broker.useJmx = true; > broker.dataDirectory = getDataDirectory() > > // > // Suggested via email. Also see: > // > // > http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/network/NetworkLoadTest.java?view=markup > // > broker.getManagementContext().setCreateConnector( false ); > > //logger.error "data directory: ${getDataDirectory()}" > > addPlugins( broker ) > addNetworkConnector( broker ) > addManagementContext( broker ) > addPersistenceAdaptor( broker ) > > broker.addConnector( transportConnectorUri ); > broker.start(); > } > > > def addPersistenceAdaptor( broker ) > { > EmbeddedDataSource dataSource = new > EmbeddedDataSource() > JournalPersistenceAdapterFactory factory = new > JournalPersistenceAdapterFactory() > > dataSource.databaseName = getDataDirectory() + File.separator > + "derbydb" > dataSource.createDatabase = "create" > factory.journalLogFiles = 5 > factory.dataDirectory = getDataDirectory() > factory.dataSource = dataSource > > broker.persistenceFactory = factory > } > > > def addManagementContext( broker ) > { > ManagementContext context = new ManagementContext() > context.useMBeanServer = true > context.createConnector = true > context.connectorPort = getJmxPort() > context.jmxDomainName = "org.apache.activemq" > > broker.managementContext = context > } > > > def addNetworkConnector( broker ) > { > // NetworkConnector connector = broker.addNetworkConnector( > networkConnectorUri ); > > NetworkConnector connector = new DiscoveryNetworkConnector( new > URI( networkConnectorUri ) ) > connector.name = "masterJms" > connector.duplex = true > connector.dynamicOnly = false > > // > // just read something from james strachan... > // "For demand forwarding I think you need to set > // > // > https://issues.apache.org/activemq/browse/AMQ-632;jsessionid=2E616BDE6A9E07FF60967D5A69352D1F?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel > // > connector.conduitSubscriptions = true > > > connector.bridgeTempDestinations = true > connector.decreaseNetworkConsumerPriority = false > > // > // networkTTL (defaults to 1) > // > // the number of brokers in the network that messages > // and subscriptions can pass through > // > // > connector.networkTTL = 100 > > broker.addNetworkConnector( connector ) > } > > > def addPlugins( broker ) > { > def plugins = [] > def connectionDotPlugin = new ConnectionDotFilePlugin() > def destinationDotPlugin = new DestinationDotFilePlugin() > > connectionDotPlugin.file = > "${getDataDirectory()}${File.separator}${getBrokerName()}-Connection.dot" > destinationDotPlugin.file = > "${getDataDirectory()}${File.separator}${getBrokerName()}-Destination.dot" > > // plugins << connectionDotPlugin > plugins << destinationDotPlugin > > broker.plugins = plugins > } > > > String getDataDirectory() > { > > "${System.properties.'java.io.tmpdir'}${File.separator}activemq${File.separator}${applicationNickname}" > } > > > def turnOnActiveMqLogging() > { > def loggerControl = new LoggerControl() > loggerControl.setDebug( "org.apache.activemq" ) > loggerControl.afterPropertiesSet() > } > > > int getJmxPort() > { > def tmp = transportConnectorUri.substring( > transportConnectorUri.lastIndexOf( ":" ) + 1 ) > // println "tmp - transport port#: [${tmp}]" > > Integer.parseInt( tmp.trim() ) + 100 > } > > > String getBrokerName() > { > "${new HostNameProvider().get()}-${applicationNickname}" > } > > > String getClientId( String topicName ) > { > "${new > HostNameProvider().get()}-${applicationNickname}-${topicName}" > } > > > String getBrokerUri() > { > "vm://${getBrokerName()}" > } > } > > > -- View this message in context: http://www.nabble.com/Not-quite-sure-where-to-go-next---network-bridging%2C-reliable-delivery%2C-store-and-forward.-tp19764204p19765870.html Sent from the ActiveMQ - User mailing list archive at Nabble.com.