Swan Lake Beta3 is here.
import ballerina/http;
import ballerina/log;
import ballerina/lang.runtime;

http:Client backendClientEP = check new ("http://localhost:8080", {
            // Retry configuration options.
            retryConfig: {

                // Initial retry interval in seconds.
                interval: 3,

                // Number of retry attempts before giving up.
                count: 3,

                // Multiplier of the retry interval to exponentially increase
                // the retry interval.
                backOffFactor: 2.0,

                // Upper limit of the retry interval in seconds. If
                // `interval` into `backOffFactor` value exceeded
                // `maxWaitInterval` interval value,
                // `maxWaitInterval` will be considered as the retry
                // interval.
                maxWaitInterval: 20

            },
            timeout: 2
        }
    );


service / on new http:Listener(9090) {
    resource function 'default 'retry() returns string|error {
        string payload = check backendClientEP->get("/hello");
        return payload;
    }
}


// This sample service is used to mock connection timeouts and service outages.
// The service outage is mocked by stopping/starting this service.
// This should run separately from the `retry` service.
service / on new http:Listener(8080) {
    private int counter = 0;

    resource function get hello() returns string {
        self.counter += 1;
        // Delay the response by 5 seconds to mimic network level delays.
        if (self.counter % 4 != 0) {
            log:printInfo(
                "Request received from the client to delayed service.");
            runtime:sleep(5);

            return "Hello World!!!";
        } else {
            log:printInfo(
                "Request received from the client to healthy service.");
            return "Hello World!!!";
        }
    }
}

Retry

The HTTP retry client tries sending over the same request to the backend service when there is a network level failure.

For more information on the underlying module, see the HTTP module.

import ballerina/http;
import ballerina/log;
import ballerina/lang.runtime;
http:Client backendClientEP = check new ("http://localhost:8080", {
            retryConfig: {

Retry configuration options.

                interval: 3,

Initial retry interval in seconds.

                count: 3,

Number of retry attempts before giving up.

                backOffFactor: 2.0,

Multiplier of the retry interval to exponentially increase the retry interval.

                maxWaitInterval: 20

Upper limit of the retry interval in seconds. If interval into backOffFactor value exceeded maxWaitInterval interval value, maxWaitInterval will be considered as the retry interval.

            },
            timeout: 2
        }
    );
service / on new http:Listener(9090) {
    resource function 'default 'retry() returns string|error {
        string payload = check backendClientEP->get("/hello");
        return payload;
    }
}
service / on new http:Listener(8080) {
    private int counter = 0;

This sample service is used to mock connection timeouts and service outages. The service outage is mocked by stopping/starting this service. This should run separately from the retry service.

    resource function get hello() returns string {
        self.counter += 1;
        if (self.counter % 4 != 0) {
            log:printInfo(
                "Request received from the client to delayed service.");
            runtime:sleep(5);

Delay the response by 5 seconds to mimic network level delays.

            return "Hello World!!!";
        } else {
            log:printInfo(
                "Request received from the client to healthy service.");
            return "Hello World!!!";
        }
    }
}
bal run http_retry.bal.bal
[ballerina/http] started HTTP/WS listener 0.0.0.0:9090
[ballerina/http] started HTTP/WS listener 0.0.0.0:8080
time = 2021-01-21 19:00:21,374 level = INFO  module = "" message = "Request received from the client to delayed service."
time = 2021-01-21 19:00:26,379 level = INFO  module = "" message = "Request received from the client to delayed service."
time = 2021-01-21 19:00:34,402 level = INFO  module = "" message = "Request received from the client to delayed service."
time = 2021-01-21 19:00:48,404 level = INFO  module = "" message = "Request received from the client to healthy service."
# If the request that was sent to the `retry` resource fails due to an error, the client tries sending the request again.
curl http://localhost:9090/retry
Hello World!!!
import ballerina/http;
import ballerina/log;
import ballerina/lang.runtime;

http:Client backendClientEP = check new ("http://localhost:8080", {
            // Retry configuration options.
            retryConfig: {

                // Initial retry interval in seconds.
                interval: 3,

                // Number of retry attempts before giving up.
                count: 3,

                // Multiplier of the retry interval to exponentially increase
                // the retry interval.
                backOffFactor: 2.0,

                // Upper limit of the retry interval in seconds. If
                // `interval` into `backOffFactor` value exceeded
                // `maxWaitInterval` interval value,
                // `maxWaitInterval` will be considered as the retry
                // interval.
                maxWaitInterval: 20

            },
            timeout: 2
        }
    );


service / on new http:Listener(9090) {
    resource function 'default 'retry() returns string|error {
        string payload = check backendClientEP->get("/hello");
        return payload;
    }
}


// This sample service is used to mock connection timeouts and service outages.
// The service outage is mocked by stopping/starting this service.
// This should run separately from the `retry` service.
service / on new http:Listener(8080) {
    private int counter = 0;

    resource function get hello() returns string {
        self.counter += 1;
        // Delay the response by 5 seconds to mimic network level delays.
        if (self.counter % 4 != 0) {
            log:printInfo(
                "Request received from the client to delayed service.");
            runtime:sleep(5);

            return "Hello World!!!";
        } else {
            log:printInfo(
                "Request received from the client to healthy service.");
            return "Hello World!!!";
        }
    }
}

Retry

The HTTP retry client tries sending over the same request to the backend service when there is a network level failure.

For more information on the underlying module, see the HTTP module.

import ballerina/http;
import ballerina/log;
import ballerina/lang.runtime;
http:Client backendClientEP = check new ("http://localhost:8080", {
            retryConfig: {

Retry configuration options.

                interval: 3,

Initial retry interval in seconds.

                count: 3,

Number of retry attempts before giving up.

                backOffFactor: 2.0,

Multiplier of the retry interval to exponentially increase the retry interval.

                maxWaitInterval: 20

Upper limit of the retry interval in seconds. If interval into backOffFactor value exceeded maxWaitInterval interval value, maxWaitInterval will be considered as the retry interval.

            },
            timeout: 2
        }
    );
service / on new http:Listener(9090) {
    resource function 'default 'retry() returns string|error {
        string payload = check backendClientEP->get("/hello");
        return payload;
    }
}
service / on new http:Listener(8080) {
    private int counter = 0;

This sample service is used to mock connection timeouts and service outages. The service outage is mocked by stopping/starting this service. This should run separately from the retry service.

    resource function get hello() returns string {
        self.counter += 1;
        if (self.counter % 4 != 0) {
            log:printInfo(
                "Request received from the client to delayed service.");
            runtime:sleep(5);

Delay the response by 5 seconds to mimic network level delays.

            return "Hello World!!!";
        } else {
            log:printInfo(
                "Request received from the client to healthy service.");
            return "Hello World!!!";
        }
    }
}
bal run http_retry.bal.bal
[ballerina/http] started HTTP/WS listener 0.0.0.0:9090
[ballerina/http] started HTTP/WS listener 0.0.0.0:8080
time = 2021-01-21 19:00:21,374 level = INFO  module = "" message = "Request received from the client to delayed service."
time = 2021-01-21 19:00:26,379 level = INFO  module = "" message = "Request received from the client to delayed service."
time = 2021-01-21 19:00:34,402 level = INFO  module = "" message = "Request received from the client to delayed service."
time = 2021-01-21 19:00:48,404 level = INFO  module = "" message = "Request received from the client to healthy service."
# If the request that was sent to the `retry` resource fails due to an error, the client tries sending the request again.
curl http://localhost:9090/retry
Hello World!!!
Subscribe to the newsletter

In the creation of Ballerina, we were inspired by so many technologies. Thank you to all that have come before us (and forgive us if we missed one): Java, Go, C, C++, D, Rust, Haskell, Kotlin, Dart, TypeScript, JavaScript, Python, Perl, Flow, Swift, Elm, RelaxNG, NPM, Crates, Maven, Gradle, Kubernetes, Docker, Envoy, Markdown, GitHub and WSO2.

Cookie Policy

This website uses cookies so that we can provide you with the best user experience. Read our Cookie Policy to find out more.

If you wish to disable cookies you can do so from your browser.

I Understand