Spring-Cloud-Alibaba使用Nacos和Feign實現服務註冊發現和遠程接口調用

Spring-Cloud-Alibaba簡介

Spring Cloud Alibaba 致力於提供微服務開發的一站式解決方案。包含開發分佈式應用微服務的必需組件,方便開發者通過 Spring Cloud 編程模型輕鬆使用這些組件來開發分佈式應用服務。

依託 Spring Cloud Alibaba,您只需要添加一些註解和少量配置,就可以將 Spring Cloud 應用接入阿里微服務解決方案,通過阿里中間件來迅速搭建分佈式應用系統。
具體內容可以看Spring-Cloud-Alibaba中文文檔:Spring-Cloud-Alibaba中文文檔

主要功能

  • 服務限流降級:默認支持 WebServlet、WebFlux, OpenFeign、RestTemplate、Spring Cloud Gateway, Zuul, Dubbo 和 RocketMQ限流降級功能的接入,可以在運行時通過控制檯實時修改限流降級規則,還支持查看限流降級 Metrics 監控。
  • 服務註冊與發現:適配 Spring Cloud 服務註冊與發現標準,默認集成了 Ribbon 的支持。
  • 分佈式配置管理:支持分佈式系統中的外部化配置,配置更改時自動刷新。
  • 消息驅動能力:基於 Spring Cloud Stream 爲微服務應用構建消息驅動能力。
  • 分佈式事務:使用 @GlobalTransactional 註解, 高效並且對業務零侵入地解決分佈式事務問題。
  • 阿里雲對象存儲:阿里雲提供的海量、安全、低成本、高可靠的雲存儲服務。支持在任何應用、任何時間、任何地點存儲和訪問任意類型的數據。
  • 分佈式任務調度:提供秒級、精準、高可靠、高可用的定時(基於 Cron
    表達式)任務調度服務。同時提供分佈式的任務執行模型,如網格任務。網格任務支持海量子任務均勻分配到所有
    Worker(schedulerx-client)上執行。
  • 阿里雲短信服務:覆蓋全球的短信服務,友好、高效、智能的互聯化通訊能力,幫助企業迅速搭建客戶觸達通道

組件

  • Sentinel:把流量作爲切入點,從流量控制、熔斷降級、系統負載保護等多個維度保護服務的穩定性。
  • Nacos:一個更易於構建雲原生應用的動態服務發現、配置管理和服務管理平臺。
  • RocketMQ:一款開源的分佈式消息系統,基於高可用分佈式集羣技術,提供低延時的、高可靠的消息發佈與訂閱服務。
  • Dubbo:Apache Dubbo™ 是一款高性能 Java RPC 框架。
  • Seata:阿里巴巴開源產品,一個易於使用的高性能微服務分佈式事務解決方案。
  • Alibaba Cloud ACM:一款在分佈式架構環境中對應用配置進行集中管理和推送的應用配置中心產品。
  • Alibaba Cloud OSS: 阿里雲對象存儲服務(Object Storage Service,簡稱 OSS),是阿里雲提供的海量、安全、低成本、高可靠的雲存儲服務。您可以在任何應用、任何時間、任何地點存儲和訪問任意類型的數據。
  • Alibaba Cloud SchedulerX: 阿里中間件團隊開發的一款分佈式任務調度產品,提供秒級、精準、高可靠、高可用的定時(基於
    Cron 表達式)任務調度服務。
  • Alibaba Cloud SMS: 覆蓋全球的短信服務,友好、高效、智能的互聯化通訊能力,幫助企業迅速搭建客戶觸達通道

項目使用(首先使用Idea創建兩個Spring-Boot項目)

啓動Nacos註冊中心

這裏有兩種方式,官方推薦使用源碼構建,在實際項目當中也得用源碼構建,我是爲了學習,所以選擇了直接下載

  • 直接下載:Nacos直接下載地址我選擇的是windows的版本(nacos-server-1.2.1.zip)
  • 源碼下載地址:源碼下載地址
    只是一個maven項目,正常啓動就可以
  • 由於我是直接下載,所以下載下來是一個壓縮包,解壓以後,進入/bin目錄可以看到一個startup.cmd文件
  • 使用cmd窗口執行 startup.cmd命令即可啓動
  • 默認端口是8848,啓動成以後我們可以進去http://127.0.0.1:8848/nacos/#
    默認賬號和密碼都是nacos

在項目的pom.xml文件中引入dependencyManagement依賴

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2.2.0.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

在兩個項目當中引入Nacos的依賴

<dependency>
     <groupId>com.alibaba.cloud</groupId>
     <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
 </dependency>

在項目的啓動類加上註解

@SpringBootApplication
@EnableDiscoveryClient //開啓服務的註冊與發現
public class GulimallCouponApplication {

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

}

在應用的 /src/main/resources/application.properties 配置文件中配置 Nacos Server 地址(使用application.yml也可以本人使用的就是yml

spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

注意因爲要使用遠程調用,所以必須配置服務名:spring.application.name= test
我的配置圖

spring:
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql://ip:3306/gulimall_ums?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.jdbc.Driver
  #  使用nacos的註冊中心
  cloud:
    nacos:
      discovery:
        #註冊中心地址
        server-addr: 127.0.0.1:8848
  application:
    name: test
mybatis-plus:
  mapper-locations: classpath:/mapper/**/*.xml
  global-config:
    db-config:
      id-type: auto
      logic-delete-value: 1
      logic-not-delete-value: 0
server:
  port: 8000

配置成功以後就可以啓動,在nacos裏面看到

在這裏插入圖片描述
好了到這裏我們的註冊中心服務於發現就已經完成了

將兩個項目使用Nacos進行遠程調用

在優惠券項目當中寫一條接口查詢某個會員的優惠券

 /**
     * 獲取會員的所有優惠券
     * @return
     */
    @RequestMapping("/member/list")
    public R membercoupons(){
        CouponEntity couponEntity = new CouponEntity();
        couponEntity.setCouponName("買一百送一萬");
        return R.ok().put("coupons",Arrays.asList(couponEntity)); 

會員項目調用優惠券項目

  1. 首先創建一天遠程調用的接口
    在這裏插入圖片描述
    內容如下:
//feignClient接口 有參數在參數必須加@PathVariable("XXX")和@RequestParam("XXX")
@FeignClient("gulimall-coupon")//表示要遠程調用註冊中心名稱
public interface CouponFeignService {
    @RequestMapping("/coupon/coupon/member/list")
    public R membercoupons();
}

解釋一下:

  • @FeignClient(“gulimall-coupon”) 它裏面的名稱就是你在nacos裏面看到的服務名,表示你要遠程調用那個服務
  • @RequestMapping("/coupon/coupon/member/list") 這個就是遠程項目接口的路徑
  1. 然後我們在會員系統中調用這條接口在這裏插入圖片描述
  2. 在會員系統的啓動類加上支持遠程調用的註解
@EnableFeignClients(basePackages = "com.atguigu.gulimall.member.feign") //開啓遠程調用功能

這裏的路徑就是你之前寫遠程調用接口的路徑

完成以後啓動項目,使用會員系統調用優惠系統的接口 在這裏插入圖片描述

到這裏就結束了,完成了註冊發現與遠程調用
在這裏插入圖片描述
本人也是一邊工作一邊在學習,如果有不正確的地方還希望大家可以幫我指出來,共同進步

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章