天天看點

springcloud元件之一:feign(client)一、Feign實作聲明式REST調用

前提:建立好eureka-server,一套provider-consumer,注冊到Eureka注冊中心。

springcloud元件之一:feign(client)一、Feign實作聲明式REST調用

一、Feign實作聲明式REST調用

1.Feign簡介

HTTP用戶端
聲明式、模闆化
支援Spring MVC注解
           

Feign是Netflix開發的聲明式,模闆化的HTTP用戶端,其靈感來自Retrofit,JAXRS-2.0以及WebSocket.

  • Feign可幫助我們更加便捷,優雅的調用HTTP API。
  • 在SpringCloud中,使用Feign非常簡單——建立一個接口,并在接口上添加一些注解,代碼就完成了。
  • Feign支援多種注解,例如Feign自帶的注解或者JAX-RS注解等。
  • SpringCloud對Feign進行了增強,使Feign支援了SpringMVC注解,并整合了Ribbon和Eureka,進而讓Feign的使用更加友善。

2.Feign實作微服務接口調用

準備

注冊兩個微服務:Provider和Consumer

實作Consumer對Provider的接口調用

2.1 Provider建立服務方法

在provider 中添加UserService類,提供login()方法

@RestController
public class Userservice {
    @RequestMapping(value = "/login")
    public String login(){
        return "登入成功1";
    }
}
           

2.2 Consumer進行調用準備

在consumer項目pom中添加Feign依賴

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-feign</artifactId>
            <version>1.3.5.RELEASE</version>
</dependency>
           

2.3 consumer添加client、service、controller類

(因為使用的是feign元件,是以consumer不能直接調provieder,要通過client類來進行調用)

2.4 編寫client類

client中的接口是和provider項目中Controller類的接口一樣:就Url和參數清單一樣就可以, 其他的可以不一樣。

為接口添加@FeignClient注解并指定name屬性值為provider項目的名稱。

@FeignClient(name = "eureka-provider-demo",fallback = UserFallBack.class)
public interface UserClient {
    @RequestMapping(value = "/login")
    public String login();
}
           

2.5 consumer中建立的UserServicImpl類調用userClient。

consumer中的Controller類調用service。

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserClient userClient;

    @Override
    public String login() {
        return userClient.login();
    }
}
           
@RestController
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping(value = "/login")
    public String login(){
        return userService.login();
    }
}
           

2.6 consumer項目的啟動類添加注解:@EnableDiscoveryClient、@EnableFeignClients

2.7 通路provider中接口的URL和consumer中接口的URL,成功。

springcloud元件之一:feign(client)一、Feign實作聲明式REST調用

内容太多了 我做了子產品内容分離,springcloud的5個元件:feign、hystrix、ribbon、zuul、config都有博文分别介紹,如有需要請檢視:

springcloud元件之一:feign(client)

springcloud元件之二:hystrix(容錯&Hystrix處理容錯&Feign項目的監控&Hystrix Dashboard可視化監控&Turbine聚合監控)

springcloud元件之三:Ribbon(輪詢和随機負載)

springcloud元件之四:Zuul(zuul網關&網關過濾器)

springcloud元件之五:Config實作分布式配置

繼續閱讀