Spring Cloud進階之路 | 二:服務提供者(discovery)


轉載請注明作者及出處:

作者:銀河架構師

原文鏈接:https://www.cnblogs.com/luas/p/12073156.html

1 創建父項目

 

以前文所述,以spring boot 2.1.7.RELEASE為基,spring cloud版本為Greenwich.SR2,spring cloud alibaba版本為2.1.0.RELEASE。后續均以此為版本參照,不再贅述。

 

pom

<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

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

    <groupId>com.luas.cloud</groupId>
    <artifactId>java-boot-parent-2.1</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <name>java-boot-parent-2.1</name>
    <description>Spring Cloud Learning, parent project by spring boot 2.1.x</description>

    <properties>
        <java.version>1.8</java.version>
        <hutool.version>4.6.13</hutool.version>
        <spring-cloud.version>Greenwich.SR2</spring-cloud.version>
        <spring-cloud-alibaba.version>2.1.0.RELEASE</spring-cloud-alibaba.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
        </dependency>

    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>cn.hutool</groupId>
                <artifactId>hutool-all</artifactId>
                <version>${hutool.version}</version>
            </dependency>

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>
 

2 創建商品工程

pom

<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.luas.cloud</groupId>
        <artifactId>java-boot-parent-2.1</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <relativePath>../../java-boot-parent-2.1</relativePath>
    </parent>

    <groupId>com.luas.cloud</groupId>
    <artifactId>xmall-product</artifactId>
    <version>1.0.0-SNAPSHOT</version>

    <name>xmall-product</name>
    <description>Spring Cloud Learning,nacos-client</description>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

 

注意,父工程便是上一步創建的父項目,特別注意一下relativePath,不如特殊指定,需要將父工程deploy到maven私服,子工程才能正常引用。

 

application配置

server:
  port: 8080

spring:
  application:
    name: xmall-product
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

注意,spring.application.name將作為xmall-product服務在nacos注冊后的服務名稱,該服務名稱非常重要,后續無論是通過feign調用,還是rest調用,均需要此名稱。

 

商品服務

package com.luas.cloud.controller;

import cn.hutool.core.map.MapUtil;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/sku")
public class SkuController {

    @RequestMapping("/{skuId}")
    public Object get(@PathVariable("skuId") String skuId) {
        return MapUtil.<String, Object>builder()
                .put("skuId", skuId)
                .put("name", "筆記本電腦")
                .put("price", 1199.00)
                .build();
    }

}

 

啟動類

package com.luas.cloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class XmallProductApplication {

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

}

 

 

關於@EnableDiscoveryClient注解,此處並沒有添加,而服務依然能正常注冊到nacos。什么原因呢?看如下兩段代碼即可明了:

 

image.png

 

image.png

 

image.png

 

此3處重要邏輯,均不依賴於是否配置了開啟參數,所以會自動注冊並監聽。

 

Nacos服務列表

 

打開nacos控制台,發現訪問已然在列表中,注冊成功!

 

image.png

可以點擊詳情查看服務元數據

 

訪問

 

訪問http://localhost:8080/sku/1000000,得出現如下結果:

 

image.png

源碼

 

歡迎點贊

 

  1. github:https://gitee.com/xbd521/SpringCloudLearning
  2. gitee: https://github.com/liuminglei/SpringCloudLearning

 

微信搜索【銀河架構師】,發現更多精彩內容。

 技術資料領取方法:關注公眾號,回復微服務,領取微服務相關電子書;回復MK精講,領取MK精講系列電子書;回復JAVA 進階,領取JAVA進階知識相關電子書;回復JAVA面試,領取JAVA面試相關電子書,回復JAVA WEB領取JAVA WEB相關電子書。

image.png


免責聲明!

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



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