侧边栏壁纸
  • 累计撰写 25 篇文章
  • 累计创建 27 个标签
  • 累计收到 43 条评论

目 录CONTENT

文章目录

spring-cloud 集成nacos(一) 使用服务注册与发现、配置中心

junior
2022-10-19 / 0 评论 / 0 点赞 / 555 阅读 / 5,103 字

前言

文章使用的代码在gitee仓库可以自行克隆。

准备工作

1. 使用nacos需要注意版本对应,下面给出本文使用的版本对应关系

Spring Cloud Alibaba Version Spring Cloud Version Spring Boot Version Nacos Version
2.2.1.RELEASE Spring Cloud Hoxton.SR8 2.2.5.RELEASE 1.2.1

2. 创建一个maven项目,在主模块pom文件中加入以下依赖

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.5.RELEASE</version>
        <relativePath/>
    </parent>

    <properties>
        <spring-cloud.version>Hoxton.SR8</spring-cloud.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.1.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

3. 创建用户模块 user-service 和订单模块 order-service,在各自的pom文件中分别添加上nacos服务发现和配置依赖

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- nacos-服务注册与发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!-- nacos-远程配置-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

    </dependencies>

4. 从github上下载 nacos 1.2.1,并在本地运行

  • nacos 默认启动端口是8848,如果已经被占用,需要修改nacos端口
    擷取15
  • 从nacos的bin目录使用下面的命令启动nacos
startup.cmd -m standalone 
  • 访问:http://localhost:8848/nacos 使用账号:nacos 密码:nacos 登录。新增一个nacos-test命名空间,将我们的服务和配置都放在这个命名空间里


擷取16

编写测试代码

  • 编辑order-service的bootstrap.yml,添加配置
spring:
  application:
    name: orderservice  # nacos的服务名称
  profiles:
    active: dev # 开发环境,这里是dev
  cloud:
    nacos:
      discovery: #服务注册与发现
        server-addr: localhost:8848 #nacos地址
        namespace: nacos-test #指定命名空间 可以删掉namespace不写默认public
      config:	#nacos配置中心
        server-addr: localhost:8848 #nacos地址
        file-extension: yml  # 文件后缀名
        namespace: nacos-test #指定命名空间 可以删掉namespace不写默认public

server:
  port: 8093  #指定端口
  • 编辑user-service的application.yml,添加配置
spring:
  application:
    name: userservice  # nacos的服务名称
  profiles:
    active: dev # 开发环境,这里是dev
  cloud:
    nacos:
      discovery: #服务注册与发现
        server-addr: localhost:8848 #nacos地址
        namespace: nacos-test #指定命名空间 可以删掉namespace不写默认public
      config:	#nacos配置中心
        server-addr: localhost:8848 #nacos地址
        file-extension: yml  # 文件后缀名
        namespace: nacos-test #指定命名空间 可以删掉namespace不写默认public

server:
  port: 8083  #指定端口
  • 在order-service的启动类中为RestTemplate添加@LoadBalanced注解(user-service和这个相同)
@SpringBootApplication
public class OrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }
    //交给Bean管理
    //@LoadBalanced :让RestTemplate 有负载均衡的能力
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

}
  • order-service编写一个控制类
@RestController
@RefreshScope	// 支持热刷新,无需重启项目使nacos上配置更改能应用到项目中
public class OrderController {

    @Autowired
    private RestTemplate restTemplate;

    // 通过从nacos配置中心获取
    @Value("${goods}")
    private String goods;

    @GetMapping("/order")
    public String order() {
        //  不使用nacos服务注册和发现
        //  String user = restTemplate.getForObject("http://localhost:8083/getUser/", String.class);
        // 使用nacos中ribbon通过微服务名代替ip加端口号  这里访问user-service的微服务
        String user = restTemplate.getForObject("http://userservice/getUser/", String.class);
        System.out.println("打印订单");
        return "订单:" + goods + "===== 购买人:" + user;
    }

    @GetMapping("/getGoods")
    public String getGoods() {
        System.out.println("获取商品");
        return goods;
    }

}

  • user-service编写一个控制类
@RestController
@RefreshScope	// 支持热刷新,无需重启项目使nacos上配置更改能应用到项目中
public class UserController {

    @Autowired
    private RestTemplate restTemplate;

    // 通过从nacos配置中心获取
    @Value("${user}")
    private String user;


    @GetMapping("/buy")
    public String buy() {
        //  不使用nacos服务注册和发现
        //  String user = restTemplate.getForObject("http://localhost:8093/getGoods/", String.class);
        // 使用nacos中ribbon通过微服务名代替ip加端口号  这里访问order-service的微服务
        String goods = restTemplate.getForObject("http://orderservice/getGoods/" , String.class);
        System.out.println("购买商品");
        return "用户:" + user + "买了一个:" + goods;
    }

    @GetMapping("/getUser")
    public String getUser() {
        System.out.println("获取用户名");
        return user;
    }

}

启动两个微服务

1. 在naco配置列表页面选择我们之前创建的命名空间,然后创建两个配置文件,dataId命名规则:

${prefix}-${spring.profiles.active}.${file-extension}

擷取19
2. userservice-dev.yml内容为:
擷取20
3. orderservice-dev.yml内容为:
擷取21
4. 启动user-service跟order-service服务,可以在nacos中看到服务:
擷取22

访问接口调用另一个服务

擷取23
擷取24

0

评论区