Spring Cloud Eureka 服務消費者


參考《spring cloud 微服務實戰》

    現在已經構建了服務注冊中心和服務提供中心,下面就來構建服務消費者:

    服務消費者主要完成:發現服務和消費服務。其中服務的發現主要由Eureka的客戶端完成,而消費的任務由Ribbon完成。

    Ribbon是一個基於HTTP和TCP的客戶端負載均衡器,它可以通過客戶端中配置ribbonServerList服務端列表去輪詢訪問

以達到負載均衡的作用。當Ribbon和Eureka聯合使用時,Ribbon的服務實例清單RibbonServerList會被DiscoveryEnabledNIWSServerList

重寫,擴展成從Eureka注冊中心獲取服務端列表。同時它也會用NIWSDiscoveryPing來取代Ping,通過Eureka來確定服務端是否已經啟動。

     首先,啟動eureka-server和eureka-client服務,為了實現Ribbon客戶端負載均衡功能,我們通過java -jar 命令行的方式來啟動兩個不同

端口的eureka-client:

 

java -jar eureka-client-0.0.1-SNAPSHOT.jar --server.port=2001 java -jar eureka-client-0.0.1-SNAPSHOT.jar --server.port=2002

 

 

 

     成功啟動 eureka-client 服務之后,可以在注冊中心看到對應的服務信息。

創建服務消費工程  

     創建一個Spring Boot基礎工程來ribbon-consumer來實現服務消費者,並在pom.xml文件中新增Ribbon模塊依賴:spring-cloud-starter-ribbon 

 

<?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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>ribbon-consumer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>ribbon-consumer</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-ribbon</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <dependencyManagement>
    <dependencies>
        <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-dependencies</artifactId>
           <version>Dalston.SR1</version>
           <type>pom</type>
           <scope>import</scope>
        </dependency>
         </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

 

 

 

       主類應用中,通過@EnableDiscoveryClient注解讓改應用注冊為Eureka客戶端應用,以獲得服務發現的能力。同時,在該主類中創建RestTemplate的Spring Bean實例,

並通過@LoadBalanced注解開啟客戶端負載均衡。

 

@EnableDiscoveryClient @SpringBootApplication public class RibbonConsumerApplication { @Bean @LoadBalanced RestTemplate restTemplate() { return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(RibbonConsumerApplication.class, args); } }

 

 

 

     創建ConsumerController類並實現/ribbon-consumer接口。在該接口中,通過在上面創建的RestTemplate來實現對EUREKA-CLIENT服務提供的/dc 接口調用。

這里訪問的地址是服務名:EUREKA-CLIENT,而不是一個IP地址。

 

@RestController public class ConsumerController { @Autowired RestTemplate restTemplate; @RequestMapping(value="/ribbon-consumer",method=RequestMethod.GET) public String helloConsumer() { return restTemplate.getForEntity("http://EUREKA-CLIENT/dc", String.class).getBody(); } }

 

 

 

     配置application.properties文件

 

spring.application.name=ribbon-consumer server.port=3001 eureka.client.serviceUrl.defaultZone=http://localhost:1001/eureka/

 

 

 

     通過訪問http://localhost:3001/ribbon-consumer發起GET請求,成功返回信息,通過日志可以看到Ribbon對客戶端進行了輪詢訪問,

實現了負載均衡。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM