【Spring Cloud】-跨服务调用

Spring Cloud中服务间调用有两种restful调用方式,一种是Resttemplate
,另外一种是Feign。java

实现RestTemplate调用方式

一、使用LoadBalance注解,将restTemplate做为一个bean配置web

@Component
public class RestTemplateConfig {

    //使用LoadBalance注解,将restTemplate做为一个bean配置
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return restTemplate();
    }
}

二、在controller中将RestTemplate引入spring

@RestController
public class ClientController {
    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/getProductMsg")
    public String getProductMsg(){

        //第三种方式(利用@LoadBalance注解,可在restTemplate里使用PRODUCT应用名字,来访问PRODUCT的服务)
        String response = restTemplate.getForObject("http://PRODUCT/msg",String.class);
        return response;
    }

实现Feign调用方式

一、增长依赖服务器

<!-- 添加feign声明式webservice client -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-feign</artifactId>
        </dependency>

二、在启动主类上加注解@EnableFeignClients
三、新建一个Client,来调用product的接口,声明调用呢些方法restful

//表示访问product的接口
//@FeignClient(name="product")
public interface ProductClient {
    @GetMapping("/msg")   //调用product的这个接口
    String productMsg();    //返回productMsg
   }

四、controllerapp

@RestController
public class ClientController {
    //Feign的使用方法
    @Autowired
    private ProductClient productClient;

    @GetMapping("/getProductMsg")
    public String getProductMsg(){
        //Feign的使用方法
        String response = productClient.productMsg();
        return response;
    }
}

Ribbon,负载均衡

Eureka属于客户端发现,客戶端向Eureka Serve拉取已注册的可用服务信息,而后根据负载均衡策略,直接命中哪台服务器提供服务,这些操做都是在客户端完成,不须要服务端,spring cloud中的客户端负载均衡器就是Ribbon组件,Restemplate、Feign、Zuul都使用到了Ribbon,只要使用@template和@FeignClient时,ribbon就会自动使用。负载均衡