
目录
8.2 新建一个springboot项目为子项目 (生产者构建 Provider)
8.2.2 修改并添加子项目application.yml文件
8.3 新建一个springboot项目为子项目 (消费者构建 Consumer)
8.3.2 修改并添加子项目application.yml文件
9. 启动子项目Tomcat服务器前往Nacos管理页面查看服务
10.1 新增子项目【生产者构建 Provider】Controller模块代码
10.2 修改并添加子项目【消费者构建 Consumer】pom 文件
10.3 新增子项目【消费者构建 Consumer】Controller模块码
10.4 修改并添加子项目【消费者构建 Consumer】启动类
开发一个电商网站,要实现支付订单的功能,流程如下:
订单服务、库存服务、仓储服务、积分服务




Eureka Client: 负责将这个服务的信息注册到Eureka Server中
Eureka Server:注册中心,里面有一个注册表,保存了各个服务所在的机器和端口号

集群服务:库存服务部署在了5台机器上
Ribbon就是专门解决这个问题的。它的作用是负载均衡,会帮你在每次请求时选择一台机器,均匀的把 请求分发到各个机器上

出现问题:微服务架构中的服务雪崩问题

这个组件是负责网络路由的。
组件总和
流程


Spring Cloud 包含很多子项目: Netflix 和 Alibaba 两个标准使用最多
针对多种 Netflix 组件提供的开发工具包,其中包括 Eureka、Ribbon、Feign、Hystrix、Zuul、 Archaius 等。



Nacos 单节点,也就是 standalone 模式,默认使用嵌入式数据库实现数据的存储 不方便观察数据存储的基本情况,在0.7 版本以后增加了支持 MySQL 数据源能力。 集群搭建的时候需要将 Nacos 对接 Mysql 进行数据存储。
如果要搭建高可用的集群环境,至少要满足以下条件:
JDK 1.8+;
Maven 3.2.x+;
MySQL 5.6.5+(生产使用建议至少主备模式,或者采用高可用数据库);
3个或3个以上Nacos节点才能构成集群;



- # db mysql
- spring.datasource.platform=mysql
- db.num=1
- db.url.0=jdbc:mysql://localhost:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
- db.user=root
- db.password=1234



- "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.jmhgroupId>
- <artifactId>springcloud01artifactId>
- <version>1.0-SNAPSHOTversion>
-
- <packaging>pompackaging>
-
-
- <modules>
- <module>nacos_providermodule>
- <module>nacos_consumermodule>
- modules>
-
- <name>springcloud01 Maven Webappname>
-
- <url>http://www.example.comurl>
-
-
- <properties>
- <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
- <maven.compiler.source>1.7maven.compiler.source>
- <maven.compiler.target>1.7maven.compiler.target>
- <spring-boot.version>2.4.1spring-boot.version>
- <spring-cloud.version>2020.0.0spring-cloud.version>
- <spring-cloud-alibaba.version>2021.1spring-cloud-alibaba.version>
- properties>
-
-
- <dependencies>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-testartifactId>
- dependency>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-webartifactId>
- dependency>
- <dependency>
- <groupId>com.alibaba.cloudgroupId>
- <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
- dependency>
- <dependency>
- <groupId>org.springframework.cloudgroupId>
- <artifactId>spring-cloud-starter-openfeignartifactId>
- dependency>
- <dependency>
- <groupId>org.projectlombokgroupId>
- <artifactId>lombokartifactId>
- dependency>
- dependencies>
-
-
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-dependenciesartifactId>
- <version>${spring-boot.version}version>
- <type>pomtype>
- <scope>importscope>
- dependency>
- <dependency>
- <groupId>org.springframework.cloudgroupId>
- <artifactId>spring-cloud-dependenciesartifactId>
- <version>${spring-cloud.version}version>
- <type>pomtype>
- <scope>importscope>
- dependency>
- <dependency>
- <groupId>com.alibaba.cloudgroupId>
- <artifactId>spring-cloud-alibaba-dependenciesartifactId>
- <version>${spring-cloud-alibaba.version}version>
- <type>pomtype>
- <scope>importscope>
- dependency>
- dependencies>
- dependencyManagement>
-
-
- project>
packing:(打包类型,默认为jar)
pom : 父级项目(pom项目里没有java代码,也不执行任何代码,只是为了聚合工程或传递依赖用的)
jar : 内部调用或者是作服务使用
war : 需要部署的项目
dependencyManagement:(管理jar包的版本,让子项目中引用一个依赖而不用显示的列出版本号) dependencyManagement与dependencies区别: dependencies即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继 承)
dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依 赖。 如果不在子项目中声明依赖,是不会从父项目中继承下来的。 只有在子项目中写了了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和 scope都读取自父pom。 另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。modules(用来管理同个项目中的各个模块)
导入三个版本的原因:
nacos来自Spring Cloud Alibaba的(用于代替SpringCloud Eureka和SpringCloud Config) feign来自Spring Cloud 其他的正常来自与SpringBoot
- "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>
- <groupId>com.jmhgroupId>
- <artifactId>nacos_providerartifactId>
- <version>0.0.1-SNAPSHOTversion>
- <name>nacos_providername>
- <description>Demo project for Spring Bootdescription>
-
-
- <parent>
- <artifactId>springcloud01artifactId>
- <groupId>com.jmhgroupId>
- <version>1.0-SNAPSHOTversion>
- parent>
-
-
- <dependencies>
-
- dependencies>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-maven-pluginartifactId>
- plugin>
- plugins>
- build>
-
- project>
- server:
- port: 8081
- spring:
- cloud:
- nacos:
- server-addr: 127.0.0.1:8848
- application:
- name: nacos-provider
- package com.jmh.nacos_provider;
-
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
-
- @SpringBootApplication
- @EnableDiscoveryClient
- public class NacosProviderApplication {
-
- public static void main(String[] args) {
- SpringApplication.run(NacosProviderApplication.class, args);
- }
-
- }
- "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>
- <groupId>com.jmhgroupId>
- <artifactId>nacos_consumerartifactId>
- <version>0.0.1-SNAPSHOTversion>
- <name>nacos_consumername>
- <description>Demo project for Spring Bootdescription>
-
-
- <parent>
- <artifactId>springcloud01artifactId>
- <groupId>com.jmhgroupId>
- <version>1.0-SNAPSHOTversion>
- parent>
-
- <dependencies>
-
- dependencies>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-maven-pluginartifactId>
- plugin>
- plugins>
- build>
-
- project>
- server:
- port: 8082
- spring:
- cloud:
- nacos:
- server-addr: 127.0.0.1:8848
- application:
- name: nacos-consumer
-
- package com.jmh.nacos_consumer;
-
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
- import org.springframework.cloud.client.loadbalancer.LoadBalanced;
- import org.springframework.context.annotation.Bean;
- import org.springframework.web.client.RestTemplate;
-
- @SpringBootApplication
- @EnableDiscoveryClient
- public class NacosConsumerApplication {
-
- public static void main(String[] args) {
- SpringApplication.run(NacosConsumerApplication.class, args);
- }
-
-
- }


- package com.jmh.nacos_provider.controller;
-
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
-
- /**
- * @author 蒋明辉
- * @data 2022/11/2 22:13
- */
- @RestController
- public class ProviderController {
-
- @RequestMapping("/run")
- public String run(){
- //生产鸡腿
- return "鸡腿";
- }
- }
- <dependency>
- <groupId>org.springframework.cloudgroupId>
- <artifactId>spring-cloud-loadbalancerartifactId>
- dependency>
ribbon状态:停止更新
替代方案:Spring Cloud Loadbalancer
- package com.jmh.nacos_consumer.controller;
-
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
- import org.springframework.web.client.RestTemplate;
-
- /**
- * @author 蒋明辉
- * @data 2022/11/2 22:14
- */
- @RestController
- public class ConsumerController {
-
- @Autowired
- private RestTemplate restTemplate;
-
- @RequestMapping("/run")
- public String run(){
- //问生产者要鸡腿
- String forObject = restTemplate.
- getForObject("http://nacos-provider/run", String.class);
- return forObject;
- }
-
- }
- package com.jmh.nacos_consumer;
-
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
- import org.springframework.cloud.client.loadbalancer.LoadBalanced;
- import org.springframework.context.annotation.Bean;
- import org.springframework.web.client.RestTemplate;
-
- @SpringBootApplication
- @EnableDiscoveryClient
- public class NacosConsumerApplication {
-
- public static void main(String[] args) {
- SpringApplication.run(NacosConsumerApplication.class, args);
- }
-
- @Bean
- @LoadBalanced
- public RestTemplate restTemplate(){
- return new RestTemplate();
- }
-
- }

