@TOC
問(wèn)題背景
從零開(kāi)始學(xué)springcloud微服務(wù)項(xiàng)目
注意事項(xiàng):
- 約定 > 配置 > 編碼
- IDEA版本2021.1
- 這個(gè)項(xiàng)目恭朗,我分了很多篇章摘昌,每篇文章一個(gè)操作步驟渠欺,目的是顯得更簡(jiǎn)單明了
- controller調(diào)service,service調(diào)dao
- 項(xiàng)目源碼以及sentinel安裝包
Eureka基本介紹
1 服務(wù)治理
- Spring Cloud 封裝了 Netflix 公司開(kāi)發(fā)的 Eureka 模塊來(lái)實(shí)現(xiàn)服務(wù)治理
- 在傳統(tǒng)的rpc遠(yuǎn)程調(diào)用框架中罗丰,管理每個(gè)服務(wù)與服務(wù)之間依賴(lài)關(guān)系比較復(fù)雜神帅,管理比較復(fù)雜,所以需要使用服務(wù)治理萌抵,管理服務(wù)于服務(wù)之間依賴(lài)關(guān)系找御,可以實(shí)現(xiàn)服務(wù)調(diào)用、負(fù)載均衡绍填、容錯(cuò)等霎桅,實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)與注冊(cè)
2 服務(wù)注冊(cè)與發(fā)現(xiàn) - Eureka采用了CS的設(shè)計(jì)架構(gòu),Eureka Server 作為服務(wù)注冊(cè)功能的服務(wù)器沐兰,它是服務(wù)注冊(cè)中心哆档。而系統(tǒng)中的其他微服務(wù),使用 Eureka的客戶(hù)端連接到 Eureka Server并維持心跳連接住闯。這樣系統(tǒng)的維護(hù)人員就可以通過(guò) Eureka Server 來(lái)監(jiān)控系統(tǒng)中各個(gè)微服務(wù)是否正常運(yùn)行瓜浸。
- 在服務(wù)注冊(cè)與發(fā)現(xiàn)中,有一個(gè)注冊(cè)中心比原。當(dāng)服務(wù)器啟動(dòng)的時(shí)候插佛,會(huì)把當(dāng)前自己服務(wù)器的信息 比如 服務(wù)地址通訊地址等以別名方式注冊(cè)到注冊(cè)中心上。另一方(消費(fèi)者|服務(wù)提供者)量窘,以該別名的方式去注冊(cè)中心上獲取到實(shí)際的服務(wù)通訊地址雇寇,然后再實(shí)現(xiàn)本地RPC調(diào)用RPC遠(yuǎn)程調(diào)用框架核心設(shè)計(jì)思想:在于注冊(cè)中心,因?yàn)槭褂米?cè)中心管理每個(gè)服務(wù)與服務(wù)之間的一個(gè)依賴(lài)關(guān)系(服務(wù)治理概念)蚌铜。在任何rpc遠(yuǎn)程框架中锨侯,都會(huì)有一個(gè)注冊(cè)中心(存放服務(wù)地址相關(guān)信息(接口地址))
-
下左圖是Eureka系統(tǒng)架構(gòu),右圖是Dubbo的架構(gòu)
3 Eureka包含兩個(gè)組件:Eureka Server和Eureka Client
-
Eureka Server提供服務(wù)注冊(cè)服務(wù)
各個(gè)微服務(wù)節(jié)點(diǎn)通過(guò)配置啟動(dòng)后冬殃,會(huì)在EurekaServer中進(jìn)行注冊(cè)囚痴,這樣EurekaServer中的服務(wù)注冊(cè)表中將會(huì)存儲(chǔ)所有可用服務(wù)節(jié)點(diǎn)的信息,服務(wù)節(jié)點(diǎn)的信息可以在界面中直觀看到审葬。
-
Eureka Client通過(guò)注冊(cè)中心進(jìn)行訪(fǎng)問(wèn)
是一個(gè)Java客戶(hù)端深滚,用于簡(jiǎn)化Eureka Server的交互,客戶(hù)端同時(shí)也具備一個(gè)內(nèi)置的涣觉、使用輪詢(xún)(round-robin)負(fù)載算法的負(fù)載均衡器痴荐。在應(yīng)用啟動(dòng)后,將會(huì)向Eureka Server發(fā)送心跳(默認(rèn)周期為30秒)官册。如果Eureka Server在多個(gè)心跳周期內(nèi)沒(méi)有接收到某個(gè)節(jié)點(diǎn)的心跳生兆,EurekaServer將會(huì)從服務(wù)注冊(cè)表中把這個(gè)服務(wù)節(jié)點(diǎn)移除(默認(rèn)90秒)
Eureka服務(wù)搭建cloud-eureka-server7001
1 新建cloud-eureka-server7001的module
2 選擇jdk1.8
3 輸入服務(wù)名:cloud-eureka-server7001
4 引入pom依賴(lài)
<?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">
<parent>
<artifactId>springcloud2022</artifactId>
<groupId>com.yg</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-eureka-server7001</artifactId>
<dependencies>
<!--eureka-server-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<!-- 引入自己定義的api通用包,可以使用Payment支付Entity -->
<dependency>
<groupId>com.yg</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--boot web actuator-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--一般通用配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
</project>
5 新添application.yml
server:
port: 7001
eureka:
instance:
hostname: localhost #eureka服務(wù)端的實(shí)例名稱(chēng)
client:
#false表示不向注冊(cè)中心注冊(cè)自己膝宁。
register-with-eureka: false
#false表示自己端就是注冊(cè)中心皂贩,我的職責(zé)就是維護(hù)服務(wù)實(shí)例栖榨,并不需要去檢索服務(wù)
fetch-registry: false
service-url:
#設(shè)置與Eureka Server交互的地址查詢(xún)服務(wù)和注冊(cè)服務(wù)都需要依賴(lài)這個(gè)地址。
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
6 創(chuàng)建啟動(dòng)類(lèi)明刷,需要使能Eureka婴栽,加上注解@EnableEurekaServer
package com.yg.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
/**
* @Author suolong
* @Date 2022/6/17 11:39
* @Version 2.0
*/
@EnableEurekaServer
@SpringBootApplication
public class EurekaMain7001 {
public static void main(String[] args) {
SpringApplication.run(EurekaMain7001.class);
}
}
7 啟動(dòng)EurekaService
8 打開(kāi)瀏覽器,輸入:http://localhost:7001/
9 在服務(wù)cloud-consumer-order80和cloud-provider-payment8001的pom添加Eureka依賴(lài)
<!--eureka-client-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
10 在cloud-consumer-order80和cloud-provider-payment8001的application中添加eureka
cloud-consumer-order80
server:
port: 80
spring:
application:
name: cloud-consumer-order80
eureka:
client:
#表示是否將自己注冊(cè)進(jìn)EurekaServer默認(rèn)為true辈末。
register-with-eureka: true
#是否從EurekaServer抓取已有的注冊(cè)信息愚争,默認(rèn)為true。單節(jié)點(diǎn)無(wú)所謂挤聘,集群必須設(shè)置為true才能配合ribbon使用負(fù)載均衡
fetchRegistry: true
service-url:
defaultZone: http://localhost:7001/eureka
cloud-provider-payment8001
server:
port: 8001
spring:
application:
name: cloud-payment-service
datasource:
#type: com.alibaba.druid.pool.DruidDataSource # 當(dāng)前數(shù)據(jù)源操作類(lèi)型
driver-class-name: com.mysql.cj.jdbc.Driver # mysql驅(qū)動(dòng)包
url: jdbc:mysql://localhost:3306/mysqltest?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 123456
eureka:
client:
#表示是否將自己注冊(cè)進(jìn)EurekaServer默認(rèn)為true轰枝。
register-with-eureka: true
#是否從EurekaServer抓取已有的注冊(cè)信息,默認(rèn)為true组去。單節(jié)點(diǎn)無(wú)所謂鞍陨,集群必須設(shè)置為true才能配合ribbon使用負(fù)載均衡
fetchRegistry: true
service-url:
defaultZone: http://localhost:7001/eureka
mybatis:
mapperLocations: classpath:mapper/*.xml
type-aliases-package: com.yg.springcloud.entities # 所有Entity別名類(lèi)所在包
11 在cloud-consumer-order80和cloud-provider-payment8001的啟動(dòng)類(lèi)中添加@注解EnableEurekaClient
cloud-provider-payment8001
package com.yg.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
/**
* @Author suolong
* @Date 2022/6/14 20:31
* @Version 2.0
*/
@EnableEurekaClient
@SpringBootApplication
public class PaymentMain8001 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain8001.class);
}
}
cloud-consumer-order80
package com.yg.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
/**
* @Author suolong
* @Date 2022/6/15 15:10
* @Version 2.0
*/
@EnableEurekaClient
@SpringBootApplication
public class MainApp80 {
public static void main(String[] args) {
SpringApplication.run(MainApp80.class);
}
}
12 啟動(dòng)三個(gè)服務(wù),注冊(cè)成功
SpringCloud無(wú)介紹快使用从隆,Seata處理分布式事務(wù)(二十五)
SpringCloud無(wú)介紹快使用诚撵,sentinel服務(wù)熔斷功能(二十四)
SpringCloud無(wú)介紹快使用,sentinel注解@SentinelResource的基本使用(二十三)
SpringCloud無(wú)介紹快使用键闺,sentinel熱點(diǎn)key限流與系統(tǒng)規(guī)則的基本使用(二十二)
SpringCloud無(wú)介紹快使用寿烟,sentinel熔斷降級(jí)和限流的基本使用(二十一)
SpringCloud無(wú)介紹快使用,Nacos集群和Nginx代理(二十)
SpringCloud無(wú)介紹快使用辛燥,nacos配置中心的基本使用(十九)
SpringCloud無(wú)介紹快使用筛武,nacos注冊(cè)中心的基本使用(十八)
SpringCloud無(wú)介紹快使用,gateway通過(guò)微服務(wù)名實(shí)現(xiàn)動(dòng)態(tài)路由(十七)
SpringCloud無(wú)介紹快使用挎塌,gateway的基本使用(十六)
SpringCloud無(wú)介紹快使用徘六,Ribbon負(fù)載均衡工具與OpenFeign的使用(十五)
SpringCloud無(wú)介紹快使用,使用Zookeeper替換Eureka服務(wù)注冊(cè)與發(fā)現(xiàn)(十四)
SpringCloud無(wú)介紹快使用榴都,服務(wù)發(fā)現(xiàn)Discovery和Eureka自我保護(hù)(十三)
SpringCloud無(wú)介紹快使用待锈,集群cloud-provider-payment8002搭建(十二)
SpringCloud無(wú)介紹快使用,集群Eureka服務(wù)注冊(cè)中心cloud-eureka-server7002搭建(十一)
SpringCloud無(wú)介紹快使用缭贡,單機(jī)Eureka服務(wù)注冊(cè)中心cloud-eureka-server7001搭建(十)
SpringCloud無(wú)介紹快使用炉擅,新建cloud-api-commons公共模塊module(九)
SpringCloud無(wú)介紹快使用辉懒,新建子module消費(fèi)者訂單模塊(八)
SpringCloud無(wú)介紹快使用阳惹,熱部署devtools配置(七)
SpringCloud無(wú)介紹快使用,子module提供者支付微服務(wù)業(yè)務(wù)開(kāi)發(fā)(六)
SpringCloud無(wú)介紹快使用眶俩,新建子module提供者支付微服務(wù)yml整合和新建啟動(dòng)類(lèi)(五)
SpringCloud無(wú)介紹快使用莹汤,新建子module提供者支付微服務(wù)pom整合(四)
SpringCloud無(wú)介紹快使用,springcloud父工程pom文件整理(三)
SpringCloud無(wú)介紹快使用颠印,IDEA新建springcloud父工程(二)
SpringCloud無(wú)介紹快使用纲岭,與Spingboot之間的兼容版本選擇(一)
作為程序員第 177 篇文章抹竹,每次寫(xiě)一句歌詞記錄一下,看看人生有幾首歌的時(shí)間止潮,wahahaha ...
Lyric: 還真是瞎透了什么都有
這是第6首歌窃判,已經(jīng)完結(jié)了,你們猜出歌名了嗎喇闸?
- 歌名:印第安老斑鳩
- 歌手:周杰倫
- 歌詞:方文山
- 專(zhuān)輯:Jay