@TOC
問題背景
從零開始學springcloud微服務項目
注意事項:
- 約定 > 配置 > 編碼
- IDEA版本2021.1
- 這個項目,我分了很多篇章牌借,每篇文章一個操作步驟碍庵,目的是顯得更簡單明了
- controller調service映企,service調dao
- 項目源碼以及sentinel安裝包
nacos注冊中心
1 可以直接參考官網的安裝手冊進行安裝nacos
2 新建子模塊
3 選擇jdk1.8
4 輸入服務名:cloudalibaba-provider-payment9001和cloudalibaba-provider-payment9002
5 引入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">
<parent>
<artifactId>springcloud2022</artifactId>
<groupId>com.yg</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloudalibaba-provider-payment9001</artifactId>
<dependencies>
<!--SpringCloud ailibaba nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- SpringBoot整合Web組件 -->
<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>
<!--日常通用jar包配置-->
<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>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
6 新建application.yml文件
server:
port: 9001
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848 #配置Nacos地址
management:
endpoints:
web:
exposure:
include: '*'
7 整體目錄結構
新增cloudalibaba-consumer-nacos-order83訂單微服務
1 新建服務名:cloudalibaba-consumer-nacos-order83,導入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">
<parent>
<artifactId>springcloud2022</artifactId>
<groupId>com.yg</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloudalibaba-consumer-nacos-order83</artifactId>
<dependencies>
<!--SpringCloud ailibaba nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 引入自己定義的api通用包静浴,可以使用Payment支付Entity -->
<dependency>
<groupId>com.yg</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</dependency>
<!-- SpringBoot整合Web組件 -->
<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>
<!--日常通用jar包配置-->
<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>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
2 創(chuàng)建application.yml文件
server:
port: 83
spring:
application:
name: nacos-order-consumer
cloud:
nacos:
discovery:
server-addr: localhost:8848 #配置Nacos地址
#消費者將要去訪問的微服務名稱(注冊成功進nacos的微服務提供者)
service-url:
nacos-user-service: http://nacos-payment-provider
3 創(chuàng)建啟動類
package com.yg.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
* @Author suolong
* @Date 2022/6/20 18:29
* @Version 2.0
*/
@SpringBootApplication
@EnableDiscoveryClient
public class OrderNacosMain83 {
public static void main(String[] args) {
SpringApplication.run(OrderNacosMain83.class, args);
}
}
4 新增負載均衡http調用配置類
package com.yg.springcloud.config;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
/**
* @Author suolong
* @Date 2022/6/15 20:53
* @Version 2.0
*/
@Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced // 使用@LoadBalanced注解賦予RestTemplate負載均衡的能力
public RestTemplate restTemplate()
{
return new RestTemplate();
}
}
5 新增controller類
package com.yg.springcloud.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
/**
* @Author suolong
* @Date 2022/6/20 18:33
* @Version 2.0
*/
@RestController
public class OrderNacosController {
@Resource
private RestTemplate restTemplate;
@Value("${service-url.nacos-user-service}")
private String serverURL;
@GetMapping("/consumer/payment/nacos/{id}")
public String paymentInfo(@PathVariable("id") Long id)
{
return restTemplate.getForObject(serverURL+"/payment/nacos/"+id,String.class);
}
}
6 整體目錄結構
7 啟動nacos堰氓,賬號:nacos 密碼:nacos 啟動各個微服務,登錄nacos:http://localhost:8848/nacos
8 使用postman調用服務實現負載均衡:http://localhost:83/consumer/payment/nacos/1
nacos注冊中心對比
1 nacos全景圖
2 nacos與CAP
3 nacos的CP與AP切換
- C是所有節(jié)點在同一時間看到的數據是一致的苹享;而A的定義是所有的請求都會收到響應双絮。
- 何時選擇使用何種模式
- 如果不需要存儲服務級別的信息且服務實例是通過nacos-client注冊,并能夠保持心跳上報得问,那么就可以選擇AP模式囤攀。當前主流的服務如 Spring cloud 和 Dubbo 服務,都適用于AP模式宫纬,AP模式為了服務的可能性而減弱了一致性焚挠,因此AP模式下只支持注冊臨時實例
- 如果需要在服務級別編輯或者存儲配置信息,那么 CP 是必須哪怔,K8S服務和DNS服務則適用于CP模式宣蔚。
CP模式下則支持注冊持久化實例向抢,此時則是以 Raft 協(xié)議為集群運行模式,該模式下注冊實例之前必須先注冊服務胚委,如果服務不存在挟鸠,則會返回錯誤
curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'
SpringCloud無介紹快使用,Seata處理分布式事務(二十五)
SpringCloud無介紹快使用亩冬,sentinel服務熔斷功能(二十四)
SpringCloud無介紹快使用艘希,sentinel注解@SentinelResource的基本使用(二十三)
SpringCloud無介紹快使用,sentinel熱點key限流與系統(tǒng)規(guī)則的基本使用(二十二)
SpringCloud無介紹快使用硅急,sentinel熔斷降級和限流的基本使用(二十一)
SpringCloud無介紹快使用覆享,Nacos集群和Nginx代理(二十)
SpringCloud無介紹快使用,nacos配置中心的基本使用(十九)
SpringCloud無介紹快使用营袜,nacos注冊中心的基本使用(十八)
SpringCloud無介紹快使用撒顿,gateway通過微服務名實現動態(tài)路由(十七)
SpringCloud無介紹快使用,gateway的基本使用(十六)
SpringCloud無介紹快使用荚板,Ribbon負載均衡工具與OpenFeign的使用(十五)
SpringCloud無介紹快使用凤壁,使用Zookeeper替換Eureka服務注冊與發(fā)現(十四)
SpringCloud無介紹快使用,服務發(fā)現Discovery和Eureka自我保護(十三)
SpringCloud無介紹快使用跪另,集群cloud-provider-payment8002搭建(十二)
SpringCloud無介紹快使用拧抖,集群Eureka服務注冊中心cloud-eureka-server7002搭建(十一)
SpringCloud無介紹快使用,單機Eureka服務注冊中心cloud-eureka-server7001搭建(十)
SpringCloud無介紹快使用免绿,新建cloud-api-commons公共模塊module(九)
SpringCloud無介紹快使用唧席,新建子module消費者訂單模塊(八)
SpringCloud無介紹快使用,熱部署devtools配置(七)
SpringCloud無介紹快使用嘲驾,子module提供者支付微服務業(yè)務開發(fā)(六)
SpringCloud無介紹快使用淌哟,新建子module提供者支付微服務yml整合和新建啟動類(五)
SpringCloud無介紹快使用,新建子module提供者支付微服務pom整合(四)
SpringCloud無介紹快使用距淫,springcloud父工程pom文件整理(三)
SpringCloud無介紹快使用绞绒,IDEA新建springcloud父工程(二)
SpringCloud無介紹快使用,與Spingboot之間的兼容版本選擇(一)
作為程序員第 185 篇文章榕暇,每次寫一句歌詞記錄一下蓬衡,看看人生有幾首歌的時間,wahahaha ...