基于spring boot 2.x cloud服務消費 (Ribbon和Feign)

Ribbon方式

創(chuàng)建的eureka-consumer工程,pom.xml在client的基礎上添加ribbon依賴:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.1.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<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.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

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

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Finchley.RC1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

在啟動程序Application中同樣添加@EnableDiscoveryClient向服務中心注冊,并且注入一個beanrestTemplate;
通過@LoadBalanced注解表明開啟負載均衡的功能

@EnableDiscoveryClient
@SpringBootApplication
public class EurekaConsumerApplication {

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

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

寫一個測試controller類,注入restTemplate,并在/consumer接口中消費之前注冊的服務,url為之前注冊的EUREKA-CLIENT,

@RestController
public class CosumerController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/consumer")
    public String consumer() {
        String url = "http://EUREKA-CLIENT/disc";
        return restTemplate.getForObject(url, String.class);
    }
}

啟動之前創(chuàng)建的服務中心,兩個客戶端和一個消費端,訪問剛才創(chuàng)建的接口http://localhost:2101/consumer,瀏覽器是兩個client服務的交替顯示,說明ribbon已經(jīng)做了負載均衡

Services: [eureka-client, eureka-consumer]:2001  #客戶端1
Services: [eureka-client, eureka-consumer]:2002  #客戶端2
Services: [eureka-client, eureka-consumer]:2001  #客戶端1
Services: [eureka-client, eureka-consumer]:2002  #客戶端2
Services: [eureka-client, eureka-consumer]:2001  #客戶端1
Services: [eureka-client, eureka-consumer]:2002  #客戶端2

此時的結構:

  • 一個服務中心eureka-server,端口 1001,
  • 兩個客戶端eureka-client, 端口分別是2001 和2002,
  • 一個消費端eureka-consumer, 端口是2101,當訪問 eureka-consumer時,因為用ribbon進行了負載均衡,會輪流的調(diào)用兩個客戶端。

Feign方式

在之前eureka-consumer基礎上,引入Feign,pom.xml文件依賴:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency> 

啟動application添加@EnableFeignClients注解,刪除restTemplate,修改后如下:

@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class EurekaConsumerApplication {

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

添加一個FeignServerClient抽象類接口,通過@FeignClient("服務名")來指定調(diào)用哪個服務,比如調(diào)用eureka-client

@FeignClient("eureka-client")
public interface FeignServerClient {

    @GetMapping("/disc")
    String consumer();
} 

ConsumerController刪除restTemplate,注入剛才創(chuàng)建的抽象類接口

@RestController
public class CosumerController {

    @Autowired
    FeignServerClient feignServerClient;

    @GetMapping("/consumer")
    public String consumer() {
        return feignServerClient.consumer();
    }
} 

按照Ribbon一樣啟動啟動之前創(chuàng)建的服務中心、客戶端和消費端,訪問http://localhost:2101/consumer,輸出結果和ribbon一樣,F(xiàn)eign具有負載均衡

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容