美文网首页
基于spring boot 2.x cloud服务消费 (Rib

基于spring boot 2.x cloud服务消费 (Rib

作者: OnceIme | 来源:发表于2018-05-29 14:38 被阅读0次

    Ribbon方式

    创建的eureka-consumer工程,pom.xml在client的基础上添加ribbon依赖:

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.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.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
    
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    
        <dependency>
            <!--<groupId>org.springframework.cloud</groupId>-->
            <!--<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>-->
        <</dependency>
    </dependencies>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.RC1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    

    在启动程序Application中同样添加@EnableDiscoveryClient向服务中心注册,并且注入一个beanrestTemplate;
    通过@LoadBalanced注解表明开启负载均衡的功能

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

    写一个测试controller类,注入restTemplate,并在/consumer接口中消费之前注册的服务,url为之前注册的EUREKA-CLIENT,

    @RestController
    public class CosumerController {
    
        @Autowired
        private RestTemplate restTemplate;
    
        @GetMapping("/consumer")
        public String consumer() {
            String url = "http://EUREKA-CLIENT/disc";
            return restTemplate.getForObject(url, String.class);
        }
    }
    

    启动之前创建的服务中心,两个客户端和一个消费端,访问刚才创建的接口http://localhost:2101/consumer,浏览器是两个client服务的交替显示,说明ribbon已经做了负载均衡

    Services: [eureka-client, eureka-consumer]:2001  #客户端1
    Services: [eureka-client, eureka-consumer]:2002  #客户端2
    Services: [eureka-client, eureka-consumer]:2001  #客户端1
    Services: [eureka-client, eureka-consumer]:2002  #客户端2
    Services: [eureka-client, eureka-consumer]:2001  #客户端1
    Services: [eureka-client, eureka-consumer]:2002  #客户端2
    

    此时的结构:

    • 一个服务中心eureka-server,端口 1001,
    • 两个客户端eureka-client, 端口分别是2001 和2002,
    • 一个消费端eureka-consumer, 端口是2101,当访问 eureka-consumer时,因为用ribbon进行了负载均衡,会轮流的调用两个客户端。

    Feign方式

    在之前eureka-consumer基础上,引入Feign,pom.xml文件依赖:

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency> 
    

    启动application添加@EnableFeignClients注解,删除restTemplate,修改后如下:

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

    添加一个FeignServerClient抽象类接口,通过@FeignClient("服务名")来指定调用哪个服务,比如调用eureka-client

    @FeignClient("eureka-client")
    public interface FeignServerClient {
    
        @GetMapping("/disc")
        String consumer();
    } 
    

    ConsumerController删除restTemplate,注入刚才创建的抽象类接口

    @RestController
    public class CosumerController {
    
        @Autowired
        FeignServerClient feignServerClient;
    
        @GetMapping("/consumer")
        public String consumer() {
            return feignServerClient.consumer();
        }
    } 
    

    按照Ribbon一样启动启动之前创建的服务中心、客户端和消费端,访问http://localhost:2101/consumer,输出结果和ribbon一样,Feign具有负载均衡

    相关文章

      网友评论

          本文标题:基于spring boot 2.x cloud服务消费 (Rib

          本文链接:https://www.haomeiwen.com/subject/yuqajftx.html