[asterisk-users] Call queues on load-balanced asterisks

Danny Nicholas danny at debsinc.com
Tue Jan 11 09:26:41 CST 2011


  _____  

From: asterisk-users-bounces at lists.digium.com
[mailto:asterisk-users-bounces at lists.digium.com] On Behalf Of Pan B.
Christensen
Sent: Tuesday, January 11, 2011 5:20 AM
To: asterisk-users at lists.digium.com
Subject: Re: [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

 

IMO your best solution to this is going to be using a database and AGI query
to keep a "quasi-real" (delayed by a few ms/sec) picture of the queue
activity.  If you kept a database on both machines and ran an AGI with each
incoming call to query queue usage on both machines or better yet, query the
queue on the remote machine and spawn a short local call to keep that agent
busy on the native machine, that would solve this issue.  Let's say that a
typical agent interaction occurs in 60 second chunks.  Call 1 comes in to
machine 1 and is answered by agent 100 as you said.  Call 2 comes into
machine 2 and is answered by 101.  When Call 3 comes in, it sees 101 and 102
as busy on both machines.  

 

You can do this, but isn't this really a Kamailio issue?

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-users/attachments/20110111/ae1688bc/attachment-0001.htm>


More information about the asterisk-users mailing list