설명 :
리본은 스프링 클라우드에서 서비스 소비자로서의 역할이며,이를 통해 클라이언트는 서비스 제공 업체의 서비스를 소비 할 수 있습니다.
예를 들어,이 예에서 서비스 제공 업체는 등록 센터에 등록합니다. 서비스 제공 업체는 서비스 인터페이스를 제공하여 Hello String을 반환합니다. 우리는 리본을 통해이 인터페이스를 호출 한 다음 실제 서비스 제공 업체의 주소를 노출시키지 않고 서비스 제공 업체의 서비스를 얻습니다.
전제:
이전 자습서를 따라 등록 센터 및 서비스 제공 업체를 구축하십시오. 여기에서 샤드 등록 센터를 사용할 수 있거나 사용할 수 없습니다. 이것은 일시적으로 사용하기 전에 설정된 샤드 등록 센터로 설정되며 서비스 제공 업체는 하나만 제공 할 수 있습니다.
준비:
1. 등록 센터를 시작하십시오
이전 자습서에 따르면 Peer1 및 Peer2를 사용하여 두 파편의 등록 센터를 시작하십시오. 단일 노드 인 경우 프로젝트를 직접 시작할 수 있습니다.
시작 후 그림과 같이 LocalHost : 1111 또는 LocalHost : 1112를 확인할 수 있습니다.
2. 서비스 제공 업체를 시작하십시오
로드 밸런싱 상황을보기 위해서는 두 서비스 제공 업체를 시작해야합니다.
이전 튜토리얼에 따르면, 두 개의 터미널이 지정된 포트를 시작할 수있게됩니다 (두 개의 동일한 서비스는 해당 구성 파일에서 다른 포트를 구성 할 수도 있습니다). 두 개의 터미널 지침은 다음과 같습니다.
CD TargetJava -Jar SpringClouddemo-0.1-SnapShot.jar ---server.port = 8080
CD TargetJava -Jar SpringClouddemo-0.1-SnapShot.jar ---server.port = 8081
시작 결과 :
이 시점에서 준비가 완료되었습니다
텍스트:
1. 리본 서비스 구성
템플릿을 사용하지 않고 새 Maven 프로젝트를 만듭니다. 이 프로젝트는 Robbin-Customer라고하며 수입 종속성은 다음과 같이 참조됩니다.
<? 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"> <modeversion> 4.0.0 </modelversion> <groupid> com.hellxz </group </group </group in <버전> 1.0-snapshot </version> <부모> <groupid> org.springframework.boot </groupid> <artifactid> Spring-boot-starter-parent </artifactid> <bersion> 1.5.9. Release </version> <realativePath/> </parent> <peencevency> <groupde <artifactid> Spring-Boot-starter-web </artifactid> </fectionency> <pectient> <groupid> org.springframework.cloud </groupid> <atifactid> Spring-Cloud-Starter-Eureka </artifactid> </version> </frealsency> <groupid> org.sprameframwork.scramwork.clorg <Artifactid> Spring-Cloud-Starter-Ribbon </artifactid> <버전> 릴리스> 릴리스> </version> </dependency> </dependency> <pectionencymanagement> <pectionements> <groupid> org.springframework.cloud </groupid> <artifactid> spring-cloud-dectials </artifactid> <Scope> import </scope> <type> pom </type> </fectionency> </fectionementies> </fectencies> </fectionencyManagement> </project>
새 SpringBoot 스타트 업 클래스를 만들고 RestTemplate를 스프링 컨테이너에 전달하십시오.
package com.cnblogs.hellxz; import org.springframework.springApplication; import org.springframework.boot.autoconfigure.springbootapplication; import org.springframework.cloud.client.discovery.enablediscyplient; import org.springframework.cloud.client.loadbalancer.loadbalanced; import org.springframework.context.annotation.bean; import org.sprameframework.web.client.resttemplate;/*** @author : hellxz* @description : 소비자 응용 프로그램 : 2018/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/16 */ @enablediscoveryClient @springbootApplicationPublic Class CustomerApplication {@bean //이 콩을 스프링 컨테이너 @loadbalanct //이 주석을 통해로드 밸런싱 활성화 resttemplate () {return new RestTemplate (); } public static void main (String [] args) {springApplication.run (customerApplication.class, args); }}구성 등록 정보를 위해 src/resources 디렉토리에서 application.yml을 만듭니다. 이 기사는 샤드 등록 센터를 사용합니다. 단일 노드에 대한 Defaltzone을 구성하십시오.
서버 : 9000 #리본-커스토머 용 서비스 포트 : 응용 프로그램 : 이름 : 이름 : 리본-커스토머 #응용 프로그램 이름을 지정하십시오.
시작 클래스 디렉토리에서 CustomerController를 작성하고 RestTemplate를 주입하여 서비스 인터페이스를 호출하십시오.
package com.cnblogs.hellxz; import org.springframework.bean.beans.bean.annotation.autowired; import org.springframework.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.requestMethod; import org.springframework.web.bind.annotation.RestController;import org.springframework.web.client.RestTemplate;/** * @Author : Hellxz * @Description: Consumer Application* @Date : 2018/4/16 15:54 */@RestControllerpublic class CustomerController { @Autowired //Inject resttemplate private resttemplate resttemplate; @requestmapping (value = "/ribbon-customer", method = requestmethod.get) public string hellocustomer () {// 이전에 직선 체인 액세스 서비스 제공 업체 인터페이스에서 가져 왔기 때문에 여기에 댓글을 달았으므로 결과가 반환되지 않으며 오류가보고됩니다. // 반환. resttemplate.getforentity ( "http : // localhost : 8080/hello", String.class) .getBody (); // resttemplate를 사용하여 마이크로 서비스 인터페이스를 호출하십시오. return resttemplate.getforentity ( "http : // hello-service/hello", string.class) .getbody (); }}참고 : 위의 코드의 24 행은 오류 데모를 제공합니다. 리본 인터페이스에 액세스 할 때 오류가 발생하고 흰색 오류 페이지가 나타나면 여기에서 확인하십시오.
이 시점에서 리본 소비자 응용 프로그램이 구축되고 테스트가 시작됩니다.
시험:
http : // localhost : 1111/우리는이 리본 소비자 응용 프로그램이 등록 센터에 등록되었음을 발견했습니다.
http : // localhost : 9000/ribbon-customer를 방문하십시오
서비스 제공 업체 프로젝트에 액세스 권한이 있으면 두 서비스 제공 업체가 시작되었으므로 정보가 인쇄 될 것입니다. 여기서 리본의로드 밸런싱을 테스트 할 수 있습니다.
서비스 제공 업체 출력을 봅니다
두 번째 터미널은 그렇지 않으며 구성 라인을 통해 유럽 종점 해결에 여전히 표시됩니다.
터미널을 보려면 페이지를 새로 고치십시오. 리본의 기본 부하 밸런싱 구현이 폴링되므로 동일한 서비스에 여러 번 액세스 할 수 있습니다. 페이지를 여러 번 새로 고치면 또 다른 용어로 표시됩니다!
결론:
서비스 소비자로서 리본은 서비스 제공 업체가 제공하는 서비스를 얻는 동안 사용자에게 인터페이스 주소를 노출시킬 수 없습니다. 여기서 서비스 인터페이스를 호출 할 때 서비스 제공 업체의 서비스 이름이 호스트 이름 대신 사용됨을 알 수 있습니다. 이 기능은 서비스 거버넌스 프레임 워크에서 매우 중요합니다.
Jhipster Generator를 먼저 배웠기 때문에 미리 예측하고 싶습니다. 그런 다음 Ribbon을 대체 할 수있는 Feign이라는 기술이 있습니다. 이 일련의 블로그는 모든 연구 노트입니다. 실제 운영에서 응용 프로그램이 서비스 제공 업체 및 서비스 소비자 인 상황이있을 수 있습니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.