SpringCloud之Nacos
nacos作为注册中心
服务提供者
-
添加依赖
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
-
配置Nacos注册中心
spring: application: name: example-service # 服务名称,用于注册到Nacos cloud: nacos: discovery: server-addr: localhost:8848 # Nacos注册中心的地址
-
修改主启动类启动服务注册与发现
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
作为服务消费者
-
添加依赖(同服务提供者)
-
配置nacos注册中心(同服务提供者)
-
修改主启动类启动服务注册与发现(同服务提供者)
-
使用(一般不会手动使用,可能要通过api网关啥的使用)
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.discovery.DiscoveryClient; @RestController public class ExampleController { @Autowired private DiscoveryClient discoveryClient; @GetMapping("/consume") public String consumeExampleService() { // 获取 example-service 服务的实例列表 List<ServiceInstance> instances = discoveryClient.getInstances("example-service"); // 选择一个实例进行调用 if (!instances.isEmpty()) { ServiceInstance instance = instances.get(0); String url = instance.getUri() + "/api/example"; // 调用服务接口并返回结果 RestTemplate restTemplate = new RestTemplate(); return restTemplate.getForObject(url, String.class); } return "No available instance."; } }
nacos作为配置中心
-
添加依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
-
配置Nacos服务器信息
spring: cloud: nacos: config: server-addr: localhost:8848 # Nacos服务器的地址
-
创建配置文件
在Nacos服务器中创建配置文件,可以通过Nacos的管理界面或使用API进行创建。例如,创建一个名为
example-service.properties
的配置文件,内容如下:message=Hello, Nacos!
-
使用配置
import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class ExampleController { @Value("${message}") private String message; @GetMapping("/message") public String getMessage() { return message; } }