最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring?Cloud環(huán)境和工程基本搭建過(guò)程

 更新時(shí)間:2026年05月09日 11:57:12   作者:努力也學(xué)不會(huì)Java.  
本文主要介紹了如何使用SpringCloud搭建微服務(wù)環(huán)境,包括選擇JDK版本、服務(wù)拆分原則、數(shù)據(jù)準(zhǔn)備、構(gòu)建父子工程、完善啟動(dòng)類(lèi)和配置文件、實(shí)現(xiàn)遠(yuǎn)程調(diào)用等步驟,并指出SpringCloud可解決的實(shí)際工程問(wèn)題,感興趣的朋友一起看看吧

一、開(kāi)發(fā)環(huán)境安裝

1、JDK環(huán)境

1.1、JDK

1.1.1、JDK版本介紹

Oracle從JDK9開(kāi)始每半年發(fā)布?個(gè)新版本, 新版本發(fā)布后, ?版本就不再進(jìn)?維護(hù). 但是會(huì)有?個(gè)長(zhǎng)期維護(hù)的版本.
目前長(zhǎng)期維護(hù)的版本有: JDK8, JDK11, JDK17, JDK21,在JDK版本的選擇上,盡量選擇長(zhǎng)期維護(hù)的版本.
為什么選擇JDK17?
Spring Cloud 是基于 SpringBoot 進(jìn)行開(kāi)發(fā)的, SpringBoot 3.X以下的版本, Spring官方已不再進(jìn)行維護(hù)(還可以繼續(xù)使用), SpringBoot 3.X的版本, 使用的JDK版本基線(xiàn)為JDK17. 所以本文選擇使用JDK17

2、案例介紹

2.1、需求

實(shí)現(xiàn)?個(gè)電商平臺(tái)(不真實(shí)實(shí)現(xiàn), 僅為演示)。一個(gè)電商平臺(tái)包含的內(nèi)容非常多, 以京東為例, 僅從首頁(yè)上就可以看到巨多的功能

我們?cè)撊绾螌?shí)現(xiàn)呢? 如果把這些功能全部寫(xiě)在?個(gè)服務(wù)?, 這個(gè)服務(wù)將是巨大的.巨多的會(huì)員, 巨大的流量, 微服務(wù)架構(gòu)是最好的選擇.
微服務(wù)應(yīng)用開(kāi)發(fā)的第?步, 就是服務(wù)拆分. 拆分后才能進(jìn)行"各自開(kāi)發(fā)

2.2、服務(wù)拆分

服務(wù)拆分原則:
微服務(wù)到底多小才算"微", 這個(gè)在業(yè)界并沒(méi)有明確的標(biāo)準(zhǔn). 微服務(wù)并不是越?越好, 服務(wù)越?, 微服務(wù)架構(gòu)的優(yōu)點(diǎn)和缺點(diǎn)都會(huì)越來(lái)越明顯.
服務(wù)越小, 微服務(wù)的獨(dú)立性就會(huì)越來(lái)越?, 但同時(shí), 微服務(wù)的數(shù)量也會(huì)越多, 管理這些微服務(wù)的難度也會(huì)提高. 所以服務(wù)拆分也要考慮場(chǎng)景

還是以企業(yè)管理為例
企業(yè)中一個(gè)員工的工作內(nèi)容與企業(yè)規(guī)模, 項(xiàng)?規(guī)模等都有關(guān)系.
在小公司, ?個(gè)員工可能需要負(fù)責(zé)很多部門(mén)的事情, 大公司的話(huà), ?個(gè)部門(mén)的工作可能需要多個(gè)員工來(lái)處理.

拆分微服務(wù)—般遵循如下原則:

  • 單?職責(zé)原則
    • 單?職責(zé)原則原本是面向?qū)ο笤O(shè)計(jì)中的?個(gè)基本原則, 它指的是?個(gè)類(lèi)應(yīng)該專(zhuān)注于單?功能. 不要存在多于?個(gè)導(dǎo)致類(lèi)變更的原因. 在微服務(wù)架構(gòu)中,一個(gè)微服務(wù)也應(yīng)該只負(fù)責(zé)?個(gè)功能或業(yè)務(wù)領(lǐng)域, 每個(gè)服務(wù)應(yīng)該有清晰的定義和邊界, 只關(guān)注自己的特定業(yè)務(wù)領(lǐng)域
  • 服務(wù)自治
    • 服務(wù)自治是指每個(gè)微服務(wù)都應(yīng)該具備高度自治的能力, 即每個(gè)服務(wù)要能做到獨(dú)立開(kāi)發(fā), 獨(dú)立測(cè)試, 獨(dú)立構(gòu)建, 獨(dú)立部署, 獨(dú)立運(yùn)行.
    • 以上面的電商系統(tǒng)為例,每?個(gè)微服務(wù)應(yīng)該有自己的存儲(chǔ), 配置,在進(jìn)行開(kāi)發(fā), 構(gòu)建, 部署, 運(yùn)行和測(cè)試時(shí),并不需要過(guò)多關(guān)注其他微服務(wù)的狀態(tài)和數(shù)據(jù)。
  • 單向依賴(lài)
    • 微服務(wù)之間需要做到單向依賴(lài), 嚴(yán)禁循環(huán)依賴(lài), 雙向依賴(lài)
    • 循環(huán)依賴(lài): A -> B -> C ->A
    • 雙向依賴(lài): A -> B, B -> A

微服務(wù)架構(gòu)并無(wú)標(biāo)準(zhǔn)架構(gòu), 合適的就是最好的, 不然架構(gòu)師大會(huì)也不會(huì)各個(gè)系統(tǒng)架構(gòu)百花齊放了.
在架構(gòu)設(shè)計(jì)的過(guò)程中, 堅(jiān)持 “合適優(yōu)于業(yè)界領(lǐng)先”, 避免"過(guò)度設(shè)計(jì)"(為了設(shè)計(jì)而設(shè)計(jì)). 很多業(yè)界領(lǐng)先方案并不是?群天才在某個(gè)時(shí)期一下子做出來(lái)的, 而是經(jīng)過(guò)數(shù)年的發(fā)展逐步完善. 業(yè)界領(lǐng)先的方案?多是"逼"出來(lái)的, 隨著業(yè)務(wù)的發(fā)展, 量變導(dǎo)致質(zhì)變,新的問(wèn)題出現(xiàn)了, 當(dāng)前的?案?法滿(mǎn)?需求, 需要用新的方案來(lái)解決. 通過(guò)不斷的創(chuàng)新和嘗試,業(yè)界領(lǐng)先的方案才得以形成。

服務(wù)拆分示例:
?個(gè)完整的電商系統(tǒng)是龐大的, 咱們課程中重點(diǎn)關(guān)注如何使用SpringCloud解決微服務(wù)架構(gòu)中遇到的問(wèn)題.
以訂單列表為例:訂單列表需要包含的主要信息有:
1.訂單列表
2. 商品信息

根據(jù)服務(wù)的單?職責(zé)原則, 我們把服務(wù)進(jìn)行拆分為: 訂單服務(wù), 商品服務(wù)
訂單服務(wù): 提供訂單ID, 獲取訂單詳細(xì)信息
商品服務(wù): 根據(jù)商品ID, 返回商品詳細(xì)信息.

3.數(shù)據(jù)準(zhǔn)備

根據(jù)服務(wù)自治原則, 每個(gè)服務(wù)都應(yīng)有自己獨(dú)立的數(shù)據(jù)庫(kù)
訂單服務(wù):

-- 建庫(kù)
create database if not exists cloud_order charset utf8mb4;
-- 訂單表
DROP TABLE IF EXISTS order_detail;
CREATE TABLE order_detail (
 `id` INT NOT NULL AUTO_INCREMENT COMMENT '訂單id',
 `user_id` BIGINT ( 20 ) NOT NULL COMMENT '??ID',
 `product_id` BIGINT ( 20 ) NULL COMMENT '產(chǎn)品id',
 `num` INT ( 10 ) NULL DEFAULT 0 COMMENT '下單數(shù)量',
 `price` BIGINT ( 20 ) NOT NULL COMMENT '實(shí)付款',
 `delete_flag` TINYINT ( 4 ) NULL DEFAULT 0,
 `create_time` DATETIME DEFAULT now(),
 `update_time` DATETIME DEFAULT now(),
PRIMARY KEY ( id )) ENGINE = INNODB DEFAULT CHARACTER
SET = utf8mb4 COMMENT = '訂單表';
-- 數(shù)據(jù)初始化
insert into order_detail (user_id,product_id,num,price)
values(2001, 1001,1,99), (2002, 1002,1,30), (2001, 1003,1,40),
(2003, 1004,3,58), (2004, 1005,7,85), (2005, 1006,7,94);
create database if not exists cloud_product charset utf8mb4;
-- 產(chǎn)品表
DROP TABLE IF EXISTS product_detail;
CREATE TABLE product_detail (
 `id` INT NOT NULL AUTO_INCREMENT COMMENT '產(chǎn)品id',
 `product_name` varchar ( 128 ) NULL COMMENT '產(chǎn)品名稱(chēng)',
 `product_price` BIGINT ( 20 ) NOT NULL COMMENT '產(chǎn)品價(jià)格',
 `state` TINYINT ( 4 ) NULL DEFAULT 0 COMMENT '產(chǎn)品狀態(tài) 0-有效 1-下架',
 `create_time` DATETIME DEFAULT now(),
 `update_time` DATETIME DEFAULT now(),
PRIMARY KEY ( id )) ENGINE = INNODB DEFAULT CHARACTER
SET = utf8mb4 COMMENT = '產(chǎn)品表';
-- 數(shù)據(jù)初始化
insert into product_detail (id, product_name,product_price,state)
values
(1001,"T恤", 101, 0), (1002, "短袖",30, 0), (1003, "短褲",44, 0), 
(1004, "衛(wèi)?",58, 0), (1005, "?甲",98, 0),(1006,"?絨服", 101, 0), 
(1007, "沖鋒?",30, 0), (1008, "襪?",44, 0), (1009, "鞋?",58, 0),
(10010, "??",98, 0)

4.工程搭建

4.1、構(gòu)建父子工程

4.1.1、創(chuàng)建父工程

1.創(chuàng)建?個(gè)空的Maven項(xiàng)?, 刪除所有代碼, 只保留pom.xml
2.目錄結(jié)構(gòu):

2. 完善pom文件
使用properties來(lái)進(jìn)行版本號(hào)的統(tǒng)一管理, 使用dependencyManagement來(lái)管理依賴(lài), 聲明父工程的打包方式為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 
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>spring-cloud-demo</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.1.6</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
    <java.version>17</java.version>
    <mybatis.version>3.0.3</mybatis.version>
    <mysql.version>8.0.33</mysql.version>
    <spring-cloud.version>2022.0.3</spring-cloud.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>
<dependencyManagement>
    <dependencies>
        <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>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>${mybatis.version}</version>
        </dependency>
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>${mysql.version}</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter-test</artifactId>
            <version>${mybatis.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
</project>

DependencyManagement 和 Dependencies:

1 . dependencies :將所依賴(lài)的jar直接加到項(xiàng)目中. 子項(xiàng)目也會(huì)繼承該依賴(lài).
2 . dependencyManagement :只是聲明依賴(lài), 并不實(shí)現(xiàn)Jar包引入. 如果子項(xiàng)目需要用到相關(guān)依賴(lài),需要顯式聲明. 如果子項(xiàng)目沒(méi)有指定具體版本, 會(huì)從?項(xiàng)?中讀取version. 如果子項(xiàng)目中指定了版本號(hào),就會(huì)使用子項(xiàng)目中指定的jar版本. 此外父?程的打包方式應(yīng)該是pom,不是jar, 這里需要手動(dòng)使用 packaging 來(lái)聲明

4.1.2、創(chuàng)建子項(xiàng)目-訂單服務(wù)

做如下操作:

聲明項(xiàng)目依賴(lài) 和 項(xiàng)目構(gòu)建插件:

<dependencies>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
</dependency>
<!--mybatis-->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
</plugins>
</build>

4.1.3、創(chuàng)建子項(xiàng)目-商品服務(wù)

創(chuàng)建模塊部分同上

下面聲明項(xiàng)目依賴(lài)和項(xiàng)目構(gòu)建插件

<dependencies>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
</dependency>
<!--mybatis-->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
</plugins>
</build>

4.2、完善訂單服務(wù)

4.2.1、完善啟動(dòng)類(lèi), 配置文件

啟動(dòng)類(lèi):

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

配置文件:

server:
 port: 8080
spring:
 datasource:
 url: jdbc:mysql://127.0.0.1:3306/cloud_order?characterEncoding=utf8&useSSL=false
 username: root
 password: root
 driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
 configuration: # 配置打印 MyBatis?志 
  log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  map-underscore-to-camel-case: true #配置駝峰?動(dòng)轉(zhuǎn)換

4.2.2 業(yè)務(wù)代碼

  1. 實(shí)體類(lèi):
@Data
public class OrderInfo {
 private Integer id;
 private Integer userId;
 private Integer productId;
 private Integer num;
 private Integer price;
 private Integer deleteFlag;
 private Date createTime;
 private Date updateTime;
}
  1. Controller
    @RequestMapping("/order")
    @RestController
    public class OrderController {
        @Autowired
        private OrderService orderService;
        @RequestMapping("/{orderId}")
        public OrderInfo getOrderById(@PathVariable("orderId") Integer orderId){
            return orderService.selectOrderById(orderId);
        }
    }
  1. Service
 @Service
    public class OrderService {
        @Autowired
        private OrderMapper orderMapper;
        public OrderInfo selectOrderById(Integer orderId) {
            OrderInfo orderInfo = orderMapper.selectOrderById(orderId);
            return orderInfo;
        }
    }
  1. Mapper
 @Mapper
 public interface OrderMapper {
        @Select("select * from order_detail where id=#{orderId}")
        OrderInfo selectOrderById(Integer orderId);
    }

完善商品服務(wù)類(lèi)似,故代碼不展示。

4.3、遠(yuǎn)程調(diào)用

4.3.1、需求

根據(jù)訂單查詢(xún)訂單信息時(shí), 根據(jù)訂單里產(chǎn)品ID, 獲取產(chǎn)品的詳細(xì)信息.

4.4.2、實(shí)現(xiàn)

實(shí)現(xiàn)思路:: order-service服務(wù)向product-service服務(wù)發(fā)送?個(gè)http請(qǐng)求, 把得到的返回結(jié)果, 和訂單結(jié)果融合在?起, 返回給調(diào)用方.
實(shí)現(xiàn)方式: 采用Spring 提供的RestTemplate

1 . 定義RestTemplate:

 @Configuration
    public class BeanConfig {
        @Bean
        public RestTemplate restTemplate(){
            return new RestTemplate();
        }
    }
  1. 修改order-service中的 OrderService
    @Service
    public class OrderService {
        @Autowired
        private OrderMapper orderMapper;
        @Autowired
        private RestTemplate restTemplate;
        public OrderInfo selectOrderById(Integer orderId) {
            OrderInfo orderInfo = orderMapper.selectOrderById(orderId);
            String url = "http://127.0.0.1:9090/product/"+
                    orderInfo.getProductId();
            ProductInfo productInfo = restTemplate.getForObject(url,
                    ProductInfo.class);
            orderInfo.setProductInfo(productInfo);
            return orderInfo;
        }
    }

5.RestTemplate

RestTemplate 是從 Spring3.0 開(kāi)始支持的?個(gè) HTTP 請(qǐng)求?具, 它是?個(gè)同步的 REST API 客戶(hù)端, 提供了常見(jiàn)的REST請(qǐng)求方案的模版

什么是REST?
REST(Representational State Transfer), 表現(xiàn)層資源狀態(tài)轉(zhuǎn)移.
REST是由HTTP的主要設(shè)計(jì)者提出來(lái)的?種軟件架構(gòu)風(fēng)格.這里面主要有三個(gè)概念:

1 . 資源: 網(wǎng)絡(luò)上的所有事物都可以抽象為資源, 每個(gè)資源都有?個(gè)唯?的資源標(biāo)識(shí)符(URI)
2 . 表現(xiàn)層: 資源的表現(xiàn)形式, 比如文本作為資源, 可以用txt格式表現(xiàn), 也可以通過(guò)HTML, XML, JSON等格式來(lái)表現(xiàn), 甚至以二進(jìn)制的格式表現(xiàn).
3 . 狀態(tài)轉(zhuǎn)移: 訪(fǎng)問(wèn)URI, 也就是客?端和服務(wù)器的交互過(guò)程. 客戶(hù)端用到的手段,只能是HTTP協(xié)議. 這個(gè)過(guò)程中, 可能會(huì)涉及到數(shù)據(jù)狀態(tài)的變化. 比如對(duì)數(shù)據(jù)的增刪改查, 都是狀態(tài)的轉(zhuǎn)移

REST 是一種設(shè)計(jì)風(fēng)格, 指資源在網(wǎng)絡(luò)中以某種表現(xiàn)形式進(jìn)行狀態(tài)轉(zhuǎn)移.
簡(jiǎn)單來(lái)說(shuō): REST描述的是在網(wǎng)絡(luò)中Client和Server的?種交互形式, REST本身不實(shí)用,實(shí)用的是如何設(shè)計(jì)RESTful API(REST風(fēng)格的網(wǎng)絡(luò)接口)

什么是RESTful?
REST 是?種設(shè)計(jì)風(fēng)格, 并沒(méi)有?個(gè)明確的標(biāo)準(zhǔn). 滿(mǎn)足這種設(shè)計(jì)風(fēng)格的程序或接口我們稱(chēng)之為RESTful(從單詞字面來(lái)看就是?個(gè)形容詞). 所以RESTful API 就是滿(mǎn)足REST架構(gòu)風(fēng)格的接口.

RESTful風(fēng)格大致有以下幾個(gè)主要特征:

  1. 資源: 資源可以是?個(gè)圖片, 音頻, 視頻或者JSON格式等網(wǎng)絡(luò)上的?個(gè)實(shí)體, 除了?些?進(jìn)制的資源外普通的文本資源更多以JSON為載體、面向用戶(hù)的?組數(shù)據(jù)(通常從數(shù)據(jù)庫(kù)中查詢(xún)而得到)
    2 . 統(tǒng)?接口: 對(duì)資源的操作. 比如獲取, 創(chuàng)建, 修改和刪除. 這些操作正好對(duì)應(yīng)HTTP協(xié)議提供的GET、POST、PUT和DELETE方法. 換言而知,如果使用RESTful風(fēng)格的接口, 從接?上你可能只能定位其資源,但是無(wú)法知曉它具體進(jìn)行了什么操作,需要具體了解其發(fā)?了什么操作動(dòng)作要從其HTTP請(qǐng)求方法類(lèi)型上進(jìn)行判斷
    比如同?個(gè)的URL:
    GET /blog/{blogId}:查詢(xún)博客
    DELETE /blog/{blogId}:刪除博客
    這些內(nèi)容都是通過(guò)HTTP協(xié)議來(lái)呈現(xiàn)的. 所以RESTful是基于HTTP協(xié)議的.
    RestTemplate 是Spring提供, 封裝HTTP調(diào)用, 并強(qiáng)制使用RESTful風(fēng)格. 它會(huì)處理HTTP連接和關(guān)閉,只需要使用者提供資源的地址和參數(shù)即可

RESTful實(shí)踐
RESTful風(fēng)格的API 固然很好很規(guī)范, 但?多數(shù)互聯(lián)網(wǎng)公司并沒(méi)有按照其規(guī)則來(lái)設(shè)計(jì), 因?yàn)镽EST是?種風(fēng)格,而不是?種約束或規(guī)則, 過(guò)于理想的RESTful API 會(huì)付出太多的成本.
RESTful API 缺點(diǎn):

  1. 操作方式繁瑣, RESTful API通常根據(jù)GET, POST, PUT, DELETE 來(lái)區(qū)分對(duì)資源的操作動(dòng)作. 但是HTTP Method 并不可直接見(jiàn)到, 需要通過(guò)抓包等?具才能觀察. 如果把動(dòng)作放在URL上反而更加直觀, 更利于團(tuán)隊(duì)的理解和交流.
  2. ?些瀏覽器對(duì)GET, POST之外的請(qǐng)求支持不太友好, 需要額外處理.
  3. 過(guò)分強(qiáng)調(diào)資源. 而實(shí)際業(yè)務(wù)需求可能比較復(fù)雜, 并不能單純使用增刪改查就能滿(mǎn)足需求, 強(qiáng)行使用RESTful API會(huì)增加開(kāi)發(fā)難度和成本.
    所以, 在實(shí)際開(kāi)發(fā)中, 如果業(yè)務(wù)需求和RESTful API不太匹配或者很麻煩時(shí), 也可以不用RESTful API. 如果使用場(chǎng)景和REST風(fēng)格比較匹配, 就可以采用RESTful API.
    總之: 無(wú)論哪種風(fēng)格的API, 都是為了方便團(tuán)隊(duì)開(kāi)發(fā), 協(xié)商以及管理, 不能墨守成規(guī). 盡信規(guī)范不如無(wú)規(guī)范.

6.項(xiàng)目存在問(wèn)題

• 遠(yuǎn)程調(diào)用時(shí), URL的IP和端口號(hào)是寫(xiě)死的(http://127.0.0.1:9090/product/), 如果更換IP, 需要修改代碼
? 調(diào)用方如何可以不依賴(lài)服務(wù)提供?的IP?
• 多機(jī)部署, 如何分?jǐn)倝毫?
• 遠(yuǎn)程調(diào)用時(shí), URL非常容易寫(xiě)錯(cuò), 而且復(fù)用性不高, 如何優(yōu)雅的實(shí)現(xiàn)遠(yuǎn)程調(diào)用
• 所有的服務(wù)都可以調(diào)用該接口, 是否有風(fēng)險(xiǎn)?
除此之外, 微服務(wù)架構(gòu)還面臨很多問(wèn)題, 我會(huì)在本系列后續(xù)文章一一為大家介紹學(xué)習(xí)如何使用Spring Cloud 來(lái)解決這些問(wèn)題.

二、總結(jié)

以上就是本文全部?jī)?nèi)容,主要主要搭建了后續(xù)Spring Cloud后續(xù)組件使用的基本工程環(huán)境,以及引出了相關(guān)spring cloud可以解決的實(shí)際工程問(wèn)題。

到此這篇關(guān)于Spring Cloud環(huán)境和工程基本搭建過(guò)程的文章就介紹到這了,更多相關(guān)Spring Cloud環(huán)境搭建內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springcloud引入spring-cloud-starter-openfeign失敗的解決

    springcloud引入spring-cloud-starter-openfeign失敗的解決

    這篇文章主要介紹了springcloud?引入spring-cloud-starter-openfeign失敗的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java中的volatile關(guān)鍵字解析

    Java中的volatile關(guān)鍵字解析

    這篇文章主要介紹了Java中的volatile關(guān)鍵字解析,Java內(nèi)存模型規(guī)定了所有的變量都存儲(chǔ)在主內(nèi)存中,每個(gè)線(xiàn)程都有自己的工作內(nèi)存,線(xiàn)程的工作內(nèi)存保存了該線(xiàn)程使用到的變量的是主內(nèi)存副本的拷貝,需要的朋友可以參考下
    2023-11-11
  • springBoot無(wú)法加載application.properties的問(wèn)題解決

    springBoot無(wú)法加載application.properties的問(wèn)題解決

    本文介紹了SpringBoot項(xiàng)目中測(cè)試類(lèi)無(wú)法讀取application.properties配置文件的問(wèn)題,詳細(xì)記錄了排查過(guò)程及解決方案,感興趣的可以了解一下
    2025-07-07
  • Java字符串四大類(lèi)之String、StringBuffer、StringBuilder、StringJoiner詳解

    Java字符串四大類(lèi)之String、StringBuffer、StringBuilder、StringJoiner詳解

    String類(lèi)、StringBuffer類(lèi)和StringBuilder類(lèi)提供了豐富的API/方法來(lái)處理字符串,包括但不限于字符串連接、替換、截取、比較、查找等,這篇文章主要介紹了Java字符串四大類(lèi)之String、StringBuffer、StringBuilder、StringJoiner的相關(guān)資料,需要的朋友可以參考下
    2026-01-01
  • java中HttpClient使用方法舉例詳解

    java中HttpClient使用方法舉例詳解

    這篇文章主要介紹了java中HttpClient使用方法的相關(guān)資料,HttpClient提供了發(fā)送HTTP請(qǐng)求和接收HTTP響應(yīng)的功能,簡(jiǎn)化了HTTP通信的處理,減少了對(duì)外部庫(kù)的依賴(lài),文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-12-12
  • listview點(diǎn)擊無(wú)效的處理方法(推薦)

    listview點(diǎn)擊無(wú)效的處理方法(推薦)

    下面小編就為大家?guī)?lái)一篇listview點(diǎn)擊無(wú)效的處理方法(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • Maven依賴(lài)中scope的runtime和provied的區(qū)別及說(shuō)明

    Maven依賴(lài)中scope的runtime和provied的區(qū)別及說(shuō)明

    這篇文章主要介紹了Maven依賴(lài)中scope的runtime和provied的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • idea撤銷(xiāo)git?commit操作詳解

    idea撤銷(xiāo)git?commit操作詳解

    這篇文章主要為大家介紹了idea撤銷(xiāo)git?commit操作詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • Spring注解和同步鎖不能同步問(wèn)題解決

    Spring注解和同步鎖不能同步問(wèn)題解決

    這篇文章主要介紹了Spring注解和同步鎖不能同步問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • 詳解JAVA 函數(shù)式編程

    詳解JAVA 函數(shù)式編程

    這篇文章主要介紹了JAVA 函數(shù)式編程的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07

最新評(píng)論

静宁县| 盐津县| 聊城市| 大港区| 慈溪市| 高邑县| 西充县| 昆明市| 锡林浩特市| 河曲县| 确山县| 共和县| 靖安县| 两当县| 景德镇市| 富顺县| 土默特左旗| 遵化市| 丰顺县| 平南县| 安西县| 河源市| 三门县| 长海县| 成武县| 娱乐| 鸡泽县| 石阡县| 肇州县| 竹溪县| 颍上县| 肃宁县| 平乐县| 青田县| 奉节县| 游戏| 开封县| 宜良县| 桑植县| 罗平县| 二连浩特市|