springcloud服务之间的调用总结

1.用restTemplate
1.1 没用eureka:,只有生产者 和 消费者时:
消费者-配置类@Bean,把restTemplate交给spring管理;
消费者-控制层@Autowired 注入restTemplate;
// url的值为:http://ip地址:端口号+“/接口路径”
通过调用方法 restTemplate.getForObject(url, User.class);

1.2 用eureka
导入eureka相关包
消费者-配置类@Bean,把restTemplate交给spring管理;

*生产者/消费者 启动类加注解,开启eureka,作为eureka的客户端
@SpringBootApplication @EnableEurekaClient @EnableDiscoveryClient

消费者-控制层@Autowired 注入restTemplate;
*@Autowired 注入discoveryClient
discoveryClient.getInstances(“服务名称”);//返回一个集合list(返回集合的因为 可能一个服务名称对应多个服务,即:集群)
集合list中取 索引0的值a
调用a.getUri() 得到:http://ip地址:端口
//url的值为:a.getUri().toString()+“/接口路径”
通过调用方法 restTemplate.getForObject(url, User.class);


上述两种都是 通过 得到完整的ip地址和端口号 实现跳转的,而开启了负载均衡ribbon的话,url的值为:http://服务名称+“/接口路径”


1.3 用ribbon负载均衡
导入ribbon相关包
在1.2的基础上,(消费者-配置类@Bean,把restTemplate交给spring管理),
并且开启负载均衡 @LoadBalanced
配置类可定义 负载均衡策略 交给 spring管理
url的值为:http://服务名称+“/接口路径”
消费者调用:restTemplate.getForObject(url, User.class);



2.用feign
导入openfeign依赖包
写feign接口 , 加注解@FeignClient 参数是 生产者的服务名,也就是 要调用的服务名;
把要调用的方法 所有接口请求路径,赋值过来;
启动类加开启feign调用的注解 @EnableFeignClients // 开启feign的调用
消费者-控制层 直接注入自己写的feign接口,通过 调用方法的方式,直接传参调用。

@FeignClient(value ="provider")
@RequestMapping("/user")
public interface ProviderFeignClient {
    @GetMapping("/{id}")
    User getUserById(@PathVariable("id") Integer id);
}```

@RestController
@RequestMapping("/consumer")
public class RemoteProviderController_feign {
    @Autowired
    private ProviderFeignClient feignClient; //注入自己的feign的接口,spring会创建代理对象(启动类加@EnableFeignClients注解)

    @GetMapping("/getUser/{id}")
    public User getUser(@PathVariable("id") Integer id){
        User user = feignClient.getUserById(id); // 对象.方法调用
        return user;
    }
}

你可能感兴趣的:(spring,cloud,eureka,java)