本节根据示意图,在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}