springcloud集成nacos的配置中心,注册中心

看这篇文章前可以先看我的之前文章 springboot集成nacos

配置中心

创建2个springcloud服务cloud-order-service和cloud-user-service,并导入pom包

注意:版本 0.2.x.RELEASE 对应的是 Spring Boot 2.x 版本,版本 0.1.x.RELEASE 对应的是 Spring Boot 1.x 版本。

<!-- 配置管理功能依赖 -->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
	<version>0.2.2.RELEASE</version>
</dependency>

bootstrap.properties中配置nacos.config.server的地址以及spring.application.name

spring.application.name=cloud-order-service
server.port=8803

# 配置中心地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
# 配置中心-指定命名空间,nacos控制台创建的
spring.cloud.nacos.config.namespace=8bdc6474-18c5-4841-a14d-d09d0957c948
# 指定配置文件后缀
spring.cloud.nacos.config.file-extension=properties


spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8

说明:之所以需要配置 spring.application.name ,是因为它是构成 Nacos 配置管理 dataId字段的一部分,在 Nacos Spring Cloud 中,dataId 的完整格式:

  •     ${prefix}-${spring.profile.active}.${file-extension}
  •     prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
  •     spring.profile.active 即为当前环境对应的 profile,当 spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
  •     file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型
spring.application.name=cloud-user-service
server.port=8804

# 配置中心地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
# 配置中心-指定命名空间,nacos控制台创建的
spring.cloud.nacos.config.namespace=8bdc6474-18c5-4841-a14d-d09d0957c948
# 指定配置文件后缀
spring.cloud.nacos.config.file-extension=properties


spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8

我这里使用了一个namespace让springcloud的服务配置放在了dev的namespace下面

新建一个CloudOrderController获取配置文件的值,通过Spring原生注解 @Value 注解设置属性值,通过 SpringCloud 原生注解@RefreshScope 实现配置自动更新

@Slf4j
@RefreshScope
@RestController
@RequestMapping("/cloudOrder")
public class ClourOrderController extends BaseController {

    @Value("${nacos.test:132}")
    String nacosTest;

    @GetMapping("/getProperties")
    public Results getProperties() {
        return succeed(nacosTest);
    }

}

同理新建一个CloudUserController获取配置文件的值

@Slf4j
@RefreshScope
@RestController
@RequestMapping("/cloudUser")
public class CloudUserController extends BaseController {
    @Value("${nacos.test:132}")
    String nacosTest;

    @GetMapping("/getProperties")
    public Results getProperties() {
        return succeed(nacosTest);
    }
}

Nacos控制台增加配置参数,注意springcloud的配置参数必须是properties或者yml格式,在新建配置参数Data ID的时候必须增加后缀.properties或者.yml才能获取到

浏览器访问 http://localhost:8803/cloudOrder/getProperties 就可以获取到nacos配置中心的值

注册中心

pom增加配置

<!-- -服务发现功能依赖 -->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
	<version>0.2.2.RELEASE</version>
</dependency>

bootstrap.properties增加注册中心配置

spring.application.name=cloud-order-service
server.port=8803

# 配置中心地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
# 配置中心-指定命名空间
spring.cloud.nacos.config.namespace=8bdc6474-18c5-4841-a14d-d09d0957c948
# 指定配置文件后缀
spring.cloud.nacos.config.file-extension=properties

# 注册中心地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
# 指定命名空间
spring.cloud.nacos.discovery.namespace=8bdc6474-18c5-4841-a14d-d09d0957c948


spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8

我这里也指定了命名空间,配置好了后启动服务就可以在服务列表找到新加的服务

新增接口调用 cloud-order-service服务调用cloud-user-servicfe接口获取用户名

通过 SpringCloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能,注册一个RestTemplate实例用以发送请求,给RestTemplate实例添加@LoadBalanced注解,开启与Ribbon的集成用于负载均衡

@EnableDiscoveryClient
@SpringBootApplication
public class CloudOrderServiceApplication {

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

    @PostConstruct
    void setDefaultTimeZone() {
        TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
    }

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

新建CloudUserController接口,创建一个获取用户名的接口

@Slf4j
@RefreshScope
@RestController
@RequestMapping("/cloudUser")
public class CloudUserController extends BaseController {
    @Value("${nacos.test:132}")
    String nacosTest;

    @GetMapping("/getProperties")
    public Results getProperties() {
        return succeed(nacosTest);
    }

    /**
     * 获取用户名
     * @return
     */
    @GetMapping("/getUserName")
    public String getUserName() {
        return "lockie";
    }
}

新建一个CloudOrderController,创建一个获取订单接口,里面调用cloud-user-service的getUserName接口

@Slf4j
@RefreshScope
@RestController
@RequestMapping("/cloudOrder")
public class ClourOrderController extends BaseController {

    @Value("${nacos.test:132}")
    String nacosTest;

    @Autowired
    private RestTemplate restTemplate;

    private final static String USER_SERVICE = "cloud-user-service";
    private final static String GET_USER_NAME = "/cloudUser/getUserName";

    @GetMapping("/getProperties")
    public Results getProperties() {
        return succeed(nacosTest);
    }

    /**
     * 获取订单信息
     * @return
     */
    @GetMapping("/getOrder")
    public Results getOrder() {
        // 获取用户名
        String userName = restTemplate.getForObject("http://" + USER_SERVICE + GET_USER_NAME, String.class);

        Order order = new Order();
        order.setId(1);
        order.setUserName(userName);
        order.setCreateTime(new Date());

        return succeed(order);
    }
}

浏览器访问http://localhost:8803/cloudOrder/getOrder 获取订单信息,里面调用了cloud-user-service获取用户名

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值