微服务架构Spring细谈 (一)


SpringCloud组件和概念介绍


一:什么是微服务(Microservice)


 微服务英文名称Microservice,Microservice架构模式就是将整个Web应用组织为一系列小的Web服务。这些小的Web服务可以独立地编译及部署,并通过各自暴露的API接口相互通讯。它们彼此相互协作,作为一个整体为用户提供功能,却可以独立地进行扩。


  微服务架构需要的功能或使用场景

        1:我们把整个系统根据业务拆分成几个子系统。

 2:每个子系统可以部署多个应用,多个应用之间使用负载均衡。

 3:需要一个服务注册中心,所有的服务都在注册中心注册,负载均衡也是通过在注册中心注册的服务来使用一定策略来实现。

 4:所有的客户端都通过同一个网关地址访问后台的服务,通过路由配置,网关来判断一个URL请求由哪个服务处理。请求转发到服务上的时候也使用负载均衡。

 5:服务之间有时候也需要相互访问。例如有一个用户模块,其他服务在处理一些业务的时候,要获取用户服务的用户数据。

 6:需要一个断路器,及时处理服务调用时的超时和错误,防止由于其中一个服务的问题而导致整体系统的瘫痪。

 7:还需要一个监控功能,监控每个服务调用花费的时间等。

  

  目前主流的微服务框架:Dubbo、 SpringCloud、thrift、Hessian等,目前国内的中小企业用的大多数都是Dubbo,SpringCloud估计很少,也许有些开发同学都没听说过。

  

二:SpringCloud项目简介


   springCloud是基于SpringBoot的一整套实现微服务的框架。他提供了微服务开发所需的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等组件。最重要的是,

  跟spring boot框架一起使用的话,会让你开发微服务架构的云服务非常好的方便。

  

  SpringBoot旨在简化创建产品级的 Spring 应用和服务,简化了配置文件,使用嵌入式web服务器,含有诸多开箱即用微服务功能

  

  相关组件架构图

  

  spring cloud子项目包括:


  Spring Cloud Config:配置管理开发工具包,可以让你把配置放到远程服务器,目前支持本地存储、Git以及Subversion。



  Spring Cloud Bus:事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与Spring Cloud Config联合实现热部署。


  Spring Cloud Netflix:针对多种Netflix组件提供的开发工具包,其中包括Eureka、Hystrix、Zuul、Archaius等。


  Netflix Eureka:云端负载均衡,一个基于 REST 的服务,用于定位服务,以实现云端的负载均衡和中间层服务器的故障转移。


  Netflix Hystrix:容错管理工具,旨在通过控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。


  Netflix Zuul:边缘服务工具,是提供动态路由,监控,弹性,安全等的边缘服务。


  Netflix Archaius:配置管理API,包含一系列配置管理API,提供动态类型化属性、线程安全配置操作、轮询框架、回调机制等功能。


  Spring Cloud for Cloud Foundry:通过Oauth2协议绑定服务到CloudFoundry,CloudFoundry是VMware推出的开源PaaS云平台。


  Spring Cloud Sleuth:日志收集工具包,封装了Dapper,Zipkin和HTrace操作。


  Spring Cloud Data Flow:大数据操作工具,通过命令行方式操作数据流。


  Spring Cloud Security:安全工具包,为你的应用程序添加安全控制,主要是指OAuth2。


  Spring Cloud Consul:封装了Consul操作,consul是一个服务发现与配置工具,与Docker容器可以无缝集成。


  Spring Cloud Zookeeper:操作Zookeeper的工具包,用于使用zookeeper方式的服务注册和发现。


  Spring Cloud Stream:数据流操作开发包,封装了与Redis,Rabbit、Kafka等发送接收消息。


  Spring Cloud CLI:基于 Spring Boot CLI,可以让你以命令行方式快速建立云组件。

  

  SpringCloud特点

       1:约定优于配置

2:开箱即用、快速启动

3:适用于各种环境

4:轻量级的组件

5:组件支持丰富,功能齐全

  

三: SpringBoot了解


    Spring Boot让我们的Spring应用变的更轻量化。比如:你可以仅仅依靠一个Java类来运行一个Spring引用。你也可以打包你的应用为jar并通过使用java -jar来运行你的Spring Web应用。

由于SpringCloud依赖SpringBoot,所以在学习SpringCloud框架之前需要了解下SpringBoot。

SpringBoot的主要优点:

  1:为所有Spring开发者更快的入门

  2:开箱即用,提供各种默认配置来简化项目配置

  3:内嵌式容器简化Web项目

  4:没有冗余代码生成和XML配置的要求

SpringCloud之Eureka


一:Eureka简介


   Eureka是Spring Cloud Netflix的一个子模块,也是核心模块之一。用于云端服务发现,一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移。

服务注册与发现对于微服务系统来说非常重要。有了服务发现与注册,你就不需要整天改服务调用的配置文件了,你只需要使用服务的标识符,就可以访问到服务。他的功能类似于dubbo的注册中心(register)

   服务发现:服务发现是微服务基础架构的关键原则之一。试图着手配置每个客户端或某种格式的约定可以说是非常困难的和非常脆弱的。Eureka是Netflix服务发现的一种服务和客户端。这种服务是可以被高可用性配置的和部署,并且在注册的服务当中,每个服务的状态可以互相复制给彼此。  

   服务注册:当一个客户端注册到Eureka,它提供关于自己的元数据(诸如主机和端口,健康指标URL,首页等)Eureka通过一个服务从各个实例接收心跳信息。如果心跳接收失败超过配置的时间,实例将会正常从注册里面移除

   

 下图是基本的服务注册和发现

   

二:Eureka服务发现和注册(创建注册中心)

   

    1:创建一个基础的Spring Boot工程,并在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>

		<groupId>com.demo.springcloud</groupId>
		<artifactId>eureka_register_service</artifactId>
		<version>1.0.0</version>
		<packaging>jar</packaging>

		<name>eureka_register_service</name>
		<description>Spring Cloud project</description>

		<parent>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-parent</artifactId>
			<version>1.4.3.RELEASE</version>
			<relativePath /> 
		</parent>

		<properties>
			<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
			<java.version>1.8</java.version>
		</properties>

		<dependencies>
			<dependency>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-starter-test</artifactId>
				<scope>test</scope>
			</dependency>

			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-starter-eureka-server</artifactId>
			</dependency>
		
			<dependency>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-starter-security</artifactId>
			</dependency>
		</dependencies>

		<dependencyManagement>
			<dependencies>
				<dependency>
					<groupId>org.springframework.cloud</groupId>
					<artifactId>spring-cloud-dependencies</artifactId>
					<version>Brixton.RELEASE</version>
					<type>pom</type>
					<scope>import</scope>
				</dependency>
			</dependencies>
		</dependencyManagement>

		<build>
			<plugins>
				<plugin>
					<groupId>org.springframework.boot</groupId>
					<artifactId>spring-boot-maven-plugin</artifactId>
				</plugin>
			</plugins>
		</build>

	</project>	
	
	


 2:创建一个启动类Application


package com.demo.springcloud;

 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

 @EnableEurekaServer
 @SpringBootApplication
 public class Application {
 	public static void main(String[] args) {
 	    SpringApplication.run(Application.class, args);
 	}

 }


 

 通过@EnableEurekaServer注解启动一个服务注册中心提供给其他应用进行对话。

 

 3:创建一个配置文件 application.properties,注意不要出现空格,否启动报错

 server.port=8000
 eureka.client.register-with-eureka=false
 eureka.client.fetch-registry=false
 eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/

 

 4:执行bluid.sh进行构建,然后执行main方法。本人由于在eclipse下没有进行手动编译,启动的时候一直读取不到application.properties

 

 5:查看注册中心

 http://127.0.0.1:8000/ 可以看到如下图

 

 

 是不是很简单啊,那么人要问了,为什么连登陆账号和密码都没有,在外网不是直接能进入注册中心, 这样很不安全啊。好,那我们加入登陆账号和密码

 

三:Eureka注册中心加入权限


  1:加入注册中心需要引入jar,在pom.xml加入

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-security</artifactId>
</dependency>

  2:配置文件新建一个bootstrap.yml文件

  

security:
    basic:
      enabled: true
    user:
      name: admin
      password: 123


  记得重新编译打包然后执行main方法。

   

四:注册一个服务


   首先要去掉注册中心加入的权限,不然服务端会链接不上注册中心进行注册的,本人还不知怎么配服务端连接注册中心账号和密码的配置。

   创建一个biz-serice-0的工程服务,相关代码我不在这里说明,可以直接git下载 https://github.com/zhp8341/SpringCloudDemo


   


执行demo应该能看上面的结果,下图是注册中心找到的服务BIZ-SERVICE-0,上图是服务暴露的接口


猜你喜欢

转载自blog.51cto.com/14010829/2312587
今日推荐