{"id":1469,"date":"2023-03-24T22:23:59","date_gmt":"2023-03-24T14:23:59","guid":{"rendered":"https:\/\/www.appblog.cn\/?p=1469"},"modified":"2023-04-28T20:35:41","modified_gmt":"2023-04-28T12:35:41","slug":"spring-cloud-integrate-nacos","status":"publish","type":"post","link":"https:\/\/www.appblog.cn\/index.php\/2023\/03\/24\/spring-cloud-integrate-nacos\/","title":{"rendered":"Spring Cloud \u96c6\u6210 Nacos"},"content":{"rendered":"<p>\u4ecb\u7ecd\u5982\u4f55\u4f7f\u7528 Nacos \u6765\u5b9e\u73b0 Spring Cloud \u5206\u5e03\u5f0f\u73af\u5883\u4e0b\u7684\u914d\u7f6e\u7ba1\u7406\u548c\u670d\u52a1\u6ce8\u518c\u53d1\u73b0\u3002<\/p>\n<p>\u5173\u4e8e Nacos Spring Cloud \u7684\u8be6\u7ec6\u6587\u6863\u8bf7\u53c2\u770b\uff1a<a target=\"_blank\" rel=\"noopener\" href=\"https:\/\/github.com\/spring-cloud-incubator\/spring-cloud-alibaba\/wiki\/Nacos-config\" title=\"Nacos Config\">Nacos Config<\/a> \u548c <a target=\"_blank\" rel=\"noopener\" href=\"https:\/\/github.com\/spring-cloud-incubator\/spring-cloud-alibaba\/wiki\/Nacos-discovery\" title=\"Nacos Discovery\">Nacos Discovery<\/a>\u3002<\/p>\n<p>\u901a\u8fc7 <code>Nacos Server<\/code> \u548c <code>spring-cloud-starter-alibaba-nacos-config<\/code> \u5b9e\u73b0\u914d\u7f6e\u7684\u52a8\u6001\u53d8\u66f4\u3002<br \/>\n\u901a\u8fc7 <code>Nacos Server<\/code> \u548c <code>spring-cloud-starter-alibaba-nacos-discovery<\/code> \u5b9e\u73b0\u670d\u52a1\u7684\u6ce8\u518c\u4e0e\u53d1\u73b0\u3002<\/p>\n<p><!-- more --><\/p>\n<h2>\u542f\u52a8\u914d\u7f6e\u7ba1\u7406<\/h2>\n<p>\u542f\u52a8 Nacos server \u540e\uff0c\u5373\u53ef\u4e3a Spring Cloud \u5e94\u7528\u914d\u7f6e Nacos \u5ba2\u6237\u7aef\u3002\u5b8c\u6574\u793a\u4f8b\u4ee3\u7801\u8bf7\u53c2\u8003\uff1a<a target=\"_blank\" rel=\"noopener\" href=\"https:\/\/github.com\/nacos-group\/nacos-examples\/tree\/master\/nacos-spring-cloud-example\/nacos-spring-cloud-config-example\" title=\"nacos-spring-cloud-config-example\">nacos-spring-cloud-config-example<\/a><\/p>\n<p>\uff081\uff09\u6dfb\u52a0\u4f9d\u8d56\uff1a<\/p>\n<pre><code class=\"language-xml\">&lt;dependency&gt;\n    &lt;groupId&gt;org.springframework.cloud&lt;\/groupId&gt;\n    &lt;artifactId&gt;spring-cloud-starter-alibaba-nacos-config&lt;\/artifactId&gt;\n    &lt;version&gt;${latest.version}&lt;\/version&gt;\n&lt;\/dependency&gt;<\/code><\/pre>\n<blockquote>\n<p>\u6ce8\u610f\uff1a\u7248\u672c 0.2.x.RELEASE \u5bf9\u5e94\u7684\u662f Spring Boot 2.x \u7248\u672c\uff0c\u7248\u672c 0.1.x.RELEASE \u5bf9\u5e94\u7684\u662f Spring Boot 1.x \u7248\u672c<\/p>\n<\/blockquote>\n<p>\uff082\uff09\u5728<code>bootstrap.properties<\/code>\u4e2d\u914d\u7f6e<code>Nacos server<\/code>\u7684\u5730\u5740\u548c\u5e94\u7528\u540d<\/p>\n<pre><code>spring.cloud.nacos.config.server-addr=127.0.0.1:8848\n\nspring.application.name=example<\/code><\/pre>\n<p>\u8bf4\u660e\uff1a\u4e4b\u6240\u4ee5\u9700\u8981\u914d\u7f6e<code>spring.application.name<\/code>\uff0c\u662f\u56e0\u4e3a\u5b83\u662f\u6784\u6210 Nacos \u914d\u7f6e\u7ba1\u7406<code>dataId<\/code>\u5b57\u6bb5\u7684\u4e00\u90e8\u5206\u3002<\/p>\n<p>\u5728 Nacos Spring Cloud \u4e2d\uff0cdataId \u7684\u5b8c\u6574\u683c\u5f0f\u5982\u4e0b\uff1a<\/p>\n<pre><code>${prefix}-${spring.profile.active}.${file-extension}<\/code><\/pre>\n<ul>\n<li><code>prefix<\/code>\u9ed8\u8ba4\u4e3a<code>spring.application.name<\/code>\u7684\u503c\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7\u914d\u7f6e\u9879<code>spring.cloud.nacos.config.prefix<\/code>\u6765\u914d\u7f6e<\/li>\n<li><code>spring.profile.active<\/code>\u5373\u4e3a\u5f53\u524d\u73af\u5883\u5bf9\u5e94\u7684profile\uff0c\u5f53<code>spring.profile.active<\/code>\u4e3a\u7a7a\u65f6\uff0c\u5bf9\u5e94\u7684\u8fde\u63a5\u7b26<code>-<\/code>\u4e5f\u5c06\u4e0d\u5b58\u5728\uff0c<code>dataId<\/code>\u7684\u62fc\u63a5\u683c\u5f0f\u53d8\u6210<code>${prefix}.${file-extension}<\/code><\/li>\n<li><code>file-exetension<\/code>\u4e3a\u914d\u7f6e\u5185\u5bb9\u7684\u6570\u636e\u683c\u5f0f\uff0c\u53ef\u4ee5\u901a\u8fc7\u914d\u7f6e\u9879<code>spring.cloud.nacos.config.file-extension<\/code>\u6765\u914d\u7f6e\u3002\u76ee\u524d\u53ea\u652f\u6301<code>properties<\/code>\u548c<code>yaml<\/code>\u7c7b\u578b<\/li>\n<\/ul>\n<p>\uff083\uff09\u901a\u8fc7 Spring Cloud \u539f\u751f\u6ce8\u89e3<code>@RefreshScope<\/code>\u5b9e\u73b0\u914d\u7f6e\u81ea\u52a8\u66f4\u65b0\uff1a<\/p>\n<pre><code class=\"language-java\">@RestController\n@RequestMapping(&quot;\/config&quot;)\n@RefreshScope\npublic class ConfigController {\n\n    @Value(&quot;${useLocalCache:false}&quot;)\n    private boolean useLocalCache;\n\n    @RequestMapping(&quot;\/get&quot;)\n    public boolean get() {\n        return useLocalCache;\n    }\n}<\/code><\/pre>\n<p>\uff084\uff09\u9996\u5148\u901a\u8fc7\u8c03\u7528 <a target=\"_blank\" rel=\"noopener\" href=\"https:\/\/nacos.io\/zh-cn\/docs\/open-API.html\" title=\"Nacos Open API\">Nacos Open API<\/a> \u5411 Nacos Server \u53d1\u5e03\u914d\u7f6e\uff1a<code>dataId<\/code>\u4e3a<code>example.properties<\/code>\uff0c\u5185\u5bb9\u4e3a<code>useLocalCache=true<\/code><\/p>\n<pre><code>curl -X POST &quot;http:\/\/127.0.0.1:8848\/nacos\/v1\/cs\/configs?dataId=example.properties&amp;group=DEFAULT_GROUP&amp;content=useLocalCache=true&quot;<\/code><\/pre>\n<p>\uff085\uff09\u8fd0\u884c NacosConfigApplication\uff0c\u8c03\u7528<code>curl http:\/\/localhost:8080\/config\/get<\/code>\uff0c\u8fd4\u56de\u5185\u5bb9\u662f true\u3002<\/p>\n<p>\uff086\uff09\u518d\u6b21\u8c03\u7528 <a target=\"_blank\" rel=\"noopener\" href=\"https:\/\/nacos.io\/zh-cn\/docs\/open-API.html\" title=\"Nacos Open API\">Nacos Open API<\/a> \u5411 Nacos server \u53d1\u5e03\u914d\u7f6e\uff1a<code>dataId<\/code>\u4e3a<code>example.properties<\/code>\uff0c\u5185\u5bb9\u4e3a<code>useLocalCache=false<\/code><\/p>\n<pre><code>curl -X POST &quot;http:\/\/127.0.0.1:8848\/nacos\/v1\/cs\/configs?dataId=example.properties&amp;group=DEFAULT_GROUP&amp;content=useLocalCache=false&quot;<\/code><\/pre>\n<p>\u518d\u6b21\u8bbf\u95ee<code>http:\/\/localhost:8080\/config\/get<\/code>\uff0c\u6b64\u65f6\u8fd4\u56de\u5185\u5bb9\u4e3afalse\uff0c\u8bf4\u660e\u7a0b\u5e8f\u4e2d\u7684<code>useLocalCache<\/code>\u503c\u5df2\u7ecf\u88ab\u52a8\u6001\u66f4\u65b0\u3002<\/p>\n<h2>\u542f\u52a8\u670d\u52a1\u53d1\u73b0<\/h2>\n<p>\u901a\u8fc7\u5b9e\u73b0\u4e00\u4e2a\u7b80\u5355\u7684 echo service \u6f14\u793a\u5982\u4f55\u5728 Spring Cloud \u9879\u76ee\u4e2d\u542f\u7528 Nacos \u7684\u670d\u52a1\u53d1\u73b0\u529f\u80fd\uff0c\u5982\u4e0b\u56fe\u793a:<\/p>\n<p>\u5b8c\u6574\u793a\u4f8b\u4ee3\u7801\u8bf7\u53c2\u8003\uff1a<a target=\"_blank\" rel=\"noopener\" href=\"https:\/\/github.com\/nacos-group\/nacos-examples\/tree\/master\/nacos-spring-cloud-example\/nacos-spring-cloud-discovery-example\" title=\"nacos-spring-cloud-discovery-example\">nacos-spring-cloud-discovery-example<\/a><\/p>\n<p>\uff081\uff09\u6dfb\u52a0\u4f9d\u8d56\uff1a<\/p>\n<pre><code class=\"language-xml\">&lt;dependency&gt;\n    &lt;groupId&gt;org.springframework.cloud&lt;\/groupId&gt;\n    &lt;artifactId&gt;spring-cloud-starter-alibaba-nacos-discovery&lt;\/artifactId&gt;\n    &lt;version&gt;${latest.version}&lt;\/version&gt;\n&lt;\/dependency&gt;<\/code><\/pre>\n<blockquote>\n<p>\u6ce8\u610f\uff1a\u7248\u672c 0.2.x.RELEASE \u5bf9\u5e94\u7684\u662f Spring Boot 2.x \u7248\u672c\uff0c\u7248\u672c 0.1.x.RELEASE \u5bf9\u5e94\u7684\u662f Spring Boot 1.x \u7248\u672c<\/p>\n<\/blockquote>\n<p>\uff082\uff09\u914d\u7f6e\u670d\u52a1\u63d0\u4f9b\u8005\uff0c\u4ece\u800c\u670d\u52a1\u63d0\u4f9b\u8005\u53ef\u4ee5\u901a\u8fc7 Nacos \u7684\u670d\u52a1\u6ce8\u518c\u53d1\u73b0\u529f\u80fd\u5c06\u5176\u670d\u52a1\u6ce8\u518c\u5230 Nacos server \u4e0a\u3002<\/p>\n<p>\u9996\u5148\u5728<code>application.properties<\/code>\u4e2d\u914d\u7f6e<code>Nacos server<\/code>\u7684\u5730\u5740\uff1a<\/p>\n<pre><code>server.port=8070\nspring.application.name=service-provider\n\nspring.cloud.nacos.discovery.server-addr=127.0.0.1:8848<\/code><\/pre>\n<p>\u7136\u540e\u901a\u8fc7 Spring Cloud \u539f\u751f\u6ce8\u89e3<code>@EnableDiscoveryClient<\/code>\u5f00\u542f\u670d\u52a1\u6ce8\u518c\u53d1\u73b0\u529f\u80fd\uff1a<\/p>\n<pre><code class=\"language-java\">@SpringBootApplication\n@EnableDiscoveryClient\npublic class NacosProviderApplication {\n\n    public static void main(String[] args) {\n        SpringApplication.run(NacosProviderApplication.class, args);\n    }\n\n    @RestController\n    class EchoController {\n        @RequestMapping(value = &quot;\/echo\/{string}&quot;, method = RequestMethod.GET)\n        public String echo(@PathVariable String string) {\n            return &quot;Hello Nacos Discovery &quot; + string;\n        }\n    }\n}<\/code><\/pre>\n<p>\uff083\uff09\u914d\u7f6e\u670d\u52a1\u6d88\u8d39\u8005\uff0c\u4ece\u800c\u670d\u52a1\u6d88\u8d39\u8005\u53ef\u4ee5\u901a\u8fc7 Nacos \u7684\u670d\u52a1\u6ce8\u518c\u53d1\u73b0\u529f\u80fd\u4ece Nacos server \u4e0a\u83b7\u53d6\u5230\u5b83\u8981\u8c03\u7528\u7684\u670d\u52a1\u3002<\/p>\n<p>\u9996\u5148\u5728<code>application.properties<\/code>\u4e2d\u914d\u7f6e<code>Nacos server<\/code>\u7684\u5730\u5740\uff1a<\/p>\n<pre><code>server.port=8080\nspring.application.name=service-consumer\n\nspring.cloud.nacos.discovery.server-addr=127.0.0.1:8848<\/code><\/pre>\n<p>\u7136\u540e\u901a\u8fc7 Spring Cloud \u539f\u751f\u6ce8\u89e3<code>@EnableDiscoveryClient<\/code>\u5f00\u542f\u670d\u52a1\u6ce8\u518c\u53d1\u73b0\u529f\u80fd\u3002\u7ed9<code>RestTemplate<\/code>\u5b9e\u4f8b\u6dfb\u52a0<code>@LoadBalanced<\/code>\u6ce8\u89e3\uff0c\u5f00\u542f<code>@LoadBalanced<\/code>\u4e0e Ribbon \u7684\u96c6\u6210\uff1a<\/p>\n<pre><code class=\"language-java\">@SpringBootApplication\n@EnableDiscoveryClient\npublic class NacosConsumerApplication {\n\n    @LoadBalanced\n    @Bean\n    public RestTemplate restTemplate() {\n        return new RestTemplate();\n    }\n\n    public static void main(String[] args) {\n        SpringApplication.run(NacosConsumerApplication.class, args);\n    }\n\n    @RestController\n    public class TestController {\n\n        private final RestTemplate restTemplate;\n\n        @Autowired\n        public TestController(RestTemplate restTemplate) {this.restTemplate = restTemplate;}\n\n        @RequestMapping(value = &quot;\/echo\/{str}&quot;, method = RequestMethod.GET)\n        public String echo(@PathVariable String str) {\n            return restTemplate.getForObject(&quot;http:\/\/service-provider\/echo\/&quot; + str, String.class);\n        }\n    }\n}<\/code><\/pre>\n<p>\u542f\u52a8 ProviderApplication \u548c ConsumerApplication \uff0c\u8c03\u7528<code>http:\/\/localhost:8080\/echo\/2018<\/code>\uff0c\u8fd4\u56de\u5185\u5bb9\u4e3a<code>Hello Nacos Discovery 2018<\/code>\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4ecb\u7ecd\u5982\u4f55\u4f7f\u7528 Nacos \u6765\u5b9e\u73b0 Spring Cloud \u5206\u5e03\u5f0f\u73af\u5883\u4e0b\u7684\u914d\u7f6e\u7ba1\u7406\u548c\u670d\u52a1\u6ce8\u518c\u53d1\u73b0\u3002 \u5173\u4e8e Na [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17,42],"tags":[],"class_list":["post-1469","post","type-post","status-publish","format-standard","hentry","category-nacos","category-spring-cloud"],"_links":{"self":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/1469","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/comments?post=1469"}],"version-history":[{"count":0,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/1469\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/media?parent=1469"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/categories?post=1469"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/tags?post=1469"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}