SpringCloud-2 服务消费者

2 服务消费者

RestTemplate + Ribbon

ribbon是一个负载均衡客户端,可以很好的控制http和tcp的一些行为。

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

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

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>
server:
  port: 9002
spring:
  application:
    name: CLIENT02
eureka:
  client:
    serviceUrl:
      defaultZone: http://127.0.0.1:8888/eureka/

在工程的启动类中,通过@EnableDiscoveryClient向服务中心注册;并且向程序的ioc注入一个bean: restTemplate;并通过@LoadBalanced注解表明这个restRemplate开启负载均衡的功能。
Application.main

@SpringBootApplication
@EnableDiscoveryClient
@ComponentScan(basePackages = {"com.jf.service"})
public class CloudServiceApplication {

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

Service

@Service
public class TestService {

    @Autowired
    RestTemplate restTemplate;

    public String hiService(String name) {
        return restTemplate.getForObject("http://CLIENT01/test?name=" + name, String.class);
    }

}

Controller

@Autowired
TestService testService;

@RequestMapping(value = "/hi")
public String hi(@RequestParam String name) {
    return testService.hiService(name);
}

这说明当我们通过调用restTemplate.getForObject(“http://CLIENT01/hi?name=“+name, String.class)方法时,已经做了负载均衡,访问了不同的端口的服务实例。

架构:

  • 一个服务注册中心,eureka server,端口为8888
  • CLIENT01工程跑了两个实例,端口分别为9001,9000,分别向服务注册中心注册
  • CLINET02端口为9002,向服务注册中心注册
  • 当CLINET02通过restTemplate调用CLIENT01的hi接口时,因为用ribbon进行了负载均衡,会轮流的调用CLIENT01:9001,9000 两个端口的hi接口

通过启动参数传入进去,可以用配置 VM参数 -Dserver.port=9000 的方式来启动不同实例
或者更改端口通过IDEA再次启动项目

Feign

Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。使用Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解。Feign支持可插拔的编码器和解码器。Feign默认集成了Ribbon,并和Eureka结合,默认实现了负载均衡的效果。

简而言之:

  • Feign 采用的是基于接口的注解
  • Feign 整合了ribbon
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>

在工程的启动类中,通过@EnableFeignClients向服务中心注册

Application.main

@SpringBootApplication
@EnableFeignClients
@EnableDiscoveryClient
@ComponentScan(basePackages = {"com.jf.freign"})
public class CloudFeignApplication {

定义一个feign接口,通过@FeignClient(服务名),来指定调用哪个服务

@FeignClient(value = "CLIENT01")
public interface SchedualService {

    @GetMapping("/test")
    public String test(@RequestParam("name") String name);

}

test方法-参数前@RequestParam必须要加上,否则会报错

controller

@RestController
public class TestController {

     @Autowired
    private SchedualService schedualService;

    @GetMapping("/hi")
    public String hi(String name) {
        return schedualService.test(name);
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值