天天看點

怎樣建構一個微服務項目? | 帶你讀《Spring Cloud Alibaba(2019)》之六

上一篇:如何實作用戶端負載均衡? | 帶你讀《Spring Cloud Alibaba(2019)》之五 下一篇:如何基于Nacos實作分布式配置中心? | 帶你讀《Spring Cloud Alibaba(2019)》之七

本文來自于《精通Spring Cloud Alibaba》課程的整理,講師為餘勝軍,

點選檢視視訊内容

本文系志願者整理,供配合學習中心課程使用,不做商業用途。

OpenFeign用戶端

OpenFeign是一個Web聲明式的Http用戶端調用工具,提供接口和注解形式調用。

SpringCloud第一代采用feign第二代采用openfeign

openfeign用戶端作用:是一個Web聲明式的Http用戶端遠端調用工具,底層是封裝HttpClient技術。

Openfeign屬于SPringleCloud自己研發,而feign是netflix代碼寫法幾乎是沒有任何變化。

建構微服務項目

mayikt-opefeign-parent---父工程

---mayikt-service-api----微服務Api接口層,定義了接口沒有任何代碼的業務實作

----mayikt-member-service-api---會員提供開放接口

----mayikt-order-service-api---訂單提供開放接口

---mayikt-service-impl----微服務Api實作層

----mayikt-member-service-impl---會員實作層

----mayikt-order-service-api---訂單實作層

微服務架構基本樣式,最大的優點能夠對我們feign實作複用機制。

Maven依賴

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


<dependencies>
    <!--  springboot 整合web元件-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        <version>0.2.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
        <version>2.0.0.RELEASE</version>
    </dependency>
</dependencies>
           

會員服務接口

public interface MemberService {

    /**
     * 提供會員接口
     *
     * @param userId
     * @return
     */
    @GetMapping("/getUser")
    String getUser(@RequestParam("userId") Long userId);
}
@RestController
public class MemberServiceImpl implements MemberService {
    @Value("${server.port}")
    private String serverPort;

    @Override
    public String getUser(Long userId) {
        return "我是會員服務端口号為:" + serverPort;
    }
}
           

訂單服務

@RestController
public class OrderService {
    @Autowired
    private MemberServiceFeign memberServiceFeign;

    /**
     * 訂單調用會員
     *
     * @return
     */
    @GetMapping("/orderToMember")
    public String orderToMember() {
        String result = memberServiceFeign.getUser(10L);
        return "我是訂單服務,調用會員服務接口傳回結果:" + result;
    }
}
@FeignClient(name = "meitemayikt-member")
public interface MemberServiceFeign extends MemberService {
//    /**
//     * 提供會員接口
//     *
//     * @param userId
//     * @return
//     */
//    @GetMapping("/getUser")
//    String getUser(@RequestParam("userId") Long userId);
}

           

注意feign用戶端調用的事項:

如果請求參數沒有加上注解的話,預設采用post請求發送。

Openfeign預設是支援負載均衡,ribbon。

Nacos服務注冊 服務名稱是否 有下劃線?

在微服務架構中服務的名稱命名不能夠有下劃線。