Spring Cloud 및 Eureka를 사용한 마이크로 서비스 등록 및 검색

이 블로그 기사는 실현 모델과 여러 개의 마이크로 서비스의 작업 설정을 소개했다. 이런 마이크로 서비스는 유레카에 등록할 수 있고 클라이언트가 그것들을 발견하고 호출할 수 있다.
카탈로그
  • What is Eureka
  • Why we need Discovery Service
  • Project achievement
  • Project Contents
  • Technology Used
  • Discovery Server
  • Article Service
  • REST Endpoints
  • Sample Response
  • Article Client Service
  • Start Microservices
  • Conclusion
  • References
  • Spring Cloud의 마이크로서비스를 사용하여 Eureka 등록 및 검색


    이 블로그 기사는 실현 모델과 여러 개의 마이크로 서비스의 작업 설정을 소개했다. 이런 마이크로 서비스는 유레카에 등록할 수 있고 클라이언트가 그것들을 발견하고 호출할 수 있다.

    유리카가 뭐야?


    Eureka는 고객이 Eureka 서비스를 사용하여 이러한 서비스를 검색하고 호출할 수 있도록 지원하는 REST 기반 서비스입니다.

    왜 우리는 탐색 서비스를 필요로 합니까


    여러 개의 서비스를 운영하는 마이크로 서비스 체계 구조에서 우리는 서비스가 무엇인지, 그리고 이를 어떻게 호출하는지 알 수 있는 메커니즘이 필요하다.일반적으로 서비스마다 다른 URL 또는 IP 주소가 있습니다.그 밖에 이런 마이크로 서비스의 고객들은 새로운 것을 알아야 한다
    마이크로 서비스를 추가하거나 기존의 마이크로 서비스를 삭제하여 유지보수를 진행합니다.발견 서비스는 이런 메커니즘을 제공했다. 서비스는 발견 서비스에 자신을 등록할 수 있고 클라이언트는 발견 서비스를 조회하여 사용할 수 있는 마이크로 서비스에 대한 정보를 더 많이 알 수 있다.

    프로젝트 성과


    이 프로젝트에서 우리는 하나의 끝에서 끝까지의 용례를 겪을 것이다. 그 중에서 우리는 클라이언트 마이크로서비스가 다른 유레카를 이용하여 서비스를 발견하는 마이크로서비스를 호출할 것이다.본질적으로, 우리는 발견 서비스에서 기존 서비스를 찾은 다음에 목표 서비스를 호출하고, URL, IP, 포트 등 위치를 알지 못하기를 희망한다. 이를 위해 발견 서버, 서비스 마이크로서비스와 클라이언트 마이크로서비스를 구축할 것이다.
    프로젝트 내용
  • 유리카 발견 서비스: 등록 및 발견 제공
  • Article Micro 서비스: Article CRUD 작업에 대한 REST 서비스 제공
  • 클라이언트 마이크로서비스: 기사 마이크로서비스 호출

  • 이상의 사진은 우리가 매우 높은 수준에서 실현할 목표를 보여 준다
    1) 검색 서비스 구축
    2) 저희는 기사 서비스를 배치할 것입니다. 이 서비스는 유일한 명칭을 사용하여 발견 서비스에 자신을 등록합니다.
    3) 우리는 소비자 응용 프로그램을 배치할 것이다. 이것은 다른spring boot 응용 프로그램으로 호출될 것이다
     Article Service by its name.  
    

    사용된 기술


    자바
    ApacheMaven 3.5.0
    스프링 부츠
    봄구름 홀크스톤.SR1
    Netflix Ribbon 2.3.0
    공개적으로 가장하다
    JSON

    검색 서버


    다음 섹션에서는 Eureka Server와 관련된 중요 코드를 중점적으로 설명합니다.세부 사항은git 환매 협의에서 볼 수 있습니다.Eureka Discovery Server에 마벤트 의존항을 추가하고spring 안내 속성 파일에 서버 포트와defaultZone을 추가하며 @Enable Eureka Server로 SpringBoot 응용 프로그램 클래스를 설명해야 합니다.
    Maven pom 파일에 넷플릭스 유레카 서버 의존 항목을 포함해야 합니다.
    폴.xml
    <dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency>
    
    신청등록 정보
    server.port=8761##Eureka Relatedeureka.client.serviceUrl.defaultZone=http://127.0.0.1:8761/eureka/eureka.client.healthcheck.enabled=true
    
    Eureka Discovery Server는 매우 간단한 Spring Boot 애플리케이션입니다.@EnableEurekaServer를 사용하여 응용 프로그램에 대한 설명을 입력해야 합니다@Enable EurekaServer는 이 응용 프로그램을 유레카 서버로 실행할 수 있도록 하고 Spring Boot의 도움말에 따라 유레카와 관련된 bean을 구성 속성에 따라 실례화합니다.
    서비스 검색.활용단어참조
    package com.bootng.service;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@EnableEurekaServer@SpringBootApplicationpublic class ServiceDiscovery { public static void main(String[] args) { SpringApplication.run(ServiceDiscovery.class, args); }}
    
    현재, 우리가 발견 서버를 구축하고 시작하여 http://localhost:8761를 통해 서버에 접근할 때,bellow와 유사한 내용을 볼 수 있습니다.다음 캡처는 프로그램이 아직 다른 서비스가 시작되지 않았기 때문에 항목이 없다는 것을 보여 줍니다.
    | |
    | 검색 서비스 사용자 인터페이스
    |

    물품 서비스


    현재, 우리는 글 마이크로서비스를 구축하고 배치할 것입니다. 이것은 발견 서비스에 등록된spring 안내 프로그램입니다.이 서비스 등록의 이름은 "article 서비스"이며 안내서에 정의되어 있습니다.속성 파일.
    폴.xml
    <dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>
    
    신청등록 정보
    ## Server Relatedserver.port=9051## Eureka Relatedeureka.client.serviceUrl.defaultZone=http://127.0.0.1:8761/eureka/eureka.client.register-with-eureka=trueeureka.client.fetch-registry=falseeureka.vipAddress=article-service
    
    인도하다.등록 정보
    spring.application.name=article-service
    
    다음은 글 마이크로 서비스를 대표하는 주요 응용 프로그램 종류입니다.
    마이크로 서비스
    @ComponentScan({ "com.siddb" })@SpringBootApplication@EnableEurekaClient@EnableDiscoveryClientpublic class ArticleMicroservice {    public static void main(String args[]) { SpringApplication.run(ArticleMicroservice.class, args);    }}
    
    이 Spring 부트 응용 프로그램은 Article Controller를 통해 다음 REST 끝점을 공개합니다.java 클래스."기사 서비스"의 이름으로 서비스에 검색 등록
    관리인.활용단어참조
    @RestController@RequestMapping("/api")public class ArticleController { private static final Logger log = LoggerFactory.getLogger(ArticleController.class); @Autowired ArticleService articleService; @RequestMapping(value = {"/articles"}, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity<List<Article>> getArticles() throws AppException { List<Article> articles = articleService.getArticles(); return new ResponseEntity<List<Article>>(articles, HttpStatus.OK); } @RequestMapping(value = {"/articles/{id}"}, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity<Article> getArticle(@PathVariable(value = "") String id) throws AppException, NotFoundException { Article articles = articleService.getByID(id); return new ResponseEntity<Article>(articles, HttpStatus.OK); } //other methods for POST and Deleted removed from here for readability.}
    
    REST 끝점
  • 획득http://localhost:9051/api/articles
  • 획득http://localhost:9051/api/articles/ARTICLE\_ID
  • 입주http://localhost:9051/api/articles 유효 하중
  • 삭제 http://localhost:9051/api/articles/ARTICLE\_ID
  • 샘플 응답


    가져오기http://localhost:9051/api/articles
    [{ "id": "America-Travel", "name": "America Travel", "description": "Places to travel in AmericaLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum", "category": "Travel" }]
    
    가져오기http://localhost:9051/api/articles
    샘플 답장: [{"id": "미국 여행", "이름": "미국 여행", "설명":"미국을 여행하는 곳은 같은 곳이든 같은 곳이든, 같은 곳이든, 같은 곳이든, 같은 시간이든, 같은 곳에서든, 같은 장소에서든, 모두 다른 곳이다. 같은 곳에서든, 같은 곳에서든, 다른 곳이다.n 교만은'여행'과 같은'노동'에서 책임을 져야 한다
    [{"아이디": "미국 여행", "이름": "미국 여행", "설명":"미국을 여행하는 곳은 같은 곳이든 같은 곳이든, 같은 곳이든, 같은 곳이든, 같은 시간이든, 같은 곳에서든, 같은 장소에서든, 모두 다른 곳이다. 같은 곳에서든, 같은 곳에서든, 다른 곳이다.n 교만은'여행'과 같은'노동'에서 책임을 져야 한다

    제 조 고객 서비스


    현재, 우리는 클라이언트 서비스 응용 프로그램을 구축하고 배치할 것입니다. 이것은 또 다른 Spring 안내 응용 프로그램으로, Article 서비스로 배치된 REST 서비스를 사용합니다.제일 재밌는 부분.
    폴.xml
    <dependencies>  <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>   </dependency>   <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId>    </dependency>   <!--ribbon related -->  <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>   <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId>   </dependency></dependencies>
    
    신청등록 정보
    hostname=localhostlogging.level.org.springframework=infologging.level.root=infospring.main.banner-mode=offserver.port=9053##Managementmanagement.endpoint.health.show-detailsmanagement.health.key.ping=enabledmanagement.endpoints.web.exposure.include=info,health,mappings##Eureka Relatedeureka.instance.leaseRenewalIntervalInSeconds=1eureka.instance.leaseExpirationDurationInSeconds=90eureka.instance.hostname=${hostname}eureka.instance.hostname.metadataMap.instanceId=${spring.application.name}:${server.port}eureka.client.register-with-eureka=trueeureka.client.fetch-registry=trueeureka.client.serviceUrl.defaultZone=http://127.0.0.1:8761/eureka/eureka.client.healthcheck.enabled=true##Eureka Ribbonarticle-service-consumer.ribbon.NIWSServerListClassName=com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSServerListarticle-service-consumer.ribbon.DeploymentContextBasedVipAddresses=article-service
    
    다음은 소비자 응용 프로그램 종류입니다.검색 서버에 등록된 다른 서비스를 검색할 수 있도록 @Enable Discovery Client에서 설명했습니다.
    소비자 응용
    @ComponentScan({"com.siddb", "com.siddb.controller"})@SpringBootApplication@EnableDiscoveryClientpublic class ConsumerApplication { public static void main(String args[]) { SpringApplication.run(ConsumerApplication.class, args); }}
    
    다음은 메인 컨트롤러입니다. 내부에서 발견 서비스를 사용하고 리본 호출 서비스 문장 서비스의 서비스를 사용합니다.(application.properties)의 기능 영역 설정을 통해article 서비스 consumer가 VIP 주소(이름)article 서비스가 있는 서비스와 연결되어 있음을 알 수 있습니다.
    Ribbon 컨트롤러활용단어참조
    @RestControllerpublic class RibbonController { @Autowired private RestTemplate restTemplate; /** * This method calls the microservice GET article-service/api/articles using Ribbon to get a list of * Articles and returns the same. it uses RestTemplate to make the API calls. * @return * @throws Exception */ @RequestMapping(value = {"render"}, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity<String> renderArticles() throws Exception { JsonNode repos = restTemplate.getForObject("http://article-service-consumer/api/articles", JsonNode.class); int counter = 1; StringBuilder result = new StringBuilder("\n List of Articles"); if (repos.isArray()) { for (JsonNode jsonNode : repos) { result.append("\n Repo ").append(counter++).append("::"); result.append(jsonNode.get("name").asText()); } } return new ResponseEntity<String>(result.toString(), HttpStatus.OK); }}
    
    사용자 컨트롤러는 등록 정보 파일에 추가된 리본 구성을 사용하여 리본 이름 "article 서비스 Consumer"를 통해 프로젝트 서비스를 호출합니다.여기서 사용자 컨트롤러는 해당 서비스 이름의 실제 API를 발견할 수 있습니다.GEThttp://article-service-consumer/api/articles에 전화하는 것은 실제로http://localhost:9051/api/articles에 전화하는 것이다.이것이 바로 유레카를 사용하여 서비스를 발견할 때 클라이언트가 서비스(IP 주소, 포트 등)에 어떻게 독립하는가이다.클라이언트는 발표된 명칭 인용 서비스만 사용하면 된다.

    마이크로 서비스 시작


    이제 흥미로운 것은 모든 마이크로 서비스를 시작하고/render REST API를 호출하는 것입니다.우리는 모든 서비스(발견 서비스, 기사 서비스, 소비자 서비스)를 시작해야 한다.이를 위해, 우리는 우선git의 환매 협의를 살펴보고, 모든 항목을 구축/운행해야 한다.
    1)git클론https://github.com/siddharthagit/spring-boot-sdc.
    2) 재구매가 포함된 루트 폴더로 이동합니다.
    3) 각 하위 항목에 3개의 터미널(eureka 서비스 발견, ms문장 서비스, ms소비자 서비스)을 엽니다.
    4) 각 프로젝트를 구축하고 서비스를 시작합니다.
    화면음악n 청결 설치
    mvn spring boot:실행
    5) 검색 서버http://localhost:8761에서 각 서비스의 상태 확인
    6) 소비자 서비스http://localhost:9053/render에서 REST API 상향 조정
    이 API는 검색 서버 확인 서비스를 내부에서 사용하고 라우팅 대상http://localhost:9051/api/articles을 호출합니다.
    http://localhost:9053/render
    기사 목록 환매 1: 미국 관광 환매 2: 아시아 관광 환매 3: 유럽 관광 환매 4: 도로 관광 환매 5: 겨울 관광 환매 6: 일본 관광
    | |
    | 모든 서비스가 실행 중인 Discovery Server UI
    |

    결론


    본고에서 우리는 어떻게 마이크로 서비스/클라우드 환경에서 Spring Cloud Eureka를 사용하여 서비스 발견을 하는지를 소개했다.우리는 REST 호출을 할 때 호스트 이름/포트를 하드코딩하지 않아도 서로 통신할 수 있는 두 개의 간단한 REST 서비스를 만들었다.본고에서 클라이언트가 리본 호출 글 서비스를 어떻게 사용하는지 보여주었지만git repo는 Faign을 사용하는 Faign 클라이언트를 포함하고 있어 다른 글에서 소개할 것이다.

    도구책


    Git Repo
    Spring Cloud Eureka

    좋은 웹페이지 즐겨찾기