Nacos Spring Cloud 入门

Posted by Kaka Blog on October 30, 2020

Nacos下载

最新稳定版本 下载 nacos-server-$version.zip 包。这里下载的是1.3.2版。

启动服务器

startup.cmd -m standalone

用户名和密码默认是:nacos

项目实战

项目结构:

  • provider:服务提供者1
  • provider-2:服务提供者2
  • consumer:消费者

provider项目

pom.xml文件:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.1.7.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        <version>2.1.3.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        <version>2.1.3.RELEASE</version>
    </dependency>
</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Greenwich.SR6</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
  • 注意:这里SpringBoot版本用的是:2.1.13.RELEASE,对应SpringCloud版本:Greenwich.SR6,nacos-config和nacos-discovery版本:2.1.3.RELEASE,其它版本查看版本说明

bootstrap.proerties文件:

spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.application.name=service-provider

application.properties文件:

spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

Java文件:

启动服务发现:

@SpringBootApplication
@EnableDiscoveryClient
public class ProviderApplication {

	public static void main(String[] args) {
		SpringApplication.run(ProviderApplication.class, args);
	}

}

通过 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新:

@RestController("config")
@RefreshScope
public class ConfigController {
    @Value("${useLocalCache:false}")
    private boolean useLocalCache;

    @GetMapping
    public String get() {
        return "return from provider 1: " + useLocalCache;
    }
}

provider-2和provider一样,只是端口号改了。

consumer项目

RestTemplate 实例添加 @LoadBalanced 注解,开启 @LoadBalancedRibbon 的集成:

@SpringBootApplication
public class ConsumerApplication {

	public static void main(String[] args) {
		SpringApplication.run(ConsumerApplication.class, args);
	}

	@Bean
	@LoadBalanced
	public RestTemplate restTemplate() {
		return new RestTemplate();
	}
}

测试

  1. 首先通过调用 Nacos Open API 向 Nacos Server 发布配置:dataId 为service-provider.properties,内容为useLocalCache=true
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=service-provider.properties&group=DEFAULT_GROUP&content=useLocalCache=true"

还可以通过界面修改:

img

  1. 访问 http://localhost:9090/config/get,此时返回内容为true,说明程序中的useLocalCache值已经被动态更新了。负载均衡也起效果。

服务列表:

img

参考资料