springcloud服务间的调用

本文介绍了SpringCloud中服务间调用的两种方式:RestTemplate和Feign。对于RestTemplate,讲解了url写死和通过服务名动态调用的方法,后者支持负载均衡。同时,提到了通过注解实现动态调用服务,同样具有负载均衡功能。对于Feign,介绍了引入依赖和声明服务调用客户端的步骤,强调其便捷性和负载均衡特性,以及版本管理和依赖引入的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一。RestTemplate的方式

1.url写死的方式

RestTemplate restTemplate = new RestTemplate();
String msg = restTemplate.getForObject("http://localhost:8080/server/msg" , String.class);

该方式发送get请求,指定返回类型即可。

2.通过服务名的方式动态调用服务

在使用类上面注入LoadBalancerClient 类

@Autowired
private LoadBalancerClient loadBalancerClient;
RestTemplate restTemplate = new RestTemplate();
ServiceInstance serviceInstance = loadBalancerClient.choose("PRODUCT"); //PRODUCT为注册到中心的服务名
String url = String.format("http://%s:%s" , serviceInstance.getHost() , serviceInstance.getPort()) + "/server/msg";
String msg = restTemplate.getForObject(url , String.class);

该方式可以实现负载均衡的去调用product服务。

3.通过注解的方式动态调用服务

声明一个bean如下:

@Component
public class RestTemplateConfig {

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

在使用的地方将其注入,并通过服务名动态调用相关服务

String msg = restTemplate.getForObject("http://PRODUCT/server/msg" , String.class);

该方式和第2种方式一样,也能实现负载均衡的效果。


二。通过feign的方式调用

1.引入依赖

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

springcloud低版本2.0.0以下请使用如下依赖:

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

2.声明服务调用客户端类

@FeignClient(name = "目标服务名称")
@Component
public interface ServiceClient {
    //对外暴露的API
    @PostMapping("/xxxx/xxx")
    List<ProductInfoOutput> list(@RequestBody List<String> productIdList);

}

@EnableFeignClients(basePackages = "com.gzcstec.product.client")

注意如果是ServiceClient类是其他服务打包提供的,需要在basePackages配置ServiceClient类的路径

使用非常方便,只需将ServiceClient注入到使用的地方,则直接使用service方式进行调用即可。该种方式也实现负载均衡的效果,需要注意的是如果是提供服务方通过直接打包的方式对外提供服务的,则服务消费方直接使用服务方的feign依赖即可,无需再次引入feign依赖,防止版本不一致导致调用失败。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值