springcloud干货之服务消费者(ribbon)

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-28 09:29:13

 

springcloud系列文章的第二篇

本章介绍springcloud中的服务消费者

  springcloud服务调用方式有两种实现方式:

    1,restTemplate+ribbon,

    2,feign

 

 本来想一篇讲完,发现篇幅有点长,所以本章先讲 restTemplate+ribbon,

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

    Feign默认集成了ribbon。

    

 项目实战:

新一个springboot项目,名字为 eureka-consumer-ribbon 

其pom.xml配置如下

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-ribbon</artifactId>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Dalston.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

   在项目启动类Application上添加@EnableDiscoveryClient注解(上一章提到了@EnableDiscoveryClient和@EnableEurekaServer的区别)向服务中心注册服务,

并且使用@bean像spring容器中注入一个restTemplate对象,@LoadBalanced注解表明这个restRemplate开启负载均衡的功能。

@EnableDiscoveryClient
@SpringBootApplication
public class Application {
    
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    public static void main(String[] args) {
        new SpringApplicationBuilder(Application.class).web(true).run(args);
    }
}

在application.properties中指定,服务名:eureka-consumer-ribbon,端口为9101,服务注册中心地址为:http://localhost:9001/eureka/

spring.application.name=eureka-consumer-ribbon
server.port=9101
eureka.client.serviceUrl.defaultZone=http://localhost:9001/eureka/

新建一个RibbonController类,用来消费eureka-client的服务

@RestController
public class RibbonController {


  @Autowired
  RestTemplate restTemplate;

  @GetMapping("/consumer")
  public String getMsg() {

    return restTemplate.getForObject("http://eureka-client/client", String.class);
  }

}

这里的请求地址使用http://server-name,来代替http://ip:port,因为在ribbon中它会根据服务名来选择具体的服务实例,根据服务实例在请求的时候会用具体的url替换掉服务名,这里请求的是eureka-client/client

 

使用上一章已经创建的项目eureka-server,eureka-client这俩项目

 首先:

      1,启动 eureka-server

    2,启动 eureka-client 配置文件的端口默认为9002

    3,修改配置文件的端口为9003,再启动一个eureka-client 

    4,在启动 eureka-consumer-ribbon 

 

访问http://localhost:9001/,就会发现,已经有eureka-clent服务注册了,而且有两个实例,9002和9003

   

      访问 http://localhost:9101/consumer,就会发现已经消费了 eureka-client项目提供的服务,而且ribbon已经默认实现了负载均衡

      

      

 

 


 
本文代码:
 
  码云:
 
  GitHub:

 

参考资料:

  感谢分享:

    翟永超:http://blog.didispace.com/spring-cloud-starter-dalston-1/

    方志鹏:http://blog.csdn.net/forezp/article/details/70148833#t0

 


欢迎关注本人公众号,扫码发现更多精彩内容       

      本文为原创文章,欢迎转载,转载请注明作者
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!