全面的spring-cloud知识

这篇博客全面探讨了Spring Cloud的相关知识,包括微服务技术图谱、学习路线、单体与微服务架构的区别、服务拆分与远程调用。详细介绍了Eureka和Nacos两个注册中心的配置和使用,包括服务提供者、服务消费者、服务注册与发现、负载均衡等核心概念,并提及了集群搭建的方法。
摘要由CSDN通过智能技术生成

全面的spring-cloud知识

全面的微服务技术图

在这里插入图片描述

学习路线图

在这里插入图片描述

单体架构与微服务架构

单体架构
在这里插入图片描述

分布式架构
在这里插入图片描述
分布式架构需要解决很多问题
在这里插入图片描述
微服务的特点
在这里插入图片描述
对微服务的认识
在这里插入图片描述

微服务技术对比

在这里插入图片描述
企业需求
在这里插入图片描述

了解spring cloud

在这里插入图片描述

spring cloud与spring boot的兼容版本

在这里插入图片描述

服务拆分与远程调用

服务拆分注意事项
在这里插入图片描述

Eureka

服务提供者

在这里插入图片描述

服务消费者

在这里插入图片描述
注意:
在这里插入图片描述
服务调用存在的问题
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

服务注册

配置eureka服务

操作步骤
1.导入依赖
注意:一定要在parent节点最后加上 ,不然子项目无法使用父项目的依赖。

<?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">
    <modelVersion>4.0.0</modelVersion>
    <packaging>pom</packaging>
    <modules>
        <module>eureka-server-7001</module>
    </modules>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
<!--        <relativePath/>设定一个空值默认值为../pom.xml 表示将始终从父级仓库中获取,不从本地路径获取
-->
        <relativePath></relativePath>
    </parent>
    <groupId>org.example</groupId>
    <artifactId>spring-cloud-2021</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencyManagement>

        <dependencies>
            <!--        引入spring-cloud-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

        </dependencies>
    </dependencyManagement>

</project>

2.书写启动类
主启动类一定要加 @EnableEurekaServer注解(开启eureka服务)

package com.hjx;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@EnableEurekaServer // 开启eureka服务  
@SpringBootApplication
public class EurekaServerApplication {
	public static void main(String[] args) {
		SpringApplication.run(EurekaServerApplication.class,args);
	}
}

3.配置文件
注意:service-url下的
下面这两个一定要设置为false,否者eureka启动时会注册自己(因为自己还没有启动,所以会导致连接失败,导致报连接错误!!)

fetch-registry: false    #获取注册信息
register-with-eureka: false   # 注册到eureka服务中
server:
  port: 7001
spring:
  application:
    name: eureka-server-7001    # eureka的服务名称
eureka:
  instance:
    hostname: 127.0.0.1
  client:
    service-url:  # 注意:因为eureka自己也是一个服务,所以它会将它自己也注册
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka  #eureka的地址的信息
    fetch-registry: false
    register-with-eureka: false

4.启动,测试
注意:
eureka控制台访问地址:http://localhost:7001(不要使用配置文件中配置的全地址访问,地址只要到端口就好了!!)

配置eureka服务提供者provider

1.导入依赖
注意:一定要导入spring-boot-starter-web依赖,否者该服务启动后会导致服务停止(即服务注册失败,控制台无报错)
在这里插入图片描述

<dependencies>
        <!--        eureka-client-->
<!--        <dependency>-->
<!--            <groupId>org.springframework.cloud</groupId>-->
<!--            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>-->
<!--        </dependency>-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>1.4.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

    </dependencies>

2.书写启动类
加上@EnableEurekaClient 注解

/**
 * @EnableDiscoveryClient和@EnableEurekaClient共同点就是:都是能够让注册中心能够发现,扫描到改服务。
 * 不同点:@EnableEurekaClient只适用于Eureka作为注册中心,@EnableDiscoveryClient 可以是其他注册中心。
 */
@EnableEurekaClient
@SpringBootApplication
public class EurekaProviderApplication {
	public static void main(String[] args) {
		SpringApplication.run(EurekaProviderApplication.class,args);
	}
}

3.配置文件
注意:service-url下的defaultZone没有提示(不要误以为依赖导错了!!)

server:
  port: 7002
spring:
  application:
    name: provider-7002 #服务名称
eureka:
  client:
    register-with-eureka: true
    service-url:
      defaultZone: http://127.0.0.1:7001/eureka  # 要注册到的地址

4.启动主启动类

5.进入eureka服务控制台,如下所示
在这里插入图片描述

服务发现

1.导入依赖

<dependencies>
        <!--        eureka-client-->
<!--        <dependency>-->
<!--            <groupId>org.springframework.cloud</groupId>-->
<!--            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>-->
<!--        </dependency>-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>1.4.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

    </dependencies>

2.主启动类

**package com.hjx;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

/**
 * @EnableDiscoveryClient和@EnableEurekaClient共同点就是:都是能够让注册中心能够发现,扫描到改服务。
 * 不同点:@EnableEurekaClient只适用于Eureka作为注册中心,@EnableDiscoveryClient 可以是其他注册中心。
 */
@EnableEurekaClient
@SpringBootApplication
public class EurekaClientApplication {
	public static void main(String[] args) {
		SpringApplication.run(EurekaClientApplication.class,args);
	}
}
**

3.编写配置

server:
  port: 7003
spring:
  application:
    name: provider-7003 #服务名称
eureka:
  client:
    register-with-eureka: false # 不注册到eureka注册中心
    fetch-registry: true  # 获取注册信息(因为是client,就是为了获取服务的,所以为true)
    service-url:
      defaultZone: http://127.0.0.1:7001/eureka  # 要注册到的地址

4.配置RestTemplate
将RestTemplate注入到spring 容器

@Configuration
public class MyConfig {
	// 负载均衡
	@LoadBalanced
	@Bean
	public RestTemplate Register(){
		return new RestTemplate();
	}
}

5.编写controller获取服务

@RestController
public class TestController {
	@Autowired
	private RestTemplate template;

	/**
	 * getForObject(String url, Class<T> responseType, Object... uriVariables)
	 */
	@GetMapping("/get")
	public String get(){
		// 注意:这里的ip用服务名替代即可   getService:为服务提供方中controller中你的映射路径
		
		String url="http://PROVIDER-7002/getService";
		String msg=template.getForObject(url,String.class,"" );
		return msg;
	}
}

负载均衡配置

当多个服务的服务名相同时,客户端去请求该服务时,通过负载均衡策略就可以以一种策略(轮询)访问服务。(这里的@LoadBalanced注解即实现该负载均衡),具体代码在上面,这里只是对负载均衡一种说明而已。

注意:如果时中途修改一个服务的名字为一样时,则这时需要重启客户端module,否者没有轮询的效果!!

负载均衡的原理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Ribbon策略(饥饿加载)

在这里插入图片描述
懒加载

在这里插入图片描述
饥饿加载
配置在上面
在这里插入图片描述
在这里插入图片描述

Nacos注册中心

先下载Nacos-server,(我这里是1.xx版本的),进入bin目录启动nacos服务

1.导入依赖
父工程依赖

<dependencyManagement>

        <dependencies>
            <!--        引入spring-cloud-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.1.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>

    </dependencyManagement>

子工程依赖

<!--    nacos依赖-->
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

2.编写主启动类

@SpringBootApplication
public class NacosServerApplication {

	public static void main(String[] args) {
		SpringApplication.run(NacosServerApplication.class,args);
	}
}

3.配置文件编写
注意:一定要建立bootstramp.yml文件(名字必须是bootstramp,因为其优先级比application开头的配置文件都要高!!)

spring:
  application:
    name: nacos-server # 服务名称
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848  #nacos的服务地址

4.测试
在这里插入图片描述

集群搭建

依赖和上面nacos服务的配置一样,就是配置文件有些变化
bootstrap.yml 的配置内容如下:

server:
  port: ${server.port:8080}   # ${}:表示动态接收命令行参数
spring:
  application:
    name: ${server.name:nacos-server} #服务名
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #nacos服务的地址
        cluster-name: ${cluster.name:ShangHai} #服务集群名称

动态传入参数方法

-Dserver.port=8081 -Dserver.name=nacos-server1 -Dcluster.name=ShangHai

复制工程配置
在这里插入图片描述
即可得到一个新的工程(和nacos服务的一模一样,就是服务的启动端口不一样而已)

测试
进入nacos控制台,点进服务列表(进入某一个服务,点击详情查看即可看到集群提示)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值