SrpingCloud:服务消费

一、LoadBalancerClient

是一个负载均衡客户端的抽象定义,可以实现服务的消费接口

消费者在应用主类里初始化RestTemplate

@SpringBootApplication
@EnableEurekaClient
public class DemoApplication {

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

  public static void main(String[] args) {
    SpringApplication.run(DemoApplication.class, args);
  }
}

创建接口来消费服务者提供的接口

@RestController
public class UserController {

  @Autowired
  LoadBalancerClient loadBalancerClient;
  @Autowired
  RestTemplate restTemplate;

  // Dalston
  @RequestMapping("/consumer2")
  public String dc2(){
    //根据要消费服务的名称,获取服务提供者相关信息
    ServiceInstance  serviceInstance = loadBalancerClient.choose("client");
    //访问服务提供者url
    String url = "http://" + serviceInstance.getHost() + ":" + serviceInstance.getPort() + "/dc2";
    return restTemplate.getForObject(url, String.class);
  }
}

服务提供者

@RestController
public class LoginController {
  @RequestMapping("dc2")
  public String dc2(){
    System.out.println("进入dc4方法!!!");
    return "123";
  }
}

访问消费者:端口号/consumer2

/consumer2—>/dc2 返回结果为123

二、RestTemplate + Spring Cloud Ribbon

Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具
是一个基于HTTP和TCP的客户端负载均衡器
可以在客户端配置 ribbonServerList(服务端列表),然后轮询请求以实现均衡负载

pom.xml中加入

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

修改应用主类:为RestTemplate增加@LoadBalanced注解

创建接口来消费服务者提供的接口,直接根据服务名访问,不用根据ip port

@RestController
public class UserController {
  @Autowired
  RestTemplate restTemplate;

  // Ribbon
  @RequestMapping("/consumer3")
  public String dc3() {
    return restTemplate.getForObject("http://client/dc2", String.class);
  }

访问/conusmer3结果同上

三、Spring Cloud Feign

Spring Cloud Feign是一套基于Netflix Feign实现的声明式服务调用客户端。它使得编写Web服务客户端变得更加简单。
是一个使用起来更加方便的 HTTP 客戶端,使用起来就像是调用自身工程的方法,而感觉不到是调用远程方法。

pom.xml中加入

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

在应用主类中加入@EnableFeignClients注解

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

dcClient.java接口

@FeignClient(value = "client",path = "/") //指定接口所要调用的服务名称
public interface DcClient {

  @RequestMapping(value = "dc4",method = RequestMethod.POST)
  String consumer();

}

消费者创建接口来消费服务者提供的接口

@RestController
public class UserController {
  //FeignClient
  @Autowired
  DcClient dcClient;

  @RequestMapping("consumer4")
  public String dc4(){
    return  dcClient.consumer();
  }
}

访问/conusmer4结果同上

我们在项目中使用的是第三种,feign本身里面就包含有了ribbon,是一个声明式的伪http客户端,是一个采用基于接口的注解的编程方式,更加简便

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值