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
微,单一职责
每一个功能都成为一个项目
优点:
测试容易
可伸缩性强
可靠性强
跨语言 nice
协同开发 nice
方便系统迭代
缺点:
运维成本高,部署项目多
接口兼容版本问题
分布式系统的复杂性
分布式事务
但是Spring全家桶对这些都有解决方案
SOA 面向服务架构 一种软件设计原则,在SOA中,所有组件都是独立自主的,并能为其他组件提供服务 ,当SOA继续拆分,即形成一个个微服务
一句话总结:微服务是SOA发展出来的产物,它是一种比较现代化的细粒度的SOA实现方式
Dubbo与SpringCould的区别
二者都不错,选择SpringCould有Spring全家桶的支持,更易上手
无状态服务
举例
Restful通信风格
基千无状态通信原则, 在这里我们直接推荐一个实践优选的Restful 通信风格, 因为他有很多好处:
无状态协议HTTP , 具备先天优势, 扩展能力很强.例如需要安全加密时, 有现成的成热方案HTTPS可用
JSON报文序列化, 轻量简单, 人与机器均可读, 学习成本低, 搜索引擎友好
语言无关, 各大热门语言都提供成熟的Restful API 框架,相对其他的一些RPC框架生态更完善
什么是SpringCould
SpringCould子项目
Spring Could Netfix 第一代
Spring Could Alibaba 第二代
各种组件的分配与角色
常用组件
总结:
版本说明
服务注册中心 Eureka
什么是注册中心 ?
记录服务和服务地址的映射关系,当需要使用时,从注册中心寻找服务地址进行调用
常见的注册中心:
Netfilx Eureka
Alibaba Nacos
HashiCorp Zokeeper
CoreOS Etcd
CNCF CoreDNS
为什么要服务中心 ?
服务管理
Netfilx Eureka
三种角色:Eureka Server 、Service Consumer 、Service Provider
从代码里看 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