随着近几年微服务架构理念的流行,越来越多微服务架构也进入人们的视野,目前大部分公司用的比较多的是阿里的rcp框架Dubbo,Spring-Cloud等。下面本人简单的给分享一下关于Spring-Cloud 的基本技术心得:
Spring-Clou可以说成对现有Spring-boot 封装和抽象 一下是关于Spring-Could Api文档地址
中文文档:https://springcloud.cc/
官方文档:http://projects.spring.io/spring-cloud/#quick-start
那么Spring Boot和和Spring Cloud 功能区别是什么呢?
1.Spring Boot 它内嵌Web服务器(tomcat/jetty)的可执行程序的框架。你开发的web应用不需要作为war包部署到web服务器中[例如:把war包扔到tomcat app下],Spring Boot 直接作为一个可启动程序,直接把Web启动起来加载起来。
2.Spring Cloud是一套微服务开发和治理框架,来自Netflex的OSS,包含了微服务运行的功能,可以通过Spring-boot 项目集成很多功能比如 RabbitMQ,ES,Ribbon,负载均衡,限流等。
Spring Cloud 基本项目搭建步骤
Spring Cloud 服务注册发现实现原理 如图
A、B、C、三个服务将项目注册到注册中心去,注册中心会不定时的检测每个项目的是否正常运行或者被注册。
第一步:我们先创建注册中心
首先先创建一个Spring-Boot 应用【本项目采用esclpilse+maven开发】
先创建一个Maven-Project root父类便于版本控制【当然也可以直接创建】
编写POM文件添加Spring-Cloud基本应用包
<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.0modelVersion>
<groupId>com.demogroupId>
<artifactId>spring-rootartifactId>
<version>0.0.1-SNAPSHOTversion>
<packaging>pompackaging>
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>1.4.1.RELEASEversion>
parent>
<modules>
<module>spring-demo-registermodule>
modules>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-dependenciesartifactId>
<version>Dalston.SR1version>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
<build>
<finalName>spring-rootfinalName>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
<executions>
<execution>
<goals>
<goal>repackagegoal>
goals>
execution>
executions>
plugin>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-compiler-pluginartifactId>
<configuration>
<encoding>utf-8encoding>
<source>1.8source>
<target>1.8target>
configuration>
plugin>
plugins>
build>
project>
创建注册中心项目spring-demo-register 并且通过maven指定父类目录
创建一个maven-module
编写spring-demo-register 文件添加依赖包文件POM.xml
<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.0modelVersion>
<parent>
<groupId>com.demogroupId>
<artifactId>spring-rootartifactId>
<version>0.0.1-SNAPSHOTversion>
parent>
<artifactId>spring-demo-registerartifactId>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-eureka-serverartifactId>
dependency>
dependencies>
project>
添加注册中心启动类以及配置Spring-Boot 配置.properties/.yaml文件
Register.class
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication //spring-boot 启动注解
@EnableEurekaServer // spring-cloud 服务注解
public class Register{
public static void main(String [] args) {
new SpringApplicationBuilder(Register.class).web(true).run(args);
}
}
application.yaml
server:
port: 1234
eureka:
instance:
hostname: localhost
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
如果出现这个页面的话 就表示注册中心已经完成了
第二步 创建服务注册到注册中心
创建一个maven module 项目
配置spring-demo-A 项目 pom文件
<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.0modelVersion>
<parent>
<groupId>com.demogroupId>
<artifactId>spring-rootartifactId>
<version>0.0.1-SNAPSHOTversion>
parent>
<artifactId>spring-demo-AartifactId>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-eurekaartifactId>
dependency>
dependencies>
project>
添加注册启动类以及配置Spring-Boot 配置.properties/.yaml文件
PortalApplication.java
package com;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient //Eureka Client
public class PortalApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(PortalApplication.class).web(true).run(args);
}
}
Application.yaml
server:
port: 3000
spring:
application:
name: spring-cloud-portal
#注册中心指向start
eureka:
instance:
instance-id: spring-cloud-portal
appname: ${spring.application.name}
client:
service-url:
defaultZone: http://127.0.0.1:1234/eureka/
#注册中心指向end
PS:需要注意的defaultZone 我是在本地测试因此需要启动先启动之前的注册中心保证注册中心是可用的。
启动run-as->PortalApplication.java
大家会发现 有一个服务被注册到改改注册中心上。但是这会有一个问就是所有的其他人的服务也可以注册到我们这里 这样怎么如何解决这问题呢?就在注册中心配置一个密码就可以实现此功能。
首先需要引用 Spring-Could的官方包。
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-securityartifactId>
dependency>
application.yml 文件配置
server:
port: 1234
security:
basic:
enable: true
user:
name: admin
password: 1q2w3e4r!
eureka:
instance:
hostname: localhost
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://${security.user.name}:${security.user.password}@${eureka.instance.hostname}:${server.port}/eureka/
其他服务如果需要注册的时候需要怎么办呢? 其实很简单加入指向就行
defaultZone: http://admin:[email protected]:1234/eureka/
以上就是Spring-Could基础的注册与发现功能。
如有不足的地方请大家指正, 后续本人会陆续更新信息的Spring-Could相关技术信息。