В этой статье рассказывается об использовании службы обнаружения Nacos для приложений SpringBoot.
В предыдущей статье рассказывалось об использовании Nacos в SpringBoot в качестве центра конфигурации, а в этой статье рассказывается об использовании Nacos в SpringBoot для обнаружения служб.
1. Эврика с закрытым исходным кодом
Я считаю, что к настоящему времени закрытый исходный код Eureka 2.0 не является чем-то новым. В 2017-2018 годах в Китае прошла чуть ли не волна Spring Cloud, и почти большая часть населения своим вниманием к Spring Boot начала обращать внимание на Spring Cloud. Благодаря преимуществам реестра Eureka, таким как простота интеграции, он является предпочтительным реестром для большинства случаев использования SpringCloud. А вот с анонсом официального сайта Эврики, как следует.
Общий смысл в том, что если работа с открытым исходным кодом остановилась и т. д., я не буду вводить это здесь, если вам интересно, вы можете проверить это на Github-адресе Eureka.GitHub.com/Netflix/Евро….
Nacos также является отличным реестром, исходный код которого открыт для Alibaba. Он был очень популярен в последнее время. Он был обновлен до версии 0.8.0. В основном, он часто обновляется. Это также хороший выбор после закрытия Eureka.
2. SpringBoot использует обнаружение службы Nacos
Прежде всего, вам нужно запустить Nacos, который здесь не будет представлен.
Создайте проект и добавьте зависимость обнаружения службы Nacos nacos-discovery-spring-boot-starter Полный pom показан в листинге кода.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.dalaoyang</groupId>
<artifactId>springboot2_nacos_discovery</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot2_nacos_discovery</name>
<description>springboot2_nacos_discovery</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba.boot/nacos-config-spring-boot-starter -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-discovery-spring-boot-starter</artifactId>
<version>0.2.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Файл конфигурации настраивает адрес службы Nacos, как показано в листинге кода.
server.port=8080
spring.application.name=springboot2-nacos-discovery
nacos.discovery.server-addr=127.0.0.1:8848
SpringBoot использует обнаружение службы Nacos и требует регистрации в службе Nacos.Вы можете использовать Nacos Api для прямой регистрации, как показано в листинге кода.
//curl -X PUT 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=springboot2-nacos-discovery&ip=127.0.0.1&port=8080'
В этой статье используется аннотация @PostConstruct для регистрации в службе Nacos после запуска службы, а метод создания получает экземпляр в соответствии с именем экземпляра Полный класс запуска показан в листинге кода.
package com.dalaoyang;
import com.alibaba.nacos.api.annotation.NacosInjected;
import com.alibaba.nacos.api.exception.NacosException;
import com.alibaba.nacos.api.naming.NamingService;
import com.alibaba.nacos.api.naming.pojo.Instance;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.PostConstruct;
import java.net.InetAddress;
import java.util.List;
import static org.springframework.web.bind.annotation.RequestMethod.GET;
//curl -X PUT 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=springboot2-nacos-discovery&ip=127.0.0.1&port=8080'
@SpringBootApplication
@RestController
public class Springboot2NacosDiscoveryApplication {
@NacosInjected
private NamingService namingService;
@Value("${server.port}")
private int serverPort;
@Value("${spring.application.name}")
private String applicationName;
@PostConstruct
public void registerInstance() throws NacosException{
namingService.registerInstance(applicationName,"127.0.0.1",serverPort);
}
@RequestMapping(value = "/getInstance", method = GET)
@ResponseBody
public List<Instance> getInstance(@RequestParam String serviceName) throws NacosException {
return namingService.getAllInstances(serviceName);
}
public static void main(String[] args) {
SpringApplication.run(Springboot2NacosDiscoveryApplication.class, args);
}
}
В этой статье используются два метода Nacos, а именно:
- registerInstance: существует несколько методов регистрации экземпляра.Метод, используемый в этой статье, должен передавать три параметра, а именно: имя службы, IP-адрес и номер порта.
- getAllInstances: получить экземпляры, передать имя службы.
На этом настройка завершена, запустите проект и просмотрите службу Nacos, как показано на рисунке.
Доступ в браузереhttp://localhost:8080/get?serviceName=springboot2-nacos-discovery, как показано на рисунке, вы также можете запросить только что зарегистрированный экземпляр.
Мы также можем использовать множество Nacos Api, вы можете посетить страницу Nacos Api:что cos.IO/this-capable/docs/…