SpringCloud-Netflix

Spring Cloud 是一个相对比较新的微服务框架,2016 才推出 1.0 的 Release 版本. 但是其更新特别快,几乎每 1-2 个月就有一次更新,虽然 Spring Cloud 时间最短, 但是相比 Dubbo 等 RPC 框架, Spring Cloud 提供的全套的分布式系统解决方案。

Spring Cloud 为开发者提供了在分布式系统(配置管理,服务发现,熔断,路由,微代理,控制总线,一次性 Token,全局琐,Leader 选举,分布式 Session,集群状态)中快速构建的工具,使用 Spring Cloud 的开发者可以快速的启动服务或构建应用、同时能够快速和云平台资源进行对接。

配置统一依赖管理

创建方法,直接创建文件夹然后写pom.xml

首先创建一个依赖模块,直接创建文件夹hello-spring-cloud作为总的工程目录,然后再在hello-spring-cloud下创建hello-spring-cloud-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 http://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.0.3.RELEASE</version>
</parent> <groupId>com.outlook.liufei32</groupId>
<artifactId>hello-spring-cloud-dependencies</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging> <name>hello-spring-cloud-dependencies</name>
<url>https://github.com/Swagger-Ranger</url>
<inceptionYear>2018-Now</inceptionYear> <properties>
<!-- Environment Settings -->
<java.version>1.11</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <!-- Spring Settings -->
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
</properties> <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> <build>
<plugins>
<!-- Compiler 插件, 设定 JDK 版本 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<showWarnings>true</showWarnings>
</configuration>
</plugin> <!-- 打包 jar 文件时,配置 manifest 文件,加入 lib 包的 jar 依赖 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<addMavenDescriptor>false</addMavenDescriptor>
</archive>
</configuration>
<executions>
<execution>
<configuration>
<archive>
<manifest>
<!-- Add directory entries -->
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
<addClasspath>true</addClasspath>
</manifest>
</archive>
</configuration>
</execution>
</executions>
</plugin> <!-- resource -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
</plugin> <!-- install -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
</plugin> <!-- clean -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
</plugin> <!-- ant -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
</plugin> <!-- dependency -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
</plugin>
</plugins> <pluginManagement>
<plugins>
<!-- Java Document Generate -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin> <!-- YUI Compressor (CSS/JS压缩) -->
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>yuicompressor-maven-plugin</artifactId>
<version>1.5.1</version>
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>compress</goal>
</goals>
</execution>
</executions>
<configuration>
<encoding>UTF-8</encoding>
<jswarn>false</jswarn>
<nosuffix>true</nosuffix>
<linebreakpos>30000</linebreakpos>
<force>true</force>
<includes>
<include>**/*.js</include>
<include>**/*.css</include>
</includes>
<excludes>
<exclude>**/*.min.js</exclude>
<exclude>**/*.min.css</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</pluginManagement> <!-- 资源文件配置 -->
<resources>
<resource>
<directory>src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</build> <repositories>
<repository>
<id>aliyun-repos</id>
<name>Aliyun Repository</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository> <repository>
<id>sonatype-repos</id>
<name>Sonatype Repository</name>
<url>https://oss.sonatype.org/content/groups/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>sonatype-repos-s</id>
<name>Sonatype Repository</name>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository> <repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories> <pluginRepositories>
<pluginRepository>
<id>aliyun-repos</id>
<name>Aliyun Repository</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</project>

创建服务注册中心

1.在总目录hello-spring-cloud下新建hello-spring-cloud-eureka目录,eureka就是服务注册与发现模块

配置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">
<modelVersion>4.0.0</modelVersion> <parent>
<groupId>com.outlook.liufei32</groupId>
<artifactId>hello-spring-cloud-dependencies</artifactId>
<version>1.0.0-SNAPSHOT</version>
<relativePath>../hello-spring-cloud-dependencies/pom.xml</relativePath>
</parent> <artifactId>hello-spring-cloud-eureka</artifactId>
<packaging>jar</packaging> <name>hello-spring-cloud-eureka</name>
<url>https://github.com/Swagger-Ranger</url>
<inceptionYear>2018-Now</inceptionYear> <dependencies>
<!-- Spring Boot Begin -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Spring Boot End --> <!-- Spring Cloud Begin -->
<dependency>
<!--<groupId>org.springframework.cloud</groupId>-->
<!--<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>-->
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
<version>1.4.0.RELEASE</version>
</dependency>
<!-- Spring Cloud End -->
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--指定启动的入口类,因为微服务是jar包运行,jar的运行方式:java -jar 入口类名-->
<mainClass>com.outlook.liufei32.hello.spring.cloud.eureka.EurekaApplication</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>

完善maven结构,并新建出启动目录和资源目录

创建application入口,即jar的启动类EurekaApplication注意命令格式为模块名+application;和配置文件application.yml配置服务注册

application.yml

spring:
application:
name: hello-spring-cloud-eureka server:
port: 8761 eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

EurekaApplication.java

package com.outlook.liufei32.hello.spring.cloud.eureka;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; /*******************************************************************************
* @Copyright (C), 2018-2019,github:Swagger-Ranger
* @FileName: EurekaApplication
* @Author: liufei32@outlook.com
* @Date: 2019/4/2 11:01
* @Description: eureka入口类
* @Aha-eureka:
*******************************************************************************/
@SpringBootApplication
@EnableEurekaServer//开启eureka服务端,所有的服务提供者都要用这个注解注册到eureka服务端,而服务消费者则是@EnableDiscoveryClient注解
public class EurekaApplication { public static void main( String[] args ) {
SpringApplication.run(EurekaApplication.class);
}
}

启动多个服务提供者提供负载均衡

1.在IDE配置中设置多个实例并行

2.再修改配置里的端口



3.启动服务的启动类,就能看到多个实例并行

注意事项

注意maven依赖,常常版本不对应会导致服务注册无法启动,包括JDK的版本,我使用Java11无法启动,但使用Java8则正常

启动成功则在浏览器中访问配置的注册中心IP+端口就能访问

创建服务提供者

创建服务提供者,直接在总包下新建hello-spring-cloud-service-服务模块名,然后相同的步骤,配置pom.xml导入maven依赖,配置启动类Application,配置配置文件application.yml

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">
<modelVersion>4.0.0</modelVersion> <parent>
<groupId>com.outlook.liufei32</groupId>
<artifactId>hello-spring-cloud-dependencies</artifactId>
<version>1.0.0-SNAPSHOT</version>
<relativePath>../hello-spring-cloud-dependencies/pom.xml</relativePath>
</parent> <artifactId>hello-spring-cloud-service-admin</artifactId>
<packaging>jar</packaging> <name>hello-spring-cloud-service-admin</name>
<url>https://github.com/Swagger-Ranger</url>
<inceptionYear>2019-Now</inceptionYear> <dependencies>
<!-- Spring Boot Begin -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Spring Boot End --> <!-- Spring Cloud Begin -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<!-- Spring Cloud End -->
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.outlook.liufei32.hello.spring.cloud.service.admin.ServiceAdminApplication</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>

application.yml

spring:
application:
name: hello-spring-cloud-service-admin server:
port: 8762 eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/ #注册到注册端

ServiceAdminApplication.java

package com.outlook.liufei32.hello.spring.cloud.service.admin;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient; /*******************************************************************************
* @Copyright (C), 2018-2019,github:Swagger-Ranger
* @FileName: ServiceAdminApplication
* @Author: liufei32@outlook.com
* @Date: 2019/4/2 15:25
* @Description: admin服务的入口类
* @Aha-eureka:
*******************************************************************************/
@SpringBootApplication
@EnableEurekaClient
public class ServiceAdminApplication {
public static void main( String[] args ) {
SpringApplication.run(ServiceAdminApplication.class);
}
}

完成后可以新建一个controller测试返回,然后在浏览器中测试http://localhost:8762/hi?message=wagger-ranger

注册成功后在服务端的web页面上就能看到注册的服务,

当 Client 向 Server 注册时,它会提供一些元数据,例如主机和端口,URL,主页等。Eureka Server 从每个 Client 实例接收心跳消息。 如果心跳超时,则通常将该实例从注册 Server 中删除。

创建服务消费者

springcloud-Netflix创建服务消费者

最新文章

  1. eclipse SE增加Web开发插件;安装配置Apache
  2. 再看 AspriseOCR - OCR应用开发 -20151124
  3. 关于Yii2中CSS,JS文件的引入心得
  4. Java——文件选择框:JFileChooser
  5. 再一次见证mssql中in 与exist的区别
  6. 数学(错排):BZOJ 4517: [Sdoi2016]排列计数
  7. “=”号和“:”的区别,Html.Raw()的使用
  8. Storm并发度和Grouping方式
  9. session锁问题
  10. MVC客户端验证
  11. BZOJ 1758: [Wc2010]重建计划 [暂时放弃]
  12. 共享数据的包含const
  13. 无需密码通过scp命令+key的方式实现文件传输
  14. 多机部署redis5.0集群环境
  15. 如何把你的.net程序打包上传到nuget
  16. 19.2 MEMORY CONTROLLER
  17. webpack入门(五)webpack CLI
  18. 利用Burp Suite攻击Web应用
  19. 数据库事务的属性-ACID和隔离级别
  20. Multi-Cloud &amp; Kubernetes: Cloud Academy November 2018 Data Report

热门文章

  1. 浏览器端JS导出EXCEL
  2. LA-3942(trie树+dp)
  3. 【C】貌似不友好的scanf()
  4. Java使用Jacob转换Word为HTML
  5. ubuntu解决挂起后不能唤醒
  6. 生产环境下JAVA进程高CPU占用故障排查---temp
  7. c语言中#和##的用法
  8. java泛型基础、子类泛型不能转换成父类泛型--未完待续
  9. PHP实用小程序(六)
  10. UVa 820 Internet Bandwidth (裸板网络流)