@TOC
問題背景
從零開始學(xué)springcloud微服務(wù)項目
注意事項:
- 約定 > 配置 > 編碼
- IDEA版本2021.1
- 這個項目咱旱,我分了很多篇章,每篇文章一個操作步驟,目的是顯得更簡單明了
- controller調(diào)service豌骏,service調(diào)dao
- 項目源碼以及sentinel安裝包
服務(wù)集群搭建
1 cloud-provider-payment8002子模塊module創(chuàng)建
2 選擇jdk1.8
3 輸入服務(wù)名:cloud-provider-payment8002
4 導(dǎo)入依賴
<?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-provider-payment8002</artifactId>
<dependencies>
<!--eureka-client-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency><!-- 引入自己定義的api通用包代承,可以使用Payment支付Entity -->
<groupId>com.yg</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</dependency>
<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.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<!--mysql-connector-java-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--jdbc-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</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>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
5 添加application.yml文件
server:
port: 8002
spring:
application:
name: cloud-payment-service
datasource:
#type: com.alibaba.druid.pool.DruidDataSource # 當(dāng)前數(shù)據(jù)源操作類型
driver-class-name: com.mysql.cj.jdbc.Driver # mysql驅(qū)動包
url: jdbc:mysql://localhost:3306/mysqltest?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 123456
eureka:
client:
#表示是否將自己注冊進(jìn)EurekaServer默認(rèn)為true汁蝶。
register-with-eureka: true
#是否從EurekaServer抓取已有的注冊信息,默認(rèn)為true论悴。單節(jié)點無所謂掖棉,集群必須設(shè)置為true才能配合ribbon使用負(fù)載均衡
fetchRegistry: true
service-url:
#defaultZone: http://localhost:7001/eureka
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
mybatis:
mapperLocations: classpath:mapper/*.xml
type-aliases-package: com.yg.springcloud.entities # 所有Entity別名類所在包
6 復(fù)制服務(wù)cloud-provider-payment8001的業(yè)務(wù)代碼到cloud-provider-payment8002,更改啟動類的類名
7 修改cloud-provider-payment8001和cloud-provider-payment8002的PaymentController膀估,更改從yml中獲取服務(wù)端口
package com.yg.springcloud.controller;
import com.yg.springcloud.entities.CommonResult;
import com.yg.springcloud.entities.Payment;
import com.yg.springcloud.service.PaymentService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
/**
* @Author suolong
* @Date 2022/6/14 21:36
* @Version 2.0
*/
@RestController
@Slf4j
public class PaymentController {
@Value("${server.port}")
private String serverPort;
@Resource
private PaymentService paymentService;
@PostMapping(value = "/payment/create")
public CommonResult create(@RequestBody Payment payment) {
int result = paymentService.create(payment);
log.info("result哈哈哈: {}", result);
if (result > 0) {
return new CommonResult(200, "插入成功", result);
}
return new CommonResult(500, "插入失敗", null);
}
@GetMapping(value = "/payment/get/{id}")
public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id) {
Payment payment = paymentService.getPaymentById(id);
log.info("查詢結(jié)果哈哈哈hahah:{}", payment);
if (payment != null) {
return new CommonResult(200, "查詢成功哈: " + serverPort, payment);
} else {
return new CommonResult(500, "沒有對應(yīng)記錄,查詢ID: " + id, null);
}
}
}
8 修改cloud-consumer-order80中的OrderController的PaymentSrv_URL的地址
public static final String PaymentSrv_URL = "http://CLOUD-PAYMENT-SERVICE";
在ApplicationContextConfig中添加注解@LoadBalanced幔亥,進(jìn)行負(fù)載均衡Ribbon
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負(fù)載均衡的能力
public RestTemplate restTemplate()
{
return new RestTemplate();
}
}
9 先啟動EurekaService,在啟動其他所有服務(wù):http://eureka7001.com:7001/
10 查詢兩次察纯,實現(xiàn)負(fù)載均衡:http://localhost/consumer/payment/get/1
第一次使用的8001端口
第二次使用的8002端口
11 由此可見restTemplate可以直接使用服務(wù)名進(jìn)行調(diào)用
public String PaymentSrv_URL = "http://CLOUD-PAYMENT-SERVICE";
restTemplate.postForObject(PaymentSrv_URL + "/payment/create", payment, CommonResult.class);
12 actuator更改主機(jī)名稱帕棉,顯示ip针肥,更改yml
cloud-consumer-order80
server:
port: 80
spring:
application:
name: cloud-consumer-order80
eureka:
client:
#表示是否將自己注冊進(jìn)EurekaServer默認(rèn)為true。
register-with-eureka: true
#是否從EurekaServer抓取已有的注冊信息香伴,默認(rèn)為true慰枕。單節(jié)點無所謂,集群必須設(shè)置為true才能配合ribbon使用負(fù)載均衡
fetchRegistry: true
service-url:
#defaultZone: http://localhost:7001/eureka
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
instance:
instance-id: order80
prefer-ip-address: true #訪問路徑可以顯示IP地址
cloud-payment-service8002
server:
port: 8002
spring:
application:
name: cloud-payment-service
datasource:
#type: com.alibaba.druid.pool.DruidDataSource # 當(dāng)前數(shù)據(jù)源操作類型
driver-class-name: com.mysql.cj.jdbc.Driver # mysql驅(qū)動包
url: jdbc:mysql://localhost:3306/mysqltest?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 123456
eureka:
client:
#表示是否將自己注冊進(jìn)EurekaServer默認(rèn)為true即纲。
register-with-eureka: true
#是否從EurekaServer抓取已有的注冊信息具帮,默認(rèn)為true。單節(jié)點無所謂低斋,集群必須設(shè)置為true才能配合ribbon使用負(fù)載均衡
fetchRegistry: true
service-url:
#defaultZone: http://localhost:7001/eureka
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
instance:
instance-id: payment8002
prefer-ip-address: true #訪問路徑可以顯示IP地址
mybatis:
mapperLocations: classpath:mapper/*.xml
type-aliases-package: com.yg.springcloud.entities # 所有Entity別名類所在包
cloud-payment-service8001
server:
port: 8001
spring:
application:
name: cloud-payment-service
datasource:
#type: com.alibaba.druid.pool.DruidDataSource # 當(dāng)前數(shù)據(jù)源操作類型
driver-class-name: com.mysql.cj.jdbc.Driver # mysql驅(qū)動包
url: jdbc:mysql://localhost:3306/mysqltest?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 123456
eureka:
client:
#表示是否將自己注冊進(jìn)EurekaServer默認(rèn)為true蜂厅。
register-with-eureka: true
#是否從EurekaServer抓取已有的注冊信息,默認(rèn)為true膊畴。單節(jié)點無所謂掘猿,集群必須設(shè)置為true才能配合ribbon使用負(fù)載均衡
fetchRegistry: true
service-url:
#defaultZone: http://localhost:7001/eureka
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
instance:
instance-id: payment8001
prefer-ip-address: true #訪問路徑可以顯示IP地址
mybatis:
mapperLocations: classpath:mapper/*.xml
type-aliases-package: com.yg.springcloud.entities # 所有Entity別名類所在包
12 更改之后,查看服務(wù)名變化:http://eureka7001.com:7001/
SpringCloud無介紹快使用巴比,Seata處理分布式事務(wù)(二十五)
SpringCloud無介紹快使用术奖,sentinel服務(wù)熔斷功能(二十四)
SpringCloud無介紹快使用,sentinel注解@SentinelResource的基本使用(二十三)
SpringCloud無介紹快使用轻绞,sentinel熱點key限流與系統(tǒng)規(guī)則的基本使用(二十二)
SpringCloud無介紹快使用采记,sentinel熔斷降級和限流的基本使用(二十一)
SpringCloud無介紹快使用,Nacos集群和Nginx代理(二十)
SpringCloud無介紹快使用政勃,nacos配置中心的基本使用(十九)
SpringCloud無介紹快使用唧龄,nacos注冊中心的基本使用(十八)
SpringCloud無介紹快使用,gateway通過微服務(wù)名實現(xiàn)動態(tài)路由(十七)
SpringCloud無介紹快使用奸远,gateway的基本使用(十六)
SpringCloud無介紹快使用既棺,Ribbon負(fù)載均衡工具與OpenFeign的使用(十五)
SpringCloud無介紹快使用,使用Zookeeper替換Eureka服務(wù)注冊與發(fā)現(xiàn)(十四)
SpringCloud無介紹快使用懒叛,服務(wù)發(fā)現(xiàn)Discovery和Eureka自我保護(hù)(十三)
SpringCloud無介紹快使用丸冕,集群cloud-provider-payment8002搭建(十二)
SpringCloud無介紹快使用,集群Eureka服務(wù)注冊中心cloud-eureka-server7002搭建(十一)
SpringCloud無介紹快使用薛窥,單機(jī)Eureka服務(wù)注冊中心cloud-eureka-server7001搭建(十)
SpringCloud無介紹快使用胖烛,新建cloud-api-commons公共模塊module(九)
SpringCloud無介紹快使用,新建子module消費者訂單模塊(八)
SpringCloud無介紹快使用诅迷,熱部署devtools配置(七)
SpringCloud無介紹快使用佩番,子module提供者支付微服務(wù)業(yè)務(wù)開發(fā)(六)
SpringCloud無介紹快使用,新建子module提供者支付微服務(wù)yml整合和新建啟動類(五)
SpringCloud無介紹快使用罢杉,新建子module提供者支付微服務(wù)pom整合(四)
SpringCloud無介紹快使用趟畏,springcloud父工程pom文件整理(三)
SpringCloud無介紹快使用,IDEA新建springcloud父工程(二)
SpringCloud無介紹快使用滩租,與Spingboot之間的兼容版本選擇(一)
作為程序員第 179 篇文章赋秀,每次寫一句歌詞記錄一下利朵,看看人生有幾首歌的時間,wahahaha ...