[ https://issues.apache.org/activemq/browse/AMQNET-159?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Mark Gellings reopened AMQNET-159: ---------------------------------- I reviewed the changes and found one difference. In FailoverTrasport.doConnect() if(_asyncConnect) { // now wait for transport to be populated, but timeout eventually allDone.WaitOne(_asyncTimeout, false); } you are passing false into an overloaded WaitOne method. I was not using this method. I wasn't passing in false just _asyncTimeout. Is there a specific reason this was done? If so, how come? If not, what are the implications of this? Also, would it make sense to make the async connection the default behavior? > Make failover protocol optionally asynchronously connect to sockets > ------------------------------------------------------------------- > > Key: AMQNET-159 > URL: https://issues.apache.org/activemq/browse/AMQNET-159 > Project: ActiveMQ .Net > Issue Type: New Feature > Components: ActiveMQ > Affects Versions: 1.1.0 > Environment: XP, Windows Server 2008, Sql Server 2008 > Reporter: Mark Gellings > Assignee: Jim Gomes > Fix For: 1.2.0 > > Attachments: FailoverAsyncConnect.patch > > > The current failover transport synchronously attempts to socket connect to a > broker. Preferably we would first socket connect trying the master address > in the failover address to avoid a socket connection timeout. When the first > tcp address in the failover address is the slave, its connectors are not > started, and .NET takes around 20 - 25s to timeout trying to socket connect > to the slave. Thus the client is waiting 20-25s to submit a message when the > session is first established. > Since the first tcp address in the failover address is never guaranteed to be > the master, I've coded an enhancement that optionally allows to > asynchronously socket connect utilizing all the tcp addresses in the failover > address. I have a patch you can apply. > The following failover address is an example of how to use the async connect. > private static Uri _uri = new > Uri("failover:(tcp://WAMQDEV1.qg.com:10083,tcp://SXMQDEV1.qg.com:10083)?AsyncConnect=true&AsyncTimeout=20000"); > This will cause the failover transport to attempt connecting to WAMQDEV1 and > SXMQDEV1 at the same time to avoid the impact of any socket connect timeouts. > First broker connected to becomes the transport utilized. If WAMQDEV1 > broker is not running or is running the slave broker then if SXMQDEV1 is > running the master broker the client will connect to SXMQDEV1. > AsyncTimeout is the max time in milliseconds to wait for a transport to be > initialized. So if both brokers are down, in the example above, after 20000 > milliseconds the normal retry logic will kick in. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.