Pan B. Christensen
2011-Jan-07 11:38 UTC
[asterisk-users] Call queues on load-balanced asterisks
Hello, I have been asked to implement the following design: Load-balanced Kamailio servers handling registrations and routing. Load-balanced asterisk feature servers handling voicemail and other things Kamailio cannot do. Plus several load-balanced gateways, but they are not relevant to my question. All this is working fine. I've now been asked to start implementing calling queues, and my question is this: How can I implement the same queue on multiple Asterisk servers? Let's say that 10 people call the same queue. These calls would then currently be distributed 5 to Asterisk A and 5 to Asterisk B. How can I make Asterisk A respect the 5 people queued on the other server and vice versa? Will the customer need to change their design to make the feature servers master-slave with failover instead of load-balanced? Mvh Pan -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.digium.com/pipermail/asterisk-users/attachments/20110107/2c574980/attachment.htm>
DHAVAL INDRODIYA
2011-Jan-08 06:04 UTC
[asterisk-users] Call queues on load-balanced asterisks
Hello Pan, You can user DB for this just make real time configuration of Queue and make all asterisk server connected to Same DB if more load then use replication for different server on DB, also So that Quque name should be same for all server and asterisk can call same agent. you didnot mentioned that which purpose youwere use queue other wise i can give answer in better way. regards Dhaval On Fri, Jan 7, 2011 at 5:08 PM, Pan B. Christensen <pan at ibidium.no> wrote:> Hello, > > I have been asked to implement the following design: > > Load-balanced Kamailio servers handling registrations and routing. > Load-balanced asterisk feature servers handling voicemail and other things > Kamailio cannot do. Plus several load-balanced gateways, but they are not > relevant to my question. > > All this is working fine. > > I've now been asked to start implementing calling queues, and my question > is this: > How can I implement the same queue on multiple Asterisk servers? > > Let's say that 10 people call the same queue. These calls would then > currently be distributed 5 to Asterisk A and 5 to Asterisk B. How can I make > Asterisk A respect the 5 people queued on the other server and vice versa? > > Will the customer need to change their design to make the feature servers > master-slave with failover instead of load-balanced? > > Mvh > Pan > > -- > _____________________________________________________________________ > -- Bandwidth and Colocation Provided by http://www.api-digital.com -- > New to Asterisk? Join us for a live introductory webinar every Thurs: > http://www.asterisk.org/hello > > asterisk-users mailing list > To UNSUBSCRIBE or update options visit: > http://lists.digium.com/mailman/listinfo/asterisk-users >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.digium.com/pipermail/asterisk-users/attachments/20110108/aadfeb0e/attachment.htm>
Pan B. Christensen
2011-Jan-11 11:19 UTC
[asterisk-users] Call queues on load-balanced asterisks
Hello Dhaval (and others), As far as I can tell, realtime queue will not solve my problem. I can statically define the same queue with the same members on two machines as well. I was planning to use realtime anyway. The issue is the actual queueing of the incoming calls. Let?s say I define the queue "IT-support" with members Local/100 and Local/101 on both machines. The first call comes in and is distributed by Kamailio to Asterisk A, and answered by 100. The next call comes in to Asterisk B, and is answered by 101. At this point, both members are busy. Call 3 now comes in and is sent to Asterisk A, where it waits for a free member. Call 4 comes in and is also sent to Asterisk A, as is Call 5. Then call 6 is sent to Asterisk B. At this point 100 finishes his call and becomes free. Which call is delivered to 100? As far as I can tell, that?s a 50/50 chance between call 3 and call 6. This is not correct behaviour! Call 6 should wait until calls 3, 4 and 5 (from the other server) have all been delivered. In the example above: When call 3 comes in, Asterisk A may even try to deliver it to 101, who gets call waiting indication. He will now have two simultaneous calls from the same queue! I have not found any way to share information about calls waiting in the queue, wait times, member states and so on between the two servers. Unless you guys know of a way, I think I'm going to have to ask the customer to change their design to master-slave (with failover) instead of load-balanced. With kind regards, Pan> Hello Pan, > > You can user DB for this just make real time configuration of Queue and make > all asterisk server connected to Same DB if more load then use replication > for different server on DB, also So that Quque name should be same for all > server and asterisk can call same agent. > > you didnot mentioned that which purpose youwere use queue other wise i can > give answer in better way. > > regards > Dhaval > > On Fri, Jan 7, 2011 at 5:08 PM, Pan B. Christensen <pan at ibidium.no> wrote: > >> Hello, >> >> I have been asked to implement the following design: >> >> Load-balanced Kamailio servers handling registrations and routing. >> Load-balanced asterisk feature servers handling voicemail and other things >> Kamailio cannot do. Plus several load-balanced gateways, but they are not >> relevant to my question. >> >> All this is working fine. >> >> I've now been asked to start implementing calling queues, and my question >> is this: >> How can I implement the same queue on multiple Asterisk servers? >> >> Let's say that 10 people call the same queue. These calls would then >> currently be distributed 5 to Asterisk A and 5 to Asterisk B. How can I make >> Asterisk A respect the 5 people queued on the other server and vice versa? >> >> Will the customer need to change their design to make the feature servers >> master-slave with failover instead of load-balanced? >> >> Mvh >> Pan-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.digium.com/pipermail/asterisk-users/attachments/20110111/585838a7/attachment.htm>
Hi Pan & Dhaval, We have implemented a FastAGI based queue with Erlang for a inbound call center, and call this new application as FlexQueue. All calls distributed on multiple asterisk boxes go through and are controlled by that same remote fastagi server. It can routing calls to any destination, by any business rules. It don't rely on the db for agent/call status store & query. It's event driven and dict based agent/call store & query, with very good performance, and low cpu power consumption. I think for your requirement, app_queue could not fulfill that. Best Regards, Thomas Liu ---------------------------------------------------------------------------- ----------------------------- WShuttle Infotech Ltd.? http://www.wshuttle.com?/ http://www.lookmypc.com http://www.vicidial.cn / http://www.call-center-software.com.cn Tel: +86 20 39230098 39230096 Mobile : +86 1390 3051 930 HK DID: +852 6950 0916, Macau DID: +853 6285 0645 Email: thomas.liu at wshuttle.com MSN:thomaslly at 21cn.com, QQ: 332148339, Skype:tonylly Yahoo Messenger: thomaslly Address:? Room# 302, Building T8, Dongmen Plaza, Shuishi Reserved Area, Guangzhou Higher Education Mega Center, Guangzhou, Guangdong Province, China.?? Zip code: 510006 ---------------------------------------------------------------------------- --------------> Hello Dhaval (and others), > > As far as I can tell, realtime queue will not solve my problem. I canstatically> define the same queue with the same members on two machines as well. I wasplanning> to use realtime anyway. The issue is the actual queueing of the incomingcalls.> > Let?s say I define the queue "IT-support" with members Local/100 andLocal/101> on both machines. The first call comes in and is distributed by Kamailioto Asterisk> A, and answered by 100. The next call comes in to Asterisk B, and isanswered by> 101. At this point, both members are busy. Call 3 now comes in and is sentto Asterisk> A, where it waits for a free member. Call 4 comes in and is also sent toAsterisk> A, as is Call 5. Then call 6 is sent to Asterisk B. At this point 100finishes> his call and becomes free. Which call is delivered to 100? As far as I cantell,> that?s a 50/50 chance between call 3 and call 6. This is not correctbehaviour!> Call 6 should wait until calls 3, 4 and 5 (from the other server) have allbeen> delivered. > > In the example above: When call 3 comes in, Asterisk A may even try todeliver> it to 101, who gets call waiting indication. He will now have twosimultaneous> calls from the same queue! > > I have not found any way to share information about calls waiting in thequeue,> wait times, member states and so on between the two servers. > > Unless you guys know of a way, I think I'm going to have to ask thecustomer to> change their design to master-slave (with failover) instead ofload-balanced.> > With kind regards, > Pan > > > Hello Pan, > > > > You can user DB for this just make real time configuration of Queue andmake> > all asterisk server connected to Same DB if more load then usereplication> > for different server on DB, also So that Quque name should be same forall> > server and asterisk can call same agent. > > > > you didnot mentioned that which purpose youwere use queue other wise ican> > give answer in better way. > > > > regards > > Dhaval > > > > On Fri, Jan 7, 2011 at 5:08 PM, Pan B. Christensen <pan at ibidium.no>wrote:> > > >> Hello, > >> > >> I have been asked to implement the following design: > >> > >> Load-balanced Kamailio servers handling registrations and routing. > >> Load-balanced asterisk feature servers handling voicemail and otherthings> >> Kamailio cannot do. Plus several load-balanced gateways, but they arenot> >> relevant to my question. > >> > >> All this is working fine. > >> > >> I've now been asked to start implementing calling queues, and myquestion> >> is this: > >> How can I implement the same queue on multiple Asterisk servers? > >> > >> Let's say that 10 people call the same queue. These calls would then > >> currently be distributed 5 to Asterisk A and 5 to Asterisk B. How can Imake> >> Asterisk A respect the 5 people queued on the other server and viceversa?> >> > >> Will the customer need to change their design to make the featureservers> >> master-slave with failover instead of load-balanced? > >> > >> Mvh > >> Pan