美文网首页
Spring Cloud 学习教程——第三篇:服务消费者(Rib

Spring Cloud 学习教程——第三篇:服务消费者(Rib

作者: Pts | 来源:发表于2019-05-22 23:43 被阅读0次

一、Ribbon 简介

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

二、准备工作

启动 Eureka server。

三、创建 Ribbon服务

重新新建一个spring-boot工程,取名为:service-ribbon; 在它的pom.xml继承了父pom文件,并引入了以下依赖:

image image image

在工程的配置文件指定服务的注册中心地址为http://localhost:xxxx/eureka/,程序名称为 service-ribbon,程序端口为8772。配置文件application.yml如下:

eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:xxxx/eureka/
server:
  port: 8772
spring:
  application:
    name: service-ribbon

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

@SpringBootApplication
public class ServiceRibbonApplication {

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

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

}

写一个测试类HelloService,通过之前注入ioc容器的restTemplate来消费service-hi服务的“/hi”接口,在这里我们直接用的程序名替代了具体的url地址,在ribbon中它会根据服务名来选择具体的服务实例,根据服务实例在请求的时候会用具体的url替换掉服务名,代码如下:

package com.mengmaedu.serviceribbon.test;

import com.netflix.discovery.converters.Auto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

/**
 * @Auther: Tangzhiqiang
 * @Date: 2018/11/26 17:09
 * @Description: 使用 ribbon调用 eureka client 接口(消费  eureka client)
 */
@RestController
public class TestEurekaClient {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/ribbon_test")
    public String test() {
        return restTemplate.getForObject("http://EUREKA-CLINET/test", String.class);
    }
}

在浏览器上多次访问http://127.0.0.1:8772/ribbon_test,浏览器交替显示:

"测试 ribbon 使用"

这说明当我们通过调用restTemplate.getForObject(....)方法时,已经做了负载均衡,访问了不同的端口的服务实例。

四、Feign简介

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

简而言之:

  • feign采用的是基于接口的注解
  • feign整合了ribbon,具有负载均衡的能力
  • 整合了Hystrix,具有熔断的能力

创建 feign服务

新建一个spring-boot工程,取名为service-feign,在它的 pom.xml 文件引入Feign的起步依赖spring-cloud-starter-feign、Eureka的起步依赖spring-cloud-starter-netflix-eureka-client、Web的起步依赖spring-boot-starter-web,如下:

image image image

在工程的配置文件application.yml文件,指定程序名为service-feign,端口号为8775,服务注册地址为http://localhost:8762/eureka/ ,代码如下:

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8762/eureka/
server:
  port: 8775
spring:
  application:
    name: service-feign

在程序的启动类ServiceFeignApplication ,加上@EnableFeignClients注解开启Feign的功能:

@SpringBootApplication
@EnableFeignClients
public class ServiceFeignApplication {

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

定义一个feign接口,通过@ FeignClient(“服务名”),来指定调用哪个服务。比如在代码中调用了EUREKA-CLIENT 服务的“/test”接口,代码如下:

@FeignClient(value = "EUREKA-CLIENT")
public interface SchedualServiceHi {
    @RequestMapping(value = "/test",method = RequestMethod.GET)
    String sayHiFromClientOne();
}

在Web层的controller层,对外暴露一个”/test”的API接口,通过上面定义的Feign客户端SchedualServiceHi 来消费服务。代码如下:

@RestController
public class HiController {

    @Autowired
    SchedualServiceHi schedualServiceHi;

    @GetMapping(value = "/test")
    public String sayHi() {
        return schedualServiceHi.sayHiFromClientOne();
    }
}

启动程序,访问http://localhost:8775/test
浏览器显示

测试 ribbon 使用

相关文章

网友评论

      本文标题:Spring Cloud 学习教程——第三篇:服务消费者(Rib

      本文链接:https://www.haomeiwen.com/subject/nthmzqtx.html