文章目录
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、创建项目
因为对于个人来说只有一台电脑,无法将多个服务部署到多台服务器(有条件的可以购买服务器,腾讯云,阿里云等),所以创建父子级的项目模拟微服务和集群。
1.创建父级项目(依图所示)
一直next,知道如下图,点击finish,完成
2.配置父级项目(修改一下结构,配置文件)
1.修改MAVEN配置
MAVEN
修改为自己的Maven配置
2.修改POM配置
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>spring-cloud-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!--
注意 最后打包 最外层的pom 需要更改为 pom而不是jar
<packaging>jar</packaging>
-->
<packaging>pom</packaging>
<name>spring_cloud_study</name>
<description>Spring Cloud project for Spring Boot</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring.boot.version>2.1.4.RELEASE</spring.boot.version>
<spring.cloud.version>Greenwich.SR1</spring.cloud.version>
<maven.compiler.plugin.version>3.6.1</maven.compiler.plugin.version>
<java.version>1.8</java.version>
</properties>
<!-- spring cloud -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!--springboot lombok devtools configuration-processor -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.修改目录结构(没错就是删掉src):
##创建子模块
创建方式类似父项目的创建
1.创建子项目
父项目上右建
余下步骤和父项目创建方式一样
一直next,最后finish,目录结构你如下
1.修改子项目pom(对比一下可以发现修改的点,parent,dependencies)
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example</groupId>
<artifactId>spring-cloud-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>spring-cloud-eureka</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-cloud-eureka</name>
<description>Demo project for Spring Boot</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<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>
</plugin>
</plugins>
</build>
</project>
2.上一步是相当于子引用了父级的pom,这一步相当于告诉父他的子项目有哪些,加module到父级的pom中
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>spring-cloud-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>spring-cloud-demo</name>
<description>Demo project for Spring Boot</description>
<modules>
<module>spring-cloud-eureka</module>
</modules>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring.boot.version>2.1.4.RELEASE</spring.boot.version>
<spring.cloud.version>Greenwich.SR1</spring.cloud.version>
<maven.compiler.plugin.version>3.6.1</maven.compiler.plugin.version>
<java.version>1.8</java.version>
</properties>
<!-- spring cloud -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!--springboot -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
现在父子项目就创建好了,并且与spring-cloud相关的jar包也已经引入。(关键处)
<!-- spring cloud -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
二、搭建Eureka单例服务
1.在application.properties下配置(或application.yml)
#声明本服务在注册中心展示的名字、也是在网关访问时定位服务的名字
spring.application.name=spring-cloud-demo-eureka
#在windows下的hosts文件中增加了 127.0.0.1 spring-cloud
eureka.instance.hostname=spring-cloud
#项目启动端口
server.port=8000
#是否将自己作为服务注册到注册中心,默认为true,false不能将自己注册到自己,
#如果有多个服务注册中心的微服务的话,可以将这个设置为true,表示可以将注册中心1注册到注册中心2中
eureka.client.register-with-eureka=false
#表示是否从eureka注册中心中获取注册信息,默认为true
eureka.client.fetch-registry=false
#注册中心的交互地址,设置多个地址可以用,分隔 查询服务和注册服务都需要依赖这个地址
#关于设置注册中心这么关键的服务,如果是单点话,遇到故障就是毁灭性的。
#在一个分布式系统中,服务注册中心是最重要的基础部分,理应随时处于可以提供服务的状态。为了维持其可用性,使用集群是很好的解决方案
#所以 在一个分布式系统中,设置最少两个服务注册中心是最基本的
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
2.启动类上加注解(@EnableEurekaServer)
package com.example.springcloudeureka;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer
@SpringBootApplication
public class SpringCloudEurekaApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudEurekaApplication.class, args);
}
}
因为没加junit的jar需删除test下的测试启动文件
三、启动访问
1. IDEA启动
2. 浏览器访问(如下图所示即为成功)
http://localhost:8000/
总结
1、搭建父子级结构项目
2、导入springcloud,eureka相关的jar
3、配置application.properties
4、启动类上添加注解
四、搭建Eureka集群(其实差不多)
单个的eureka服务可能会挂掉,这样的话会导致其他的服务访问不了,因此提供多个服务,防止这种问题。eureka服务一般是不注册自己的,多个的话,除了自己外,会向其他eureka服务注册,即你中有我,我中有你
创建
#如果有多个服务注册中心的微服务的话,可以将这个设置为true,表示可以将注册中心1注册到注册中心2中
eureka.client.register-with-eureka=true
#表示是否从eureka注册中心中获取注册信息,默认为true
eureka.client.fetch-registry=true
application.properties
运行时需切换spring-cloud-eureka3为对应的properties文件名(application去掉),因为各个文件的端口不同(否则端口被占用,无法启动项目)
spring.profiles.active=application-spring-cloud-eureka3
application-spring-cloud-eureka2.properties
#声明本服务在注册中心展示的名字、也是在网关访问时定位服务的名字
spring.application.name=spring-cloud-eureka2
#在windows下的hosts文件中增加了 127.0.0.1 spring-cloud-eureka2
# windows host文件下配置 127.0.0.1 eureka7012.king.com
eureka.instance.hostname=eureka7012.king.com
server.port=7012
#是否将自己作为服务注册到注册中心,默认为true,false不能将自己注册到自己,
#如果有多个服务注册中心的微服务的话,可以将这个设置为true,表示可以将注册中心1注册到注册中心2中
eureka.client.register-with-eureka=true
#表示是否从eureka注册中心中获取注册信息,默认为true
eureka.client.fetch-registry=true
#注册中心的交互地址,设置多个地址可以用,分隔 查询服务和注册服务都需要依赖这个地址
#关于设置注册中心这么关键的服务,如果是单点话,遇到故障就是毁灭性的。
#在一个分布式系统中,服务注册中心是最重要的基础部分,理应随时处于可以提供服务的状态。为了维持其可用性,使用集群是很好的解决方案
#所以 在一个分布式系统中,设置最少两个服务注册中心是最基本的
eureka.client.serviceUrl.defaultZone=http://eureka7011.king.com:7011/eureka/,http://eureka7013.king.com:7013/eureka/
#http://eureka2002.hmc.com:2002/eureka/,http://eureka2003.hmc.com:2003/eureka/ # 集群
#单机defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #设置与Eureka注册中心交互的地址,查询服务和注册服务用到
IDEA 实现单个项目启动多个实例(不需要创建多个相同的项目挨个启动)
1.Edit Configurations
选择启动类,勾选Allow parallel run (允许并行运行)
运行结果
服务一
服务二
服务三