springcloud实战之5 服务消费者(ribbon)

前几篇介绍了服务注册中心以及服务提供者,目前需要一个服务消费者。

本篇介绍如何用Ribbon消费注册中心上注册的服务。

Ribbon介绍

Ribbon是一个基于HTTP和TCP客户端的负载均衡器。Feign中也使用Ribbon,下一篇会介绍Feign的使用。

Ribbon可以在通过客户端中配置的ribbonServerList服务端列表去轮询访问以达到均衡负载的作用。

当Ribbon与Eureka联合使用时,ribbonServerList会被DiscoveryEnabledNIWSServerList重写,扩展成从Eureka注册中心中获取服务端列表。同时它也会用NIWSDiscoveryPing来取代IPing,它将职责委托给Eureka来确定服务端是否已经启动。

下面我们通过实例看看如何使用Ribbon来调用服务,并实现客户端的均衡负载。

创建Ribbon消费者服务

添加依赖

<parent>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-parentartifactId>
    <version>1.5.9.RELEASEversion>
    <relativePath />
parent>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-dependenciesartifactId>
            <version>Edgware.RELEASEversion>
            <type>pomtype>
            <scope>importscope>
        dependency>
    dependencies>
dependencyManagement>
<dependencies>
    <dependency>
        <groupId>org.springframework.cloudgroupId>
        <artifactId>spring-cloud-starter-eurekaartifactId>
    dependency>
    <dependency>
        <groupId>org.springframework.cloudgroupId>
        <artifactId>spring-cloud-starter-ribbonartifactId>
    dependency>
dependencies>

创建入口类

@EnableDiscoveryClient
@SpringBootApplication
public class SpringCloudConsumerRibbonApplication {

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

创建配置文件

server:
  port: 8002
spring:
  application:
    name: springcloud-consumer-ribbon
eureka:
  client:
    service-url:
      defaultZone: http://peer1:8080/eureka/

配置RestTemplate bean

@Configuration
public class BeanConfig {

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

创建service接口

@Service("restfulSerivce")
public class RestfulServiceImpl {

    @Autowired private RestTemplate restTemplate ;

    public String getRestData(String name){
        return restTemplate.getForObject("http://springcloud-service-rest/api/rest/message?name="+name,String.class) ;
    }
}

创建controller接口

@RestController
public class RestfulController {

    @Autowired private RestfulServiceImpl restfulService ;

    @Value("${server.port}")
    String port ;
    @Value("${spring.application.name}")
    String name ;

    @RequestMapping("/home")
    public String home(@RequestParam String name){
        return "I am info from port("+port+") from application name("+name+") invoke other service." + "\n"
                +restfulService.getRestData(name);
    }
}

启动项目

1.启动服务注册集群(springcloud-server-eureka)

http://peer1:8080/

http://peer2:8090/

2.启动服务提供者(springcloud-producer-rest)

http://peer1:8001/

3.启动服务消费者(springcloud-consumer-ribbon)

http://peer1:8002/

效果图:

springcloud实战之5 服务消费者(ribbon)_第1张图片

调用服务

消费者消费服务,访问消费者(springcloud-consumer-ribbon)对外提供的接口

http://localhost:8002/api/rest/home

效果图如下:

这里写图片描述

历史文章

springcloud实战之高可用服务注册中心(eureka集群)

springcloud实战之服务注册与发现(eureka实现)

springcloud实战之技术选型:dubbo还是springcloud

参考文档

netflix-ribbon-starter

项目源码

springcloud-server-eureka

springcloud-producer-rest

springcloud-consumer-ribbon

你可能感兴趣的:(springcloud实战,springcloud实战系列)