springboot:提供了快速开发微服务的能力
springcloud提供了微服务治理的能力(服务注册与发现、服务降级、限流、熔断、网关、负载均衡、配置中心...),为微服务开发提供了全家桶服务
springboot的版本查看地址:Spring Boot
springcloud的版本查看地址:Spring Cloud
详细版本对应信息查看:https://start.spring.io/actuator/info

Springcloud与springcloud-alibaba关系
◆ 我们通常说的SpringCloud,泛指Spring Cloud Netflix,也是springcloud第一代
◆ SpringCloud Alibaba是SpringCloud的子项目,是阿里巴巴结合自身微服务实践,
◆ SpringCloud Alibaba符合SpringCloud标准,依赖于springcloud

确定方式:通过查看springcloud alibaba 官网确定

这里使用:
springcloud-alibaba: 2.2.5.RELEASE
springcloud: Hoxton.SR8
springboot: 2.3.2.RELEASE
父工程锁定springboot、springcloud、springcloud-alibaba版本
下图为示例项目模块 父项目用maven项目就可以

下图是父项目的pom.xml cloud1的pom.xml
- "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.0modelVersion>
-
- <groupId>com.qianfenggroupId>
- <artifactId>cloud1artifactId>
- <version>1.0-SNAPSHOTversion>
-
- <packaging>pompackaging>
-
- <modules>
- <module>goodsmodule>
- <module>ordersmodule>
- <module>commonsmodule>
- modules>
-
- <parent>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-parentartifactId>
- <version>2.3.2.RELEASEversion>
- <relativePath/>
- parent>
-
- <properties>
- <maven.compiler.source>8maven.compiler.source>
- <maven.compiler.target>8maven.compiler.target>
- <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
- properties>
-
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>com.alibaba.cloudgroupId>
- <artifactId>spring-cloud-alibaba-dependenciesartifactId>
- <version>2.2.5.RELEASEversion>
- <type>pomtype>
- <scope>importscope>
- dependency>
- <dependency>
- <groupId>org.springframework.cloudgroupId>
- <artifactId>spring-cloud-dependenciesartifactId>
- <version>Hoxton.SR8version>
- <type>pomtype>
- <scope>importscope>
- dependency>
-
- dependencies>
- dependencyManagement>
-
- project>
项目的goods older相当于是一个nacos客户端
goods的pom.xml
描述父项目 父项目里面写上关联子项目才算关联成功
- "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.0modelVersion>
-
- <parent>
- <groupId>com.qianfenggroupId>
- <artifactId>cloud1artifactId>
- <version>1.0-SNAPSHOTversion>
- parent>
-
- <groupId>com.qianfenggroupId>
- <artifactId>goodsartifactId>
- <version>0.0.1-SNAPSHOTversion>
- <name>goodsname>
- <description>goodsdescription>
-
- <properties>
- <java.version>1.8java.version>
- properties>
- <dependencies>
-
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-webartifactId>
- dependency>
-
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-actuatorartifactId>
- dependency>
-
- <dependency>
- <groupId>com.alibaba.cloudgroupId>
- <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
- dependency>
-
- <dependency>
- <groupId>org.projectlombokgroupId>
- <artifactId>lombokartifactId>
- dependency>
-
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-testartifactId>
- <scope>testscope>
- dependency>
-
- <dependency>
- <groupId>junitgroupId>
- <artifactId>junitartifactId>
- <scope>testscope>
- dependency>
-
- <dependency>
- <groupId>org.junit.jupitergroupId>
- <artifactId>junit-jupiterartifactId>
- <scope>testscope>
-
- dependency>
-
- dependencies>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-maven-pluginartifactId>
- plugin>
- plugins>
- build>
-
- project>
下图是goods的配置文件 这是一个springboot项目
- spring:
- application:
- name: goods
- cloud:
- nacos:
- discovery:
- server-addr: localhost:8848
- username: nacos
- password: nacos
-
-
- server:
- port: 9001
下图是goods一个controller controller的包要写在goods下面 访问时访问配置的9001


- @RestController
- @RequestMapping("/goods")
- public class GoodsController {
-
- @RequestMapping("/getOne")
- public Goods getOne(Integer gid){
-
- Goods goods = new Goods(gid, "小浣熊", 1);
-
- return goods;
- }
-
- }
order的pom.xml跟goods的xml一样 导依赖描述父项目 只是配置文件端口改为9002

commons是一个管理实体类的项目模块 pom文件如下 是一个maven项目
- "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>cloud1artifactId>
- <groupId>com.qianfenggroupId>
- <version>1.0-SNAPSHOTversion>
- parent>
-
- <modelVersion>4.0.0modelVersion>
-
- <artifactId>commonsartifactId>
-
- <dependencies>
- <dependency>
- <groupId>org.projectlombokgroupId>
- <artifactId>lombokartifactId>
- dependency>
-
- dependencies>
-
- <properties>
- <maven.compiler.source>8maven.compiler.source>
- <maven.compiler.target>8maven.compiler.target>
- <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
- properties>
-
- project>

例如order项目想引入goods实体类 导入commons的gva坐标就可以在order项目里使用实体类

在order订单的启动类里面注入RestTemplate对象 注入

在order的controller里面写如下代码 可以访问到goods的路径 并返回goods实体类

下图的http://goods 这里的goods是服务名 如何根据服务名服务就带有ip跟端口 如何做如下操作



在RestTemplate对象上加@LoadBalanced注解 就可以通过服务名访问

复制一个goods改为goods_8001 端口改为8001


复制过来只是一个文件夹不是项目,这时先进来改pom.xml,artifactID name都改为goods_8001


这时点击maven里的加号,选择goods_8001的pom.xml点ok 就成了一个项目

这时看nacos服务 goods的实例数成了两个 就做了集群

这时再访问下图链接

集群的两个轮询访问
实现服务间远程调用



示例:
下图是goods里面的一个test

下图是order的一个test

返回的是响应体

示例
返回的是一些响应体
