springCould:使用Feign 實現聲明式服務調用


一、Spring Cloud Feign概念引入
通過前面的隨筆,我們了解如何通過Spring Cloud ribbon進行負責均衡,如何通過Spring Cloud Hystrix進行服務斷路保護,
兩者作為基礎工具類框架應用在各種基礎設施類微服務和業務類微服務中,並且成對存在,那么有沒有更高層的封裝,將兩者的使用
進一步簡化呢? 有! 他就是Spring Cloud Feign。它基於Netflix Feign實現,整合了Spring Cloud Ribbon和Spring Cloud Hystrix,
除了提供兩者強大的功能外,還提供了一種聲明式的Web服務客戶端定義方式

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.sam</groupId>
    <artifactId>feign-consumer</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.1.RELEASE</version>
    </parent>

    <properties>
        <javaVersion>1.8</javaVersion>
    </properties>

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

    </dependencyManagement>

    <dependencies>
        <!-- 引入eureka 客戶端依賴 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <!-- 引入feign 依賴 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-feign</artifactId>
        </dependency>

    </dependencies>

</project>

properties文件:

server.port=9001

spring.application.name=feign-consumer

eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka

啟動類:

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class FeignConsumerApplication {

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

}

service:

/**
 * 通過@FeignClient注解指定服務名來綁定服務,這里的服務名字不區分大小寫
 * 然后再通過@RequestMapping來綁定服務下的rest接口
 *
 */
@FeignClient(name="hello-service")                         //這里的hello-service是服務提供方的名稱,而 @RequestMapping的hlleo為提供方的接口,
而此接口的返回類型為String

public interface FeignConsumerService{

@RequestMapping("/hello")
public String hello();
 }

controlller:

@RestController
public class FeiConsumerController {

    @Autowired
    FeignConsumerService consumerService;

    @RequestMapping("feign-consumer")
    public String feignConsumer() {
       return consumerService.hello();
        //return "feign consumer call finished!!!";
    }

}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM