建立服務消費者(Ribbon)

概述

在微服務架構中,業務都會被拆分紅一個獨立的服務,服務與服務的通信是基於 http restful 的。Spring cloud 有兩種服務調用方式,一種是 ribbon + restTemplate,另外一種是 feign。在這一篇文章首先講解下基於 ribbon + rest。 html

Ribbon簡介

Ribbon 是一個負載均衡客戶端,能夠很好的控制 http 和 tcp 的一些行爲。 java

準備工做

  • 啓動服務提供者web

  • 啓動Eureka註冊中心spring

建立服務消費者(POM)


       <!--spring cloud starter ribbon-->
       <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-starter-ribbon</artifactId>
       </dependency>
       
<!--spring cloud starter eureka-->
       <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>

 

Application


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@EnableDiscoveryClient
public class EurekaRibbonClientApplication {

   //使用註解@LoadBalanced標記RestTemplate
   @Bean
   @LoadBalanced
   public RestTemplate restTemplate() {
       return new RestTemplate();
  }

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

 

application.yml

server:
port: 9002

spring:
application:
  name: eureka-client-ribbon

eureka:
client:
  serviceUrl:
    defaultZone: http://localhost:1111/eureka/
instance:
  lease-renewal-interval-in-seconds: 10 #服務續約
  lease-expiration-duration-in-seconds: 15 #服務剔除>服務續約時間

建立測試的Controllerapi


import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;

@RestController
@RequestMapping("/api")
@Slf4j
public class RibbonController {

   @Autowired
   private RestTemplate restTemplate;
   
   //loadbalanced客戶端
   @Autowired
   private LoadBalancerClient loadBalancerClient;


   @GetMapping("/ribbon/hello")
   public String hello() {
       String result = restTemplate.getForObject("http://eureka-provider/hello",String.class);
       return result;
  }
}

 

在IDEA中配置一個工廠啓動多個實例

步驟一

點擊 Run -> Edit Configurations...restful

#步驟二

選擇須要啓動多實例的項目並去掉 Single instance only 前面的勾架構

#步驟三

經過修改 application.yml 配置文件的 server.port 的端口,啓動多個實例,須要多個端口,分別進行啓動便可。app

相關文章
相關標籤/搜索