服务发现

SpringCloudAlibaba Nacos 服务发现


本节根据示意图,在spring cloud项目中启用Nacos的服务发现功能

1.引入依赖

在父工程的canary-book-root构建脚本build.grade文件中的依赖管理器添加SpringCloudAlibaba的依赖管理:
		buildscript {
    ext {
        //springCloud和springBoot版本是相互关联的
        springBootVersion = '2.7.4'
        springCloudVersion = '2021.0.4'
    }
    repositories {
        mavenLocal()//添加本地长裤
        maven { url 'https://maven.aliyun.com/repository/central' } //私有仓库,阿里云镜像
        mavenCentral()//maven中央仓库
    }
    dependencies {
        classpath "org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}"
    }
}

allprojects {
    apply plugin : 'java'

    group 'edu.uestc.avatar'
    version '1.0-SNAPSHOT'
    sourceCompatibility = 17
    //targetCompatibility = 17

    repositories {
        mavenLocal()//添加本地长裤
        maven { url 'https://maven.aliyun.com/repository/central' } //私有仓库,阿里云镜像
        mavenCentral()//maven中央仓库
    }

    //构建的字符编码
    tasks.withType(JavaCompile){
        options.encoding = 'UTF-8'
    }
    test {
        useJUnitPlatform()
    }
}
//所有子项目
subprojects {
    apply plugin: 'org.springframework.boot' //spring boot插件
    apply plugin: 'io.spring.dependency-management' //spring boot依赖管理插件
    //apply plugin: 'com.alibaba.cloud:spring-cloud-alibaba-dependencies'

    dependencies {
        //lombok
        compileOnly 'org.projectlombok:lombok:1.18.24'
        annotationProcessor "org.projectlombok:lombok:1.18.24"

        //每个子模块都需要logback记录日志,其实springboot已经内置
        implementation 'ch.qos.logback:logback-classic:1.2.11'
        //javax扩展规范
        implementation 'javax.annotation:javax.annotation-api:1.3.2'

        //每个子模块集成spring boot单元测试
        testImplementation 'org.springframework.boot:spring-boot-starter-test'

        testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
        testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
    }
    //依赖管理器
    dependencyManagement {
        imports {
            mavenBom "org.springframework.boot:spring-boot-dependencies:${springBootVersion}"
            mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
            mavenBom "com.alibaba.cloud:spring-cloud-alibaba-dependencies:2021.0.4.0"
        }
    }
}
	

在服务提供者及消费者工程构建脚本build.gradle中添加依赖:

implementation 'com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery'

2.配置服务提供者category-service,从而服务提供者可以通过 Nacos 的服务注册发现功能将其服务注册到 Nacos server 上。

i. 在 application.properties 中配置 Nacos server 的地址

	server.port=8070
spring.application.name=category-service

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

ii.通过 Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能:

	
@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(NacosProviderApplication.class, args);
    }
}
	

3.配置服务消费者book-service,从而服务消费者可以通过 Nacos 的服务注册发现功能从 Nacos server 上获取到它要调用的服务。

i. 在 application.properties 中配置 Nacos server 的地址:

	server.port=8070
spring.application.name=book-service

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

ii. 通过 Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能。给 RestTemplate 实例添加 @LoadBalanced 注解,开启 @LoadBalanced 与 spring-cloud-starter-loadbalancer 的集成:

	
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApplication {

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

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

需要导入依赖:

implementation 'org.springframework.cloud:spring-cloud-starter-loadbalancer'

启动 ProviderApplication 和 ConsumerApplication ,重启微服务后,登录nacos管理页面,可以看到微服务信息: 调用 http://localhost:8080/category/1,返回:

{"id":1,"title":"射雕英雄传","author":"金庸","sellPrice":120.0,"marketPrice":200.0,"buyPrice":20.0,"coverPath":null,"publishedDate":"2022-09-10","publisher":"三联出版社","intro":null,"categoryId":9,"category":{"id":9,"name":"武侠","describe":"小说-武侠","parent":null,"child":[]},"savedPrice":80.0}