springcloud usa nacos para el registro y descubrimiento de servicios

Desde el código abierto de spring-cloud-alibaba, el registro y descubrimiento de servicios usando nacos en springcloud se ha vuelto muy fácil, solo necesita introducir "spring-cloud-starter-alibaba-nacos-discovery", y luego abrir @EnableDiscoveryClient puede reemplace sin problemas registros como eureka y consul.

A continuación se muestra cómo usar nacos en springcloud dando un caso simple.

principio de estado de descubrimiento de nacos

Primero, echemos un vistazo al principio de registro y descubrimiento de servicios en nacos en springcloud.

registro de servicio

spring-cloud-starter-alibaba-nacos-discovery sigue el estándar spring-cloud-common e implementa las tres interfaces de AutoServiceRegistration, ServiceRegistry y Registration.

En la fase de inicio de la aplicación springcloud, se monitorea el evento WebServerInitializedEvent.Cuando se inicializa el contenedor web, es decir, después de recibir el evento WebServerInitializedEvent, se activará la acción de registro y se llamará al método de registro de ServiceRegistry para registrarse. el servicio al Servidor Nacos.

descubrimiento de servicios

NacosServerList implementa la interfaz com.netflix.loadbalancer.ServerList y realiza la inyección automática bajo la condición de @ConditionOnMissingBean, e integra Ribbon de forma predeterminada.

Si necesita uno más personalizado, puede usar @Autowired para inyectar una instancia de NacosRegistration y llamar directamente a la API de Nacos a través del contenido del campo NamingService que contiene.

nacos-proveedor-de-servicios

Cree un proyecto de springcloud de proveedor de servicios e introduzca las siguientes dependencias:

    <properties>
        <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
        <spring-cloud.alibaba.version>0.2.1.RELEASE</spring-cloud.alibaba.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud.alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>

Configure la información de configuración relacionada con nacos en el archivo application.yml del proyecto de la siguiente manera:

Si no desea utilizar Nacos como registro y descubrimiento de su servicio, puede establecer spring.cloud.nacos.discovery en falso.

spring:
  application:
    name: nacos-service-provider
  cloud:
    nacos:
      discovery:
        register-enabled: true
        server-addr: 127.0.0.1:8848
        weight: 1
        namespace: dev
management:
  endpoints:
    web:
      exposure:
        include: "*"

server:
  port: 8080

El siguiente paso es crear un servicio para que lo use la persona que llama. No olvide introducir la anotación @EnableDiscoveryClient en la función principal.

package com.lazycece.scac.nacos.discovery.provider.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author lazycece
 * @date 2019/03/19
 */
@RestController
@RequestMapping("/nacos")
public class NacosProviderController {
    @GetMapping("/provider/{name}")
    public String provider(@PathVariable String name) {
        return "hello," + name;
    }
}

nacos-servicio-consumidor

Cree un proyecto de springcloud para consumidores de servicios e introduzca las siguientes dependencias. Aquí, las dependencias de open-feign y ribbon se introducen para demostrar el consumo de estos dos métodos al mismo tiempo.

    <properties>
        <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
        <spring-cloud.alibaba.version>0.2.1.RELEASE</spring-cloud.alibaba.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud.alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
        <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
    </dependencies>

Configure la información de configuración relacionada con nacos en el archivo application.yml del proyecto de la siguiente manera:

Si no desea utilizar Nacos para el registro y descubrimiento de su servicio, puede establecer spring.cloud.nacos.discovery en falso.

spring:
  application:
    name: nacos-service-consumer
  cloud:
    nacos:
      discovery:
        register-enabled: true
        server-addr: 127.0.0.1:8848
        weight: 1
        namespace: dev
management:
  endpoints:
    web:
      exposure:
        include: "*"

server:
  port: 8081

El código para crear el consumidor del servicio es el siguiente, no olvide introducir la anotación @EnableDiscoveryClient en la función principal.

package com.lazycece.scac.nacos.discovery.consumer.controller;

import com.lazycece.scac.nacos.discovery.consumer.api.FeignConsumerApi;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

/**
 * @author lazycece
 * @date 2019/03/19
 */
@RestController
@RequestMapping("/nacos/consumer")
public class NacosConsumerController {

    private LoadBalancerClient loadBalancerClient;
    private RestTemplate restTemplate;
    private FeignConsumerApi feignConsumerApi;

    @Autowired
    public NacosConsumerController(LoadBalancerClient loadBalancerClient, RestTemplate restTemplate,
                                   FeignConsumerApi feignConsumerApi) {
        this.loadBalancerClient = loadBalancerClient;
        this.restTemplate = restTemplate;
        this.feignConsumerApi = feignConsumerApi;
    }

    @GetMapping("/rest/{name}")
    public String rest(@PathVariable String name) {
        ServiceInstance serviceInstance = loadBalancerClient.choose("nacos-service-provider");
        String url = String.format("http://%s:%s/nacos/provider/%s",
                serviceInstance.getHost(), serviceInstance.getPort(), name);
        System.out.println("url -> " + url);
        return restTemplate.getForObject(url, String.class);
    }

    @GetMapping("/feign/{name}")
    public String feign(@PathVariable String name) {
        return feignConsumerApi.provider(name);
    }


    @GetMapping("/ribbon/{name}")
    public String ribbon(@PathVariable String name) {
        return restTemplate.getForObject("http://nacos-service-provider/nacos/provider/" +
                name, String.class);
    }
}

Para consumir en modo de reposo, debe inyectar RestTemplate. Si necesita usar la cinta para equilibrar la carga, puede anotarlo con @LoadBalanced; de lo contrario, no puede agregarlo.

package com.lazycece.scac.nacos.discovery.consumer.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

/**
 * @author lazycece
 * @date 2019/03/19
 */
@Configuration
public class RestTemplateConfig {

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

Para consumir en modo de simulación, necesita un cliente de simulación, como se indica a continuación, y la función principal del proyecto también debe introducir la anotación @EnableFeignClients
.

package com.lazycece.scac.nacos.discovery.consumer.api;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @author lazycece
 * @date 2019/03/19
 */
@FeignClient("nacos-service-provider")
@RequestMapping("/nacos")
public interface FeignConsumerApi {

    @GetMapping("/provider/{name}")
    String provider(@PathVariable String name);
}

Registro de servicios y verificación de casos de descubrimiento

Primero debe iniciar el servicio del servidor nacos.Para la instalación y la implementación, consulte instalación e implementación de nacos .

Punto final del servicio

spring-cloud-starter-alibaba-nacos-discovery proporciona un EndPoint cuando se implementa, y la dirección de acceso de EndPoint es http://ip:port/actuator/nacos-discovery. Debido a que agregamos la dependencia spring-boot-starter-actuator, podemos ver la información del punto final. Hay dos tipos principales de información de EndPoint:

  • suscribirse: muestra qué servicio están actualmente los suscriptores
  • NacosDiscoveryProperties: muestra la configuración básica de la instancia de servicio actual sobre Nacos

La información de una de las instancias de servicio que acceden al EndPoint es la siguiente:

{
    "subscribe":[

    ],
    "NacosDiscoveryProperties":{
        "serverAddr":"127.0.0.1:8848",
        "endpoint":"",
        "namespace":"dev",
        "logName":"",
        "service":"nacos-service-provider",
        "weight":1,
        "clusterName":"DEFAULT",
        "namingLoadCacheAtStart":"false",
        "metadata":{

        },
        "registerEnabled":true,
        "ip":"192.168.3.8",
        "networkInterface":"",
        "port":8080,
        "secure":false,
        "accessKey":"",
        "secretKey":""
    }
}

interfaz de tubo nacos

Visite http://localhost:8848/nacos/ para ingresar a la interfaz de administración de nacos, verifique el módulo Administración de servicios->Lista de servicios, puede ver que nuestros consumidores y proveedores de servicios se han registrado con nacos, como se muestra en la siguiente figura :

inserte la descripción de la imagen aquí

consumo de servicios

Aquí debe iniciar primero el servicio nacos, luego iniciar los dos servicios anteriores y visitar la siguiente dirección:
http://localhost:8081/nacos/consumer/rest/lazycece
http://localhost:8081/nacos/consumer/ cinta/lazycece
http://localhost:8081/nacos/consumer/fingir/lazycece

Información de salida: hola, lazycece

Más información de springcloud nacos

En la siguiente figura se muestra otra información de configuración sobre spring-cloud-starter-alibaba-nacos-discovery:

inserte la descripción de la imagen aquí

Código fuente del caso

Dirección de origen del caso:
https://github.com/lazycece/springcloud-actual-combat/tree/master/springcloud-ac-alibaba/springcloud-ac-alibaba-nacos-discovery

Supongo que te gusta

Origin blog.csdn.net/m0_54850604/article/details/123684660
Recomendado
Clasificación