nacos服务注册发现

Nacos

为什么使用Nacos

nacos服务注册发现_第1张图片

Eureka

当Eureka单台注册中心机器 注册超过3w的节点 客户端 那么性能将会下降
Eureka 开始闭源

Zookeeper

当Zookeeper 单台节点超过2k 那么性能会降低
zookeeper不支持 web控制台管理
Consul
Consul 节点超过5k那么 性能降低 测验显示 超过1k 就已经开始降低性能了
Consul 是GoLang 语言开发 对java 不友好

Nacos

很牛B 节点可以部署10万+性能不会影响 经过alibaba 内部100万的考验
支持 web客户端给、控制台管理
可以实现限流 提供了第三方集成监控插件 默认自带配置中心
Nacos 1.1版本 支持灰度配置和地址服务器模式

使用Nacos

Nacos环境搭建 需求

nacos服务注册发现_第2张图片

下载 安装包

2.1

nacos服务注册发现_第3张图片

2.2

下载网站 [https://github.com/alibaba/nacos/releases](https://github.com/alibaba/nacos/releases)

启动服务器

3.1 Linux/Unix/Mac

启动命令(standalone代表着单机模式运行,非集群模式):
sh startup.sh -m standalone
如果您使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:
bash startup.sh -m standalone

3.2 Windows

启动命令:
cmd startup.cmd
或者双击startup.cmd运行文件。

运行成功

nacos服务注册发现_第4张图片

=============================================================================

搭建 Nacos 项目

首先,Nacos是一个服务注册和服务发现的注册中心,在Spring Cloud中,可以替代Eureka的功能,我们先聊一下Nacos如何和Spring Cloud集成做一个注册中心。
整体流程为:
先启动注册中心Nacos
启动服务的提供者将提供服务,并将服务注册到注册中心Nacos上
启动服务的消费者,在Nacos中找到服务并完成消费

1. 服务提供者

新建一个producer的项目,项目依赖如下:

1.1 pom.xml项目依赖



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.6.RELEASE
         
    
    com.springcloud
    producer
    0.0.1-SNAPSHOT
    producer
    Demo project for Spring Boot

    
        1.8
    

    
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.cloud
            spring-cloud-starter-alibaba-nacos-discovery
            0.9.0.RELEASE
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    


增加Nacos的服务发现的依赖:spring-cloud-starter-alibaba-nacos-discovery,根据版本SpringCloud和SpringBoot的版本,这里我们使用0.9.0.RELEASE版本

1.2 配置文件application.yml

server:
  port: 9000
spring:
  application:
    name: spring-cloud-nacos-producer
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

1.3 启动类ProducerApplication.java

package com.springcloud.producer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class ProducerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProducerApplication.class, args);
    }

}

@EnableDiscoveryClient 注册服务至Nacos。

1.4 controller

package com.springcloud.producer.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;


@RestController
public class HelloController {

    @RequestMapping("/hello")
    public String hello(@RequestParam String name) {
        return "hello "+name+ "";
    }

}

1.5 测试

启动服务producer,在浏览器访问链接:http://localhost:9000/hello?name=nacos, 可以看到页面显示hello nacos,producer is ready。
打开Nacos显示页面,可以看到服务spring-cloud-nacos-producer正常上线。

到这里,我们的服务提供者已经正常搭建完毕。

2. 服务消费者

2.1 pom.xml项目依赖



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.6.RELEASE
         
    
    com.spring
    nacos-cosumers
    0.0.1-SNAPSHOT
    nacos-cosumers
    Demo project for Spring Boot

    
        1.8
        Greenwich.SR2
    

    
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.cloud
            spring-cloud-starter-openfeign
        
        
            org.springframework.cloud
            spring-cloud-starter-alibaba-nacos-discovery
            0.9.0.RELEASE
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud.version}
                pom
                import
            
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    


这里增加了spring-cloud-starter-openfeign依赖包

2.2 配置文件application.yml

server:
  port: 8080
spring:
  application:
    name: spring-cloud-nacos-consumers
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

2.3 启动类NacosCosumersApplication.java

package com.spring.nacoscosumers;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class NacosCosumersApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosCosumersApplication.class, args);
    }

}

@EnableFeignClients这个注解是声明Feign远程调用

2.4 Feign远程调用

创建一个remote接口

package com.spring.nacoscosumers.remote;

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

@FeignClient(name= "spring-cloud-nacos-producer")
public interface HelloRemote {
    @RequestMapping(value = "/hello")
    String hello(@RequestParam(value = "name") String name);
}

2.5 web层调用远程接口 Controller

package com.spring.nacoscosumers.controller;

import com.spring.nacoscosumers.remote.HelloRemote;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @Autowired
    HelloRemote helloRemote;

    @RequestMapping("/hello/{name}")
    public String index(@PathVariable("name") String name) {
        return helloRemote.hello(name);
    }
}

2.6 测试

注意:账号默认是 nacos
启动服务消费者nacos-consumers,打开浏览器访问链接:http://localhost:8080/hello/nacos, 这时页面正常返回hello nacos,producer is ready,证明我们的已经通过Nacos作为注册中心已经正常提供了服务注册与发现。

nacos服务注册发现_第5张图片

你可能感兴趣的:(spring,spring,boot,java)