nacos官网:Nacos Spring Cloud 快速开始
一、项目准备
1、父工程添加依赖管理
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.3.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2.启动nacos并且配置好测试参数
图:A
图:B
二、实现配置中心
1、子工程添加依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
</dependencies>
2、配置springboot.yml文件
spring:
application:
name: server #服务名
profiles:
active: dev #当前环境的属性
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848 #Nacos服务注册中心地址
file-extension: yaml #指定yaml格式的配置
namespace: e060a0e9-72c7-4e17-bf5a-e0427458d625 #nacos命名空间
group: DEFAULT_GROUP #配置的分组
注意:
1、配置spring.application.name
它是指我们服务名,在众多微服务中起到唯一性标志作用。而且默认配置下"spring.application.name"的值是nacos配置中心的data-id组成的一部分,它会直接影响到配置中心的取数。
2.文件名是"springboot"如果是"application",有可能出现
3、新建ServerController
package com.gdcp.nacos.server1;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @ClassName: ServerController
* @Description TODO
* @Author sugar
* @Date 2022/4/1222:51
*/
@RestController
@RequestMapping("/nacos")
public class ServerController {
@Value("${common.name}")
private String name;
@GetMapping("getname")
public String getName(){
return name;
}
}
当spring对ServerController进行实例化时,会根据@value("${common.name}")注解去找到配置中common.name的值。而"common.name"是配置在nacos配置管理如图:B
4、启动
访问:http://localhost:8080/nacos/getname
说明springboot已经成功从nacos配置管理中取到common.name配置的参数“张三”。实现了微服务配置集中管理。大大提高了维护效率。
三、服务发现
1、子工程添加依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
2、配置springboot.yml文件
server:
port: 8082
spring:
application:
name: server2
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 #nacos服务发现地址
namespace: e060a0e9-72c7-4e17-bf5a-e0427458d625
profiles:
active: dev #当前环境的属性
3、添加@EnableDiscoveryClient
在启动文件添加@EnableDiscoveryClient开启服务发现
再看看nacos如图所示:该服务已经被nacos发现了。
四、Feign远程调用
服务与服务之间通过Feign调用
服务的关系表
序号 | 服务名 | 地址 | 接口功能 |
1 | server2 | 8082/nacos/getproperty | 获取服务参数 |
2 | server | 8080/nacos/getproperty | 调用server2服务8082/nacos/getcurrenttime |
3和4都是用feign来调用1和2
1、添加openfeign依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2、新建ProviderClient接口
并且加上@FeignClient(value="服务名")注解。
package com.gdcp.nacos.server2.feignclient;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
/**
* @ClassName: ProviderClient
* @Description
* @Author sugar
* @Date 2022/4/1323:58
*/
@FeignClient(value="server")
public interface ProviderClient {
@GetMapping("/nacos/getcurrenttime")
String getCurrentTime();
@GetMapping("/nacos/getproperty")
String getProperty();
}
@GetMapping("/nacos/getcurrenttime")
String getCurrentTime();
@GetMapping("/nacos/getproperty")
String getProperty();
这两个方法就是服务提供者的方法名,以及访问路径。
3、Controller分别为
server
@RestController
@RequestMapping("/nacos")
public class ServerController {
private static final Logger log= LoggerFactory.getLogger(ServerController.class);
@Autowired
public ProviderClient feignClient;
@GetMapping("getproperty")
public String getProperty(){
return feignClient.getProperty();
}
}
server2
@RestController
@RequestMapping("/nacos")
public class ServerController {
private static final Logger log= LoggerFactory.getLogger(ServerController.class);
@Autowired
public ProviderClient feignClient;
@Autowired
private Environment env;
@GetMapping("getproperty")
public String getProperty(){
String port = env.getProperty("server.port");
String active = env.getProperty("spring.profiles.active");
String name = env.getProperty("spring.application.name");
return "服务:名"+name+",端口:"+port+",环境:"+active;
}
}
4、添加@EnableFeignClients
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ServerBootstrap {
public static void main(String[] args) {
SpringApplication.run(ServerBootstrap.class,args);
}
}
启动两个服务
5、成果
访问server2获取到了服务参数
访问server,结果也取到server2访问的参数,说明成果实现了server服务调用了server2服务。