{"id":523,"date":"2023-02-20T23:37:56","date_gmt":"2023-02-20T14:37:56","guid":{"rendered":"https:\/\/hirabay.net\/?p=523"},"modified":"2023-02-21T10:59:22","modified_gmt":"2023-02-21T01:59:22","slug":"%e3%80%90%e3%83%88%e3%83%a9%e3%83%96%e3%83%ab%e5%af%be%e5%bf%9c%e3%80%91webclient%e3%81%a7%e3%83%a1%e3%83%a2%e3%83%aa%e3%83%aa%e3%83%bc%e3%82%af%ef%bc%9f","status":"publish","type":"post","link":"https:\/\/hirabay.net\/?p=523","title":{"rendered":"\u3010\u30c8\u30e9\u30d6\u30eb\u5bfe\u5fdc\u3011WebClient\u3067\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\uff1f"},"content":{"rendered":"\n<p>SpringWebFlux\u306eHTTP\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306eWebClient\u3067\u3059\u304c\u3001<br>\u4f7f\u3044\u65b9\u6b21\u7b2c\u3067\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u306e\u53ef\u80fd\u6027\u304c\u3042\u308b\u306e\u3067\u77e5\u3063\u3066\u3044\u308b\u3053\u3068\u3092\u307e\u3068\u3081\u3066\u304a\u304d\u307e\u3059\uff01<\/p>\n\n\n\n<div class=\"toc\"><br \/>\n<b>Warning<\/b>:  Undefined array key \"is_admin\" in <b>\/home\/c4179872\/public_html\/hirabay.net\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>110<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_category_top\" in <b>\/home\/c4179872\/public_html\/hirabay.net\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>115<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_top\" in <b>\/home\/c4179872\/public_html\/hirabay.net\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>122<\/b><br \/>\n    <div id=\"toc_container\" class=\"sgb-toc--bullets js-smooth-scroll\">\n      <p class=\"toc_title\">\u76ee\u6b21 <\/p>\n      <ul class=\"toc_list\">\n  <li class=\"first\">\n    <a href=\"#i-0\">\u524d\u63d0<\/a>\n  <\/li>\n  <li>\n    <a href=\"#i-1\">NG\u4f8b\u2460<\/a>\n  <\/li>\n  <li>\n    <a href=\"#i-2\">NG\u4f8b\u2461<\/a>\n  <\/li>\n  <li class=\"last\">\n    <a href=\"#i-3\">OK\u4f8b<\/a>\n    <ul class=\"menu_level_1\">\n      <li class=\"first\">\n        <a href=\"#i-4\">UriBuiler\u3092\u4f7f\u3044\u305f\u3044\u5834\u5408<\/a>\n      <\/li>\n      <li class=\"last\">\n        <a href=\"#i-5\">SpringBoot 3.0\u3060\u3068\u30fb\u30fb\u30fb<\/a>\n      <\/li>\n    <\/ul>\n  <\/li>\n<\/ul>\n\n      \n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">\u524d\u63d0<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SpringBoot\uff1a2.7.6<\/li>\n\n\n\n<li>actuator\u3092\u4e00\u7dd2\u306b\u5229\u7528<\/li>\n<\/ul>\n\n\n\n<p><code>build.gradle<\/code>\u306f\u3053\u3093\u306a\u611f\u3058<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-groovy\" data-file=\"build.gradle\" data-lang=\"Groovy\"><code>plugins {\n\tid 'java'\n\tid 'org.springframework.boot' version '2.7.6'\n\tid 'io.spring.dependency-management' version '1.1.0'\n}\n\ngroup = 'hirabay'\nversion = '0.0.1-SNAPSHOT'\nsourceCompatibility = '17'\n\nconfigurations {\n\tcompileOnly {\n\t\textendsFrom annotationProcessor\n\t}\n}\n\nrepositories {\n\tmavenCentral()\n}\n\ndependencies {\n\timplementation 'org.springframework.boot:spring-boot-starter-webflux'\n\timplementation 'org.springframework.boot:spring-boot-starter-thymeleaf'\n\timplementation 'org.springframework.boot:spring-boot-starter-actuator'\n\timplementation 'io.micrometer:micrometer-registry-prometheus'\n\tcompileOnly 'org.projectlombok:lombok'\n\tannotationProcessor 'org.projectlombok:lombok'\n}\n\ntasks.named('test') {\n\tuseJUnitPlatform()\n}<\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-1\">NG\u4f8b\u2460<\/h2>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-java\" data-lang=\"Java\"><code>@RequiredArgsConstructor\npublic class WebClientWrapper {\n    private final WebClient.Builder webClientBuilder;\n\n    public Mono&lt;String&gt; ng1() {\n        return webClientBuilder\n                .baseUrl(\"http:\/\/localhost:8080\")\n                .build()\n                .get()\n                .uri(\"\/api\/sample?uuid=\" + UUID.randomUUID().toString())\n                .retrieve()\n                .bodyToMono(String.class);\n    }\n}<\/code><\/pre><\/div>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-bash\" data-file=\"\u30e1\u30c8\u30ea\u30af\u30b9\" data-lang=\"Bash\"><code>$ curl -s http:\/\/localhost:8080\/actuator\/prometheus | grep ^http_client\nhttp_client_requests_seconds_count{client_name=\"localhost\",method=\"GET\",outcome=\"SUCCESS\",status=\"200\",uri=\"\/api\/sample?uuid=c54f4ea5-6ebd-4122-bacb-b6212cb7eab6\",} 1.0\nhttp_client_requests_seconds_sum{client_name=\"localhost\",method=\"GET\",outcome=\"SUCCESS\",status=\"200\",uri=\"\/api\/sample?uuid=c54f4ea5-6ebd-4122-bacb-b6212cb7eab6\",} 0.003281917\nhttp_client_requests_seconds_count{client_name=\"localhost\",method=\"GET\",outcome=\"SUCCESS\",status=\"200\",uri=\"\/api\/sample?uuid=e03dab0e-88cb-48fa-a520-ef8fa3a4db0f\",} 1.0\nhttp_client_requests_seconds_sum{client_name=\"localhost\",method=\"GET\",outcome=\"SUCCESS\",status=\"200\",uri=\"\/api\/sample?uuid=e03dab0e-88cb-48fa-a520-ef8fa3a4db0f\",} 0.054425584\nhttp_client_requests_seconds_max{client_name=\"localhost\",method=\"GET\",outcome=\"SUCCESS\",status=\"200\",uri=\"\/api\/sample?uuid=c54f4ea5-6ebd-4122-bacb-b6212cb7eab6\",} 0.003281917\nhttp_client_requests_seconds_max{client_name=\"localhost\",method=\"GET\",outcome=\"SUCCESS\",status=\"200\",uri=\"\/api\/sample?uuid=e03dab0e-88cb-48fa-a520-ef8fa3a4db0f\",} 0.0<\/code><\/pre><\/div>\n\n\n\n<p>uri\u306b\u30d1\u30e9\u30e1\u30fc\u30bf\u304c\u57cb\u3081\u8fbc\u307e\u308c\u3066\u304a\u308a\u3001\u30d1\u30e9\u30e1\u30fc\u30bf\u3054\u3068\u306b\u30e1\u30c8\u30ea\u30af\u30b9\u304c\u5897\u3048\u3066\u3044\u304d\u307e\u3059\u3002<br>UUID\u306e\u3088\u3046\u306b\u6bce\u56de\u5024\u304c\u5909\u308f\u308b\u3088\u3046\u306a\u5834\u5408\u3060\u3068\u51e6\u7406\u304c\u884c\u308f\u308c\u308b\u305f\u3073\u306b\u30e1\u30e2\u30ea\u3092\u98df\u3044\u6f70\u3057\u3066\u3044\u304d\u307e\u3059\ud83d\ude31\ud83d\ude31\ud83d\ude31<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-2\">NG\u4f8b\u2461<\/h2>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-java\" data-lang=\"Java\"><code>@RequiredArgsConstructor\npublic class WebClientWrapper {\n    private final WebClient.Builder webClientBuilder;\n\n    public Mono&lt;String&gt; ng2() {\n        return webClientBuilder\n                .baseUrl(\"http:\/\/localhost:8080\")\n                .build()\n                .get()\n                .uri(uriBuilder -&gt; uriBuilder.path(\"\/api\/sample\")\n                        .queryParam(\"uuid\", UUID.randomUUID().toString())\n                        .build())\n                .retrieve()\n                .bodyToMono(String.class);\n    }\n}<\/code><\/pre><\/div>\n\n\n\n<p>builder\u4f7f\u3048\u3070<code>queryParam<\/code>\u3067\u30d1\u30e9\u30e1\u30fc\u30bf\u5207\u308a\u51fa\u3057\u3066\u308b\u3057\u30a4\u30b1\u308b\u3084\u308d\u2026\uff01<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-bash\" data-file=\"\u30e1\u30c8\u30ea\u30af\u30b9\" data-lang=\"Bash\"><code>$ curl -s http:\/\/localhost:8080\/actuator\/prometheus | grep ^http_client\nhttp_client_requests_seconds_count{client_name=\"localhost\",method=\"GET\",outcome=\"SUCCESS\",status=\"200\",uri=\"\/api\/sample?uuid=0ce9d034-76e3-4bde-9607-1338b12e7aba\",} 1.0\nhttp_client_requests_seconds_sum{client_name=\"localhost\",method=\"GET\",outcome=\"SUCCESS\",status=\"200\",uri=\"\/api\/sample?uuid=0ce9d034-76e3-4bde-9607-1338b12e7aba\",} 0.003851958\nhttp_client_requests_seconds_count{client_name=\"localhost\",method=\"GET\",outcome=\"SUCCESS\",status=\"200\",uri=\"\/api\/sample?uuid=253e67c4-4e85-4e5c-b770-d1380a6fbceb\",} 1.0\nhttp_client_requests_seconds_sum{client_name=\"localhost\",method=\"GET\",outcome=\"SUCCESS\",status=\"200\",uri=\"\/api\/sample?uuid=253e67c4-4e85-4e5c-b770-d1380a6fbceb\",} 0.06888125\nhttp_client_requests_seconds_max{client_name=\"localhost\",method=\"GET\",outcome=\"SUCCESS\",status=\"200\",uri=\"\/api\/sample?uuid=0ce9d034-76e3-4bde-9607-1338b12e7aba\",} 0.003851958\nhttp_client_requests_seconds_max{client_name=\"localhost\",method=\"GET\",outcome=\"SUCCESS\",status=\"200\",uri=\"\/api\/sample?uuid=253e67c4-4e85-4e5c-b770-d1380a6fbceb\",} 0.06888125<\/code><\/pre><\/div>\n\n\n\n<p>\u30c0\u30e1\u3067\u3057\u305f\u3002\u3002\u3002<\/p>\n\n\n\n<p>uriBuilder\u306fURL\u306e\u751f\u6210\u3092\u88dc\u52a9\u3057\u3066\u304f\u308c\u308b\u3060\u3051\u3067\u3001NG\u4f8b\u2460\u3068\u3084\u3063\u3066\u3044\u308b\u3053\u3068\u306f\u5909\u308f\u3089\u306a\u3044\u3063\u3066\u3053\u3068\u3067\u3059\u306d\u3002\u3002\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-3\">OK\u4f8b<\/h2>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-java\" data-lang=\"Java\"><code>@RequiredArgsConstructor\npublic class WebClientWrapper {\n    private final WebClient.Builder webClientBuilder;\n\n    public Mono&lt;String&gt; ok() {\n        return webClientBuilder\n                .baseUrl(\"http:\/\/localhost:8080\")\n                .build()\n                .get()\n                .uri(\"\/api\/sample?uuid={uuid}\", UUID.randomUUID().toString())\n                .retrieve()\n                .bodyToMono(String.class);\n    }\n}<\/code><\/pre><\/div>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-bash\" data-file=\"\u30e1\u30c8\u30ea\u30af\u30b9\" data-lang=\"Bash\"><code>$ curl -s http:\/\/localhost:8080\/actuator\/prometheus | grep ^http_client\nhttp_client_requests_seconds_count{client_name=\"localhost\",method=\"GET\",outcome=\"SUCCESS\",status=\"200\",uri=\"\/api\/sample?uuid={uuid}\",} 2.0\nhttp_client_requests_seconds_sum{client_name=\"localhost\",method=\"GET\",outcome=\"SUCCESS\",status=\"200\",uri=\"\/api\/sample?uuid={uuid}\",} 0.058212042\nhttp_client_requests_seconds_max{client_name=\"localhost\",method=\"GET\",outcome=\"SUCCESS\",status=\"200\",uri=\"\/api\/sample?uuid={uuid}\",} 0.055181458<\/code><\/pre><\/div>\n\n\n<p><\/p><div class=\"memo \"><div class=\"memo_ttl dfont\"> \u30e1\u30e2<\/div>uri\u30e1\u30bd\u30c3\u30c9\u3067\u3001\u7b2c\u4e00\u5f15\u6570\u306bURL\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092\u3001\u7b2c\u4e8c\u5f15\u6570\u4ee5\u964d\u306b\u5909\u6570\u3092\u6307\u5b9a\u3057\u307e\u3057\u3087\u3046\uff01<\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-4\">UriBuiler\u3092\u4f7f\u3044\u305f\u3044\u5834\u5408<\/h3>\n\n\n\n<p>\u4e8b\u524d\u306buri\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092\u751f\u6210\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-java\" data-lang=\"Java\"><code>    public Mono&lt;String&gt; ok2() {\n        var uri = UriComponentsBuilder.fromPath(\"\/api\/sample\")\n                .queryParam(\"uuid\", \"{uuid}\")\n                .build().toUriString();\n\n        return webClientBuilder\n                .baseUrl(\"http:\/\/localhost:8080\")\n                .build()\n                .get()\n                .uri(uri, UUID.randomUUID().toString())\n                .retrieve()\n                .bodyToMono(String.class);\n    }<\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-5\">SpringBoot 3.0\u3060\u3068\u30fb\u30fb\u30fb<\/h3>\n\n\n\n<p>NG\u4f8b\u2460\u3060\u3068\u540c\u3058\u304fNG\u3067\u3059\u304c\u3001NG\u4f8b\u2461\uff08uriBuilder\u306e\u30d1\u30bf\u30fc\u30f3\uff09\u306f\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u306e\u5bfe\u7b56\u304buri\u304cnone\u306b\u4e38\u3081\u8fbc\u307e\u308c\u3066\u3044\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-bash\" data-file=\"\u30e1\u30c8\u30ea\u30af\u30b9\" data-lang=\"Bash\"><code>$ curl -s http:\/\/localhost:8080\/actuator\/prometheus | grep ^http_client\nhttp_client_requests_active_seconds_active_count{exception=\"none\",method=\"none\",outcome=\"UNKNOWN\",status=\"CLIENT_ERROR\",uri=\"none\",} 0.0\nhttp_client_requests_active_seconds_duration_sum{exception=\"none\",method=\"none\",outcome=\"UNKNOWN\",status=\"CLIENT_ERROR\",uri=\"none\",} 0.0\nhttp_client_requests_active_seconds_max{exception=\"none\",method=\"none\",outcome=\"UNKNOWN\",status=\"CLIENT_ERROR\",uri=\"none\",} 0.0\nhttp_client_requests_seconds_count{error=\"none\",exception=\"none\",method=\"GET\",outcome=\"SUCCESS\",status=\"200\",uri=\"none\",} 3.0\nhttp_client_requests_seconds_sum{error=\"none\",exception=\"none\",method=\"GET\",outcome=\"SUCCESS\",status=\"200\",uri=\"none\",} 0.060628958\nhttp_client_requests_seconds_max{error=\"none\",exception=\"none\",method=\"GET\",outcome=\"SUCCESS\",status=\"200\",uri=\"none\",} 0.052780208<\/code><\/pre><\/div>\n\n\n\n<p>\u305f\u3060\u3001\u3053\u308c\u3060\u3068\u30e1\u30c8\u30ea\u30af\u30b9\u3068\u3057\u3066\u306e\u4fa1\u5024\u304c\u4e0b\u304c\u3063\u3066\u3057\u307e\u3046\u306e\u3067\u3001OK\u4f8b\u306e\u3088\u3046\u306a\u5909\u66f4\u3092\u3059\u308b\u306e\u304c\u30aa\u30b9\u30b9\u30e1\u3067\u3059\uff01<\/p>\n","protected":false},"excerpt":{"rendered":"<p>SpringWebFlux\u306eHTTP\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306eWebClient\u3067\u3059\u304c\u3001\u4f7f\u3044\u65b9\u6b21\u7b2c\u3067\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u306e\u53ef\u80fd\u6027\u304c\u3042\u308b\u306e\u3067\u77e5\u3063\u3066\u3044\u308b\u3053\u3068\u3092\u307e\u3068\u3081\u3066\u304a\u304d\u307e\u3059\uff01 Warning: Undefined array key &#8220;is_ &#8230; <\/p>\n","protected":false},"author":1,"featured_media":526,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[13,48,87],"class_list":{"0":"post-523","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-6","8":"tag-springboot","9":"tag-webclient","10":"tag-87"},"jetpack_featured_media_url":"https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/4f58c9ce798aedcd2b2e756c0f5ea6d2.png","_links":{"self":[{"href":"https:\/\/hirabay.net\/index.php?rest_route=\/wp\/v2\/posts\/523","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hirabay.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hirabay.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hirabay.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hirabay.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=523"}],"version-history":[{"count":3,"href":"https:\/\/hirabay.net\/index.php?rest_route=\/wp\/v2\/posts\/523\/revisions"}],"predecessor-version":[{"id":528,"href":"https:\/\/hirabay.net\/index.php?rest_route=\/wp\/v2\/posts\/523\/revisions\/528"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/hirabay.net\/index.php?rest_route=\/wp\/v2\/media\/526"}],"wp:attachment":[{"href":"https:\/\/hirabay.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=523"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hirabay.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=523"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hirabay.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=523"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}