Nacos 입문 학습

38348 단어 springcloudJ2EE
Nacos
왜 나 코스 야?유레카, 콘 솔 이 생 긴 이상 왜 나 코스 가 있 습 니까?
Nacos 는 클 라 우 드 네 이 티 브 응용 을 구축 하 는 데 도움 이 되 는 동적 서비스 발견, 배치 와 서비스 관리 플랫폼 으로 등록 센터, 배치 센터 와 동적 DNS 서비스 세 가지 기능 을 제공 합 니 다.이음매 없 이 연결 가능 Springcloud, Spring, Dubbo 등 유행 프레임 워 크
앞서 생방송 을 보면 서 망아지 형 은 이 프로젝트 SpringCloudAlibaba 를 추진 해 왔 는데 그 중에서 가장 중요 한 것 은 나 코스 였 다.
넷 플 릭 스 OSS 의 많은 중요 한 구성 요소 들 이 연이어 새로운 기능 개발 을 중단 하 겠 다 고 발표 한 배경 을 알 아야 한다. 한편, Spring Cloud Alibaba 는 새로운 프로젝트 로 고속 교체 중이 다.
비고: 이 문 서 는 기본적으로 홈 페이지 설명 을 학습 합 니 다.
Nacos 설치
다운로드 하 다.
Nacos 입문 설 치 는 사실 홈 페이지 를 직접 볼 수 있 습 니 다. 아주 직 설 적 이 고 간단 합 니 다. 최신 가방 을 다운로드 한 다음 에 바로 실행 하면 됩 니 다!https://nacos.io/zh-cn/docs/quick-start.html
다운로드:
git clone https://github.com/alibaba/nacos.git
cd nacos/
mvn -Prelease-nacos clean install -U  
ls -al distribution/target/

// change the $version to your actual path
cd distribution/target/nacos-server-$version/nacos/bin

설치 하 다.
Linux / Unix / mac 시작 명령 (standalone 은 단일 모드 로 실행 되 고 비 클 러 스 터 모드 를 대표 합 니 다):sh startup.sh -m standalone
만약 에 ubuntu 시스템 을 사용 하거나 스 크 립 트 오류 알림 을 실행 하면 [기 호 를 찾 을 수 없 으 면 다음 과 같이 실행 해 보십시오.bash startup.sh -m standalone
서 비 스 를 빠르게 익히다.
서비스 등록
curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080'

서비스 발견
curl -X GET 'http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName'

설정 발표
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld"

설정 가 져 오기
curl -X GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"

Nacos 통합 개발
Spring
통합 Spring 은 사실 완전한 문서 가 있 습 니 다 https://github.com/nacos-group/nacos-spring-project/wiki/Nacos-Spring-Project-0.3.1-%E6%96%B0%E5%8A%9F%E8%83%BD%E4%BD%BF%E7%94%A8%E6%89%8B%E5%86%8C설정 관리 시작
  • 의존 추가
  • <dependency>
        <groupId>com.alibaba.nacosgroupId>
        <artifactId>nacos-spring-contextartifactId>
        <version>${latest.version}version>
    dependency>
    
  • 주석 추가
  • @ EnableNacosConfig 주 해 를 추가 하여 Nacos Spring 의 설정 관리 서 비 스 를 사용 합 니 다. 다음 예제 에 서 는 @ NacosPropertySource 를 사용 하여 dataId 를 example 로 설정 원 을 불 러 오고 자동 업 데 이 트 를 시작 합 니 다.
    @Configuration
    @EnableNacosConfig(globalProperties = @NacosProperties(serverAddr = "127.0.0.1:8848"))
    @NacosPropertySource(dataId = "example", autoRefreshed = true)
    public class NacosConfiguration {
    
    }
    
  • 사용 @ NacosValue
  • @Controller
    @RequestMapping("config")
    public class ConfigController {
    
        @NacosValue(value = "${useLocalCache:false}", autoRefreshed = true)
        private boolean useLocalCache;
    
        @RequestMapping(value = "/get", method = GET)
        @ResponseBody
        public boolean get() {
            return useLocalCache;
        }
    }
    
  • Tomcat 을 시작 하여 Tomcat 을 시작 합 니 다. 호출 curl http://localhost:8080/config/get 을 통 해 설정 정 보 를 가 져 오 려 고 합 니 다. 설정 이 발표 되 지 않 았 기 때문에 되 돌아 오 는 내용 은 false
  • 입 니 다.
  • 설정 발표 curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=example&group=DEFAULT_GROUP&content=useLocalCache=true"
  • 재 방문 http://localhost:8080/config/get, 이 때 되 돌아 오 는 내용 은 true 입 니 다. 프로그램의 useLocalCache 값 이 동적 으로 업데이트 되 었 음 을 설명 합 니 다.
    시작 서비스 발견
  • 주석 추가
  • <dependency>
        <groupId>com.alibaba.nacosgroupId>
        <artifactId>nacos-spring-contextartifactId>
        <version>${latest.version}version>
    dependency>
    
  • @ EnableNacosDiscovery 주 해 를 추가 하여 Nacos Spring 의 서비스 발견 기능 을 엽 니 다
  • @Configuration
    @EnableNacosDiscovery(globalProperties = @NacosProperties(serverAddr = "127.0.0.1:8848"))
    public class NacosConfiguration {
    
    }
    
  • @ NacosInjected 를 사용 하여 Nacos 를 주입 하 는 NamingService 인 스 턴 스
  • @Controller
    @RequestMapping("discovery")
    public class DiscoveryController {
    
        @NacosInjected
        private NamingService namingService;
    
        @RequestMapping(value = "/get", method = GET)
        @ResponseBody
        public List<Instance> get(@RequestParam String serviceName) throws NacosException {
            return namingService.getAllInstances(serviceName);
        }
    }
    
  • Tomcat 호출 시작 curl http://localhost:8080/discovery/get?serviceName=example, 이때 빈 JSON 배열 로 되 돌아 가기 []
  • 등록 서 비 스 는 Nacos Open API 를 호출 하여 Nacos server 에 example 서비스
  • 라 는 이름 을 등록 합 니 다.
    curl -X PUT 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=example&ip=127.0.0.1&port=8080'
    

    재 방문 curl http://localhost:8080/discovery/get?serviceName=example, 이때 되 돌아 오 는 내용 은?
    [
      {
        "instanceId": "127.0.0.1#8080#DEFAULT#example",
        "ip": "127.0.0.1",
        "port": 8080,
        "weight": 1.0,
        "healthy": true,
        "cluster": {
          "serviceName": null,
          "name": "",
          "healthChecker": {
            "type": "TCP"
          },
          "defaultPort": 80,
          "defaultCheckPort": 80,
          "useIPPort4Check": true,
          "metadata": {}
        },
        "service": null,
        "metadata": {}
      }
    ]
    

    SpringBoot
    설정 관리 시작
  • 의존 추가
  • <dependency>
        <groupId>com.alibaba.bootgroupId>
        <artifactId>nacos-config-spring-boot-starterartifactId>
        <version>${latest.version}version>
    dependency>
    
  • 주소 설정
  • nacos.config.server-addr=127.0.0.1:8848
    
  • @ NacosPropertySource 를 사용 하여 dataId 를 example 로 불 러 오 는 설정 원 을 사용 하고 자동 업데이트
  • 를 엽 니 다.
    @SpringBootApplication
    @NacosPropertySource(dataId = "example", autoRefreshed = true)
    public class NacosConfigApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(NacosConfigApplication.class, args);
        }
    }
    
  • Nacos 의 @ NacosValue 주 해 를 통 해 속성 값 을 설정 합 니 다.
  • @Controller
    @RequestMapping("config")
    public class ConfigController {
    
        @NacosValue(value = "${useLocalCache:false}", autoRefreshed = true)
        private boolean useLocalCache;
    
        @RequestMapping(value = "/get", method = GET)
        @ResponseBody
        public boolean get() {
            return useLocalCache;
        }
    }
    
  • NacosConfigApplication 시작, 호출 curl http://localhost:8080/config/get, 반환 내용 은 false
  • NacosConfigApplication 시작, 호출 curl http://localhost:8080/config/get, 반환 내용 은 false
  • curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=example&group=DEFAULT_GROUP&content=useLocalCache=true"
    
  • 재 방문http://localhost:8080/config/get이 때 내용 을 true 로 되 돌려 줍 니 다. 프로그램의 useLocalCache 값 이 동적 으로 업데이트 되 었 음 을 설명 합 니 다.
  • 시작 서비스 발견
  • 의존 추가
  • <dependency>
        <groupId>com.alibaba.bootgroupId>
        <artifactId>nacos-discovery-spring-boot-starterartifactId>
        <version>${latest.version}version>
    dependency>
    
  • @ NacosInjected 를 사용 하여 Nacos 를 주입 하 는 NamingService 인 스 턴 스
  • @Controller
    @RequestMapping("discovery")
    public class DiscoveryController {
    
        @NacosInjected
        private NamingService namingService;
    
        @RequestMapping(value = "/get", method = GET)
        @ResponseBody
        public List<Instance> get(@RequestParam String serviceName) throws NacosException {
            return namingService.getAllInstances(serviceName);
        }
    }
    
    @SpringBootApplication
    public class NacosDiscoveryApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(NacosDiscoveryApplication.class, args);
        }
    }
    
  • NacosDiscovery Application 을 시작 하고 호출 curl http://localhost:8080/discovery/get?serviceName=example, 이 때 빈 JSON 배열 []
  • 로 되 돌아 갑 니 다.
  • 등록 서비스 curl -X PUT 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=example&ip=127.0.0.1&port=8080'
  • 재 방문 curl http://localhost:8080/discovery/get?serviceName=example, 이때 돌아 오 는 내용 은
  • [
      {
        "instanceId": "127.0.0.1-8080-DEFAULT-example",
        "ip": "127.0.0.1",
        "port": 8080,
        "weight": 1.0,
        "healthy": true,
        "cluster": {
          "serviceName": null,
          "name": "",
          "healthChecker": {
            "type": "TCP"
          },
          "defaultPort": 80,
          "defaultCheckPort": 80,
          "useIPPort4Check": true,
          "metadata": {}
        },
        "service": null,
        "metadata": {}
      }
    ]
    

    SpringCloud
    시작 설정
  • 의존 추가
  • <dependency>
        <groupId>org.springframework.cloudgroupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
        <version>${latest.version}version>
    dependency>
    
  • Nacos 응용 주소 와 서비스 이름 설정
  • spring.cloud.nacos.config.server-addr=127.0.0.1:8848
    
    spring.application.name=example
    
  • Spring Cloud 원생 주 해 를 통 해 @ RefreshScope 설정 자동 업데이트 실현
  • @RestController
    @RequestMapping("/config")
    @RefreshScope
    public class ConfigController {
    
        @Value("${useLocalCache:false}")
        private boolean useLocalCache;
    
        @RequestMapping("/get")
        public boolean get() {
            return useLocalCache;
        }
    }
    
  • 먼저 Nacos Open API 를 호출 하여 Nacos Server 에 설정 을 발표 합 니 다. dataId 는 example. properties 이 고 내용 은 useLocalCache = true
  • 입 니 다.
    curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=example.properties&group=DEFAULT_GROUP&content=useLocalCache=true"
    
  • NacosConfigApplication 을 실행 하고 호출 curl http://localhost:8080/config/get, 반환 내용 은 true
  • 입 니 다.
  • Nacos Open API 를 다시 호출 하여 Nacos server 에 설정 을 발표 합 니 다. dataId 는 example. properties 이 고 내용 은 useLocalCache = false
  • 입 니 다.
    curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=example.properties&group=DEFAULT_GROUP&content=useLocalCache=false"
    
  • 재 방문http://localhost:8080/config/get이 때 내용 을 false 로 되 돌려 줍 니 다. 프로그램의 useLocalCache 값 이 동적 으로 업데이트 되 었 음 을 설명 합 니 다
  • 시작 서비스 발견
  • 의존 추가
  • <dependency>
        <groupId>org.springframework.cloudgroupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
        <version>${latest.version}version>
    dependency>
    
  • 서비스 오픈 발견
  • @SpringBootApplication
    @EnableDiscoveryClient
    public class NacosProviderApplication {
    
    	public static void main(String[] args) {
    		SpringApplication.run(NacosProviderApplication.class, args);
    	}
    
    	@RestController
    	class EchoController {
    		@RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
    		public String echo(@PathVariable String string) {
    			return "Hello Nacos Discovery " + string;
    		}
    	}
    }
    
  • 서비스 소비자 배치
  • server.port=8080
    spring.application.name=service-consumer
    
    spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
    
  • 집적 부하 균형 리본
  • @SpringBootApplication
    @EnableDiscoveryClient
    public class NacosConsumerApplication {
    
        @LoadBalanced
        @Bean
        public RestTemplate restTemplate() {
            return new RestTemplate();
        }
    
        public static void main(String[] args) {
            SpringApplication.run(NacosConsumerApplication.class, args);
        }
    
        @RestController
        public class TestController {
    
            private final RestTemplate restTemplate;
    
            @Autowired
            public TestController(RestTemplate restTemplate) {this.restTemplate = restTemplate;}
    
            @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
            public String echo(@PathVariable String str) {
                return restTemplate.getForObject("http://service-provider/echo/" + str, String.class);
            }
        }
    }
    
  • ProviderApplication 과 ConsumerApplication, 호출 http://localhost:8080/echo/2018 을 시작 하고 Hello Nacos Discovery 2018
  • 을 되 돌려 줍 니 다.

    좋은 웹페이지 즐겨찾기