springcloud-服务调用篇(ribbon)

一、场景描述

我们的微服务已经注册到了注册中心,不同的服务之间如何进行调用?这里我们采用feign或者ribbon都可以实现

二、ribbon实现

  1. Idea-->file-->new-->project-->spring initializr-->next-->修改必要信息-->next
  2. 分别选择Cloud Routing-->Ribbon
  3. 再选择 Cloud Discovery-->Eureka Discovery
  4. 使用ribbon我们需要使用restTemplete,需要web支持,选择Web-->web
  5. 点击next-->finish
  6. 查看生成的pom文件如下


    4.0.0

    com.example
    eurekaribbon
    0.0.1-SNAPSHOT
    jar

    eurekaribbon
    Demo project for Spring Boot

    
        org.springframework.boot
        spring-boot-starter-parent
        2.0.4.RELEASE
         
    

    
        UTF-8
        UTF-8
        1.8
        Finchley.SR1
    

    
        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-client
        
        
            org.springframework.cloud
            spring-cloud-starter-netflix-ribbon
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud.version}
                pom
                import
            
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

5.我们摘出我们需要的依赖,一个是启用eureka,一个是引入ribbon,一个是引入Web,


    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-client


    org.springframework.cloud
    spring-cloud-starter-netflix-ribbon


    org.springframework.boot
    spring-boot-starter-web

  1. application.properties文件中添加eureka配置
spring.application.name=eurekaribbon
server.port=8085
eureka.client.serviceUrl.defaultZone=http://eureka1:8001/eureka/ ,http://eureka1:8002/eureka/,http://eureka1:8003/eureka/
  1. 启动类添加 @EnableDiscoveryClient
  2. 启动类中添加restTemplete Bean,完整的启动类如下
package com.example.eurekaribbon;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@EnableDiscoveryClient
public class EurekaribbonApplication {
    @Bean
    @LoadBalanced
    RestTemplate restTemplate() {
        return new RestTemplate();
    }
    public static void main(String[] args) {
        SpringApplication.run(EurekaribbonApplication.class, args);
    }
}
  1. 这样我们就可以基于ribbon来调用其他服务了,重点是restTemplete上面的@LoadBalanced注解
  2. 我们可以简单写一个调用DEMO的hello服务的实现方式如下:
package com.example.eurekaribbon;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;
@RestController
public class Hello {
    @Resource
    RestTemplate restTemplate;
    @RequestMapping(value = "/hello")
    public  String hello(){
            return restTemplate.getForObject("http://DEMO/hello",String.class);
    }
}

==这里我们引入的RestTemplete是我们在启动类中定义的以@LoadBalanced注解的bean。默认使用的就是ribbon,已经支持负载均衡==

  1. 我们可以把注册中心,demo服务启动,再启动现有的ribbon服务。调用localhost:8085/hello。得到返回值helloWord

你可能感兴趣的:(springcloud-服务调用篇(ribbon))