一、前言
1、什么是微服务
微服务(microservice) 一词最早由Martin Fowler与James Lewis于2014年共同提出来的,它是一种新的软件架构风格,就是把一个大型应用程序分割成可以独立部署的小型服务,每个服务之间都是松耦合的,通过RPC或者是Rest协议来进行通信,可以按照业务领域来划分成独立的单元,比如一个电商系统可以分割成会员、订单、商品、积分、优惠券等不同的小型服务,有自动化运维、容错、快速演进的特点,它能够解决传统单体架构系统的痛点,同时也能满足越来越复杂的业务需求。
2、微服务的优点
- 高可用:与传统的单机系统比,它的可用性高。举个例子说明下:单机系统如果挂了,那么整个系统的服务就不能提供服务了,这给使用它的商家带来很大的经济损失。而微服务不同,某个服务挂了,可能并不会影响其它微服务继续对外提供服务。而且新开发的功能点或更改的功能点集中在一个服务上面,即使部署上线出了问题,也不会影响其它服务的业务。
- 松耦合:无论是在开发阶段或部署阶段都是独立的,富有单一职责原则之称,从而保障高可用。
- 模块化:它将一个整体应用程序分解成一系列服务,每个模块都有它相应的职责,提高了维护与扩展性。在分工方面也有一定好处,可由小团队单独开发。
3、什么是SpringCloud
Spring cloud很明显是Spring家族的又一神创产物,它是用于开发微服务应用的一系列组件的集合。Spring cloud 应用程序启动器是基于** Spring Boot** 的 Spring 集成应用程序, 提供与外部系统的集成。Spring cloud 与Spring Boot不是走我行我素之风,而是相辅相成的关系。Spring cloud Task, 一个生命周期短暂的微服务框架, 用于快速构建执行有限数据处理的应用程序。
4、使用SpringCloud的优点
使用 Spring Boot 开发分布式微服务时, 我们面临以下问题:
1、与分布式系统相关的复杂性:这种开销包括网络问题、延迟开销、带宽问题、安全问题。
2、服务发现****:服务发现工具管理群集中的流程和服务如何查找和互相交谈。它涉及一个服务目录, 在该目录中注册服务, 然后能够查找并连接到该目录中的服务。
3、冗余:分布式系统中的冗余问题。
4、负载平衡:负载平衡改善跨多个计算资源的工作负荷, 诸如计算机, 计算机集群, 网络链路, 中央处理单元, 或磁盘驱动器的分布。
5、性能问题:由于各种运营开销导致的性能问题。
6、部署复杂性:Devops 技能的要求。
5、服务注册和发现是什么意思?Spring Cloud 如何实现?
当我们开始一个项目时, 我们通常在属性文件中进行所有的配置。随着越来越多的服务开发和部署, 添加和修改这些属性变得更加复杂。有些服务可能会下降, 而某些位置可能会发生变化。手动更改属性可能会产生问题。 Eureka****服务注册和发现可以在这种情况下提供帮助。由于所有服务都在 Eureka 服务器上注册并通过调用 Eureka 服务器完成查找, 因此无需处理服务地点的任何更改和处理。
二、SpringCloud项目搭建
(一)创建项目
1、选择File -> new -> Project
2、选择Maven,点击Next
3、输入GroupId、ArtifactId,点击Next
4、选择项目存放路径,点击Finish完成项目创建
注意项目名称跟3的ArtifactId带过来有点不一样,可以自己加上“**-**”就一样了
** 图4-1**
**图4-2**
注:这是我之前创建的项目,这里只是帮你过一下。
5、pom.xml引依赖,注意idea右下角可能import下
<?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.ceam</groupId>
<artifactId>test-cloud</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<!-- 依赖版本统一管理维护 -->
<properties>
<ceam.version>1.0-SNAPSHOT</ceam.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-boot.version>2.3.2.RELEASE</spring-boot.version>
<spring-cloud.version>Hoxton.SR7</spring-cloud.version>
<spring-boot-admin.version>2.2.2</spring-boot-admin.version>
</properties>
<!-- 依赖声明 -->
<dependencyManagement>
<dependencies>
<!--cloud -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-dependencies</artifactId>
<version>${spring-boot-admin.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- SpringBoot的依赖配置 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<finalName>${project.build.finalName}</finalName>
</configuration>
</plugin>
</plugins>
</build>
</project>
注意:报红的话,可能是你maven没有配置好,可在控制台执行mvn -v命令确认下
又或者你在idea没有设置好,选择idea左上角的File -> setting来到下面窗口,输入maven搜索
(二)创建注册中心模块
6、创建SpringCloud注册中心Eureka模块
6.1、右击项目test-cloud -> New -> Module,为项目创建模块,模块化
注意:必须删除test-cloud下的src文件夹,再创建模块
6.2、选择Maven,点击Next
** 6.3、输入子模块ArtifactId**
6.4、模块名称,点击Finish完成创建,图6.4-2即注册中心eureka模块
** 图6.4-1**
** 图6.4-2**
7、在ceam-eureka下的pom.xml引入子模块Eureka依赖
<?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">
<parent>
<artifactId>test-cloud</artifactId>
<groupId>com.ceam</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>ceam-eureka</artifactId>
<dependencies>
<!--服务中心 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
8、在子模块下创建SpringCloud注册中心启动类EurekaApp
代码如下:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
/**
* @Description:
* @Author: CeaM
* @Date: 2020/10/2 9:34
*/
@EnableEurekaServer
@SpringBootApplication
public class EurekaApp {
public static void main(String[] args) {
SpringApplication.run(EurekaApp.class, args);
}
}
9、编写SpringCloud注册中心配置文件
9.1、application.yml用于指定系统环境等等
spring:
profiles:
active: dev
9.2、application-dev.yml开发环境,prod生产环境
server:
port: 7001 # 端口号,访问的时候用到
eureka:
instance:
hostname: eureka7001.com #eureka服务端的实例名称
client:
register-with-eureka: false #false表示不向注册中心注册自己。
fetch-registry: false #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
service-url:
#单机
#设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址(单机)。
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
#defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
10、启动注册中心EurekaApp
10.1、点击绿色的选择Run EurekaApp,如下启动成功
10.2、本地访问http://localhost:7001/
如下就是成功了
(三)创建微服务模块
11、创建微服务模块
11.1、创建模块跟上面一样,读者自行回顾,把ceam-service下的src文件夹删除掉
11.2、创建ceam-auth权限微服务,同样可安装上面说的创建即可,然后为其pom.xml引依赖
<?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">
<parent>
<artifactId>ceam-service</artifactId>
<groupId>com.ceam</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>ceam-auth</artifactId>
<dependencies>
<!--配置中心客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<!--eureka 客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- SpringBoot Web容器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
11.3、创建权限微服务启动类AuthApp
代码如下:
package com.ceam.auth;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
/**
* @Description:
* @Author: CeaM
* @Date: 2020/10/2 9:45
*/
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@EnableEurekaClient
public class AuthApp {
public static void main(String[] args) {
SpringApplication.run(AuthApp.class, args);
}
}
11.4、配置微服务,并将其注册到注册中心
1)选择左上角File -> New -> File,创建application.yml文件
2)配置内容如下:
server:
port: 8005 # 端口号
# 日志配置
logging:
level:
com.ruoyi: debug
org.springframework: warn
spring:
application:
name: ceam-auth
# 资源信息
messages:
# 国际化资源文件路径
basename: i18n/messages
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
cloud:
config:
fail-fast: true
name: ${spring.application.name}
profile: ${spring.profiles.active}
discovery:
enabled: true
service-id: ruoyi-config
profiles:
active: dev
main:
allow-bean-definition-overriding: true
feign:
hystrix:
enabled: true
eureka:
client: #客户端注册进eureka服务列表内
service-url:
defaultZone: http://localhost:7001/eureka
#defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
instance:
instance-id: ${spring.application.name}:${server.port}
prefer-ip-address: true #访问路径可以显示IP地址
11.5、启动AuthApp权限微服务
如下面这样微服务就是注册到注册中心了
如果对你有帮助来个三联吧
版权归原作者 卡布奇诺-海晨 所有, 如有侵权,请联系我们删除。