SpringCloud 微服务

https://baijiahao.baidu.com/s?id=1737026772515641939&wfr=spider&for=pc

单体应用

Model1 : jsp+java

Model2 : (MVC模式):Model View Controller (web service dao)

垂直应用

RPC分布式应用

SOA流动计算架构 Dobbo

资源调度 负载均衡 动态服务创建 ... 服务治理

微服务 springcloud

微,单一职责

alt

每一个功能都成为一个项目

优点:
测试容易
可伸缩性强
可靠性强
跨语言 nice
协同开发 nice
方便系统迭代
缺点:
运维成本高,部署项目多
接口兼容版本问题
分布式系统的复杂性
分布式事务

但是Spring全家桶对这些都有解决方案

SOA 面向服务架构 一种软件设计原则,在SOA中,所有组件都是独立自主的,并能为其他组件提供服务 ,当SOA继续拆分,即形成一个个微服务

一句话总结:微服务是SOA发展出来的产物,它是一种比较现代化的细粒度的SOA实现方式

Dubbo与SpringCould的区别

alt

二者都不错,选择SpringCould有Spring全家桶的支持,更易上手

无状态服务

alt

举例

alt

Restful通信风格

alt

基千无状态通信原则, 在这里我们直接推荐一个实践优选的Restful 通信风格, 因为他有很多好处:

无状态协议HTTP , 具备先天优势, 扩展能力很强.例如需要安全加密时, 有现成的成热方案HTTPS可用
JSON报文序列化, 轻量简单, 人与机器均可读, 学习成本低, 搜索引擎友好
语言无关, 各大热门语言都提供成熟的Restful API 框架,相对其他的一些RPC框架生态更完善

什么是SpringCould

alt

SpringCould子项目

Spring Could Netfix 第一代

alt

Spring Could Alibaba 第二代

alt

各种组件的分配与角色

alt

常用组件

alt

总结:

alt

版本说明

alt

alt

服务注册中心 Eureka

什么是注册中心 ?

记录服务和服务地址的映射关系,当需要使用时,从注册中心寻找服务地址进行调用

alt

常见的注册中心:

Netfilx Eureka

Alibaba Nacos

HashiCorp Zokeeper

CoreOS Etcd

CNCF CoreDNS

为什么要服务中心 ?

服务管理

Netfilx Eureka

三种角色:Eureka Server 、Service Consumer 、Service Provider

alt

从代码里看 Eureka

新建一个空maven项目作为父目录

<?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>

    <groupId>com.rookie</groupId>
    <artifactId>eureka-demo</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>eureka-server</module>
    </modules>

    <parent>
        <artifactId>spring-boot-starter-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>2.6.7</version>
    </parent>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>2021.0.3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

新建一个模块

<?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>

    <groupId>com.rookie</groupId>
    <artifactId>eureka-server</artifactId>
    <version>1.0-SNAPSHOT</version>

    <name>eureka-server</name>
    <!-- FIXME change it to the project's website -->
    <url>http://www.example.com</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>
    <parent>
        <groupId>com.rookie</groupId>
        <artifactId>eureka-demo</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-eureka-server -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            <version>2.2.10.RELEASE</version>
        </dependency>
    </dependencies>

    <build>
    </build>
</project>

server:
  port: 8761 # 端口

spring:
  application:
    name: eureka-server # 应用名称

# 配置 Eureka Server 注册中心
eureka:
  instance:
    hostname: localhost #主机名,不配置的时候将根据操作系统的主机名来获取
  client:
    register-with-eureka: false #是否将自己注册到注册中心 默认true   单节点关闭,集群开启
    fetch-registry: false #是否从注册中心获取服务注册信息  默认true   单节点关闭,集群开启
    service-url:  # 注册中心对外暴露的注册地址
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
package com.rookie;

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

/**
 * @ClassName : EurekaServerApplication
 * @Description : Springboot启动类
 * @Author : zkyqs
 * @Created at 2022/6/6 14:55
 */
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class);
    }
}



访问loaclhost:8761

alt