[SpringBoot]RestTemplateでConnectTimeoutを意図的に発生させる

SpringBoot+Kotlinで外部APIへの接続が遅延した場合を想定して、ConnectTimeoutを起こしてみる。

呼び出し側
RestTemplateのConnectTimeoutを3秒に設定

    private var restTemplate: RestTemplate? = null
    
    init {
        restTemplate = restTemplateBuilder
                .setConnectTimeout(Duration.ofSeconds(3))
                .setReadTimeout(Duration.ofSeconds(3))
                .build()
    }

    fun getTask(taskId: Int): Task? {
        val uri = "$taskApiUrl/tasks/$taskId"

        return restTemplate?.getForObject(uri, Task::class)
    }

外部APIのURLを存在しないIPアドレスに設定

application.yml

external:
task:
url: http://127.0.0.2

実行
http://localhost:8080/tasks/12345

2020-12-12 19:03:57.947  INFO 5809 --- [nio-8080-exec-3] c.e.b.controller.TasksController         : getTask is called with taskId(12345).

2020-12-12 19:04:00.961 ERROR 5809 --- [nio-8080-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.client.ResourceAccessException: I/O error on GET request for "http://127.0.0.2/tasks/12345": Connect timed out; nested exception is java.net.SocketTimeoutException: Connect timed out] with root cause

java.net.SocketTimeoutException: Connect timed out
	at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:546) ~[na:na]
	at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) ~[na:na]

3秒経ってConnectTimeoutが発生するのを確認。

コメントを残す

メールアドレスが公開されることはありません。

ABOUT US
little
15年以上プログラマーをしているエンジニアです。Kotlin, Java, Python, C++を使用したServerSideの開発に携わってきました。とりあえずやってみるスタイルで記事を更新していきます。