Hi Henning/All,

After some digging we realized the system was already retrying thanks to this 
block on kamailio.cfg

# Try next destionations in failure route
failure_route[RTF_DISPATCH] {
    if (t_is_canceled()) {
        exit;
    }
    # next DST - only for 500 or local timeout
    if (t_check_status("500")
            or (t_branch_timeout() and !t_branch_replied())) {
        if(ds_next_dst()) {
            t_on_failure("RTF_DISPATCH");
            route(RELAY);
            exit;
        }
    }
}

How can we control the maximum number of retries? Seems to be infinite at the 
moment? Or !t_branch_replied()means that each backend can only reply once?

Thanks you

With best wishes,
Unai Rodriguez
On 6 Dec 2022, 10:04 +0100, Henning Westerholt <h...@gilawa.com>, wrote:
> Hello,
>
> you can implement this by using a failure_route. There is one example in the 
> dispatcher module configuration how to do it.
>
> Cheers,
>
> Henning
>
> --
> Henning Westerholt – https://skalatan.de/blog/
> Kamailio services – https://gilawa.com
>
> From: sr-users <sr-users-boun...@lists.kamailio.org> On Behalf Of Unai 
> Rodriguez
> Sent: Saturday, December 3, 2022 5:16 PM
> To: sr-users@lists.kamailio.org
> Subject: [SR-Users] How to have Kamailio retry backends
>
> Dear List,
>
> We’re using Kamailio to load balance MRCP requests to multiple backend groups 
> with a configuration as follows:
>
> # kamailio.cfg
> ...
> ...
> route[DISPATCH] {
>                 if($ua=="mrcp_backend_1") {
>                                 if(!ds_select_dst("1", "4")) {
>                                                send_reply("404", "No 
> destination");
>                                                exit;
>                                 }
>                 }
>                 if($ua=="mrcp_backend_2") {
>                                 if(!ds_select_dst("2", "4")) {
>                                                send_reply("404", "No 
> destination");
>                                                exit;
>                                 }
>                 }
>                 xlog("L_DBG", "--- SCRIPT: going to <$ru> via <$du>\n");
>                 t_on_failure("RTF_DISPATCH");
>                 route(RELAY);
>                 exit;
> }
> ...
> ...
>
> # dispatcher.list
> 1 sip:mrcp01.server.int:8060;transport=tcp
> 1 sip:mrcp02.server.int:8060;transport=tcp
>
> 2 sip:mrcp03.server.int:8060;transport=tcp
> 2 sip:mrcp04.server.int:8060;transport=tcp
>
> With this configuration, Kamailio load balances the initial SIP INVITE among 
> the MRCP servers. After the INVITE, the service communicates directly to the 
> MRCP servers via SIP (for hanging up the call), MRCPv2 (for sending speech 
> control messages), and RTP (for sending audio).
>
> We would like to implement a configurable number of retries, so that if a 
> particular backend times out, Kamailio would retry X times to other 
> backend(s). In short, something equivalent to HAProxy’s retries, but for 
> Kamailio. This probably implies having Kamailio always as part of our 
> communication (not just load balancing the initial SIP INVITE).
>
> I haven’t been able to find much information about this, could someone 
> provide some pointers?
>
> Thank you so much
>
> With best wishes,
> Unai Rodriguez
__________________________________________________________
Kamailio - Users Mailing List - Non Commercial Discussions
sr-users@lists.kamailio.org
Important: keep the mailing list in the recipients, do not reply only to the 
sender!
Edit mailing list options or unsubscribe:
https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users

Reply via email to