1. 程式人生 > >springcloud之服務消費者(ribbon)

springcloud之服務消費者(ribbon)

serve frame ribbon lee cti 代碼 images net 發現

本章介紹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


歡迎關註本人公眾號,掃碼發現更多精彩內容

技術分享 本文為原創文章,歡迎轉載,轉載請註明作者

springcloud之服務消費者(ribbon)