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


    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

     


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

          本文为原创文章,欢迎转载,转载请注明作者
  • 相关阅读:
    妙用sql的统计进行集合的比较
    kissy学习笔记(1)上手kissy
    Ext与现有项目的结合(一)完全封装已有的HTML元素使之成为Ext的组件
    Fix IE6 剪贴板撤销机制CtrlZ,CtrlY功能会在由于Js动态改变页面元素的value后失效的Problem
    Ajax个人开发心得(一)先从一个最简单的ajax功能模块说起,Ajax技术其实很简单
    【转】仅用 []()+! 就足以实现几乎任意Javascript代码
    为什么不用13px字体
    Ajax个人开发心得(二)页面逻辑与页面表现的分离,让你的Ajax编程更加模块化
    纯JS转换Select为Combox,完美实现原select所有功能
    关于window.parent的奇怪问题
  • 原文地址:https://www.cnblogs.com/cmyxn/p/7704687.html
Copyright © 2020-2023  润新知