SpringBoot использует обнаружение службы Nacos

Spring Boot

В этой статье рассказывается об использовании службы обнаружения 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/…