Java--SpringCloud:服务注册中心

单体架构

在说Springcloud 之前,我们先讲一讲单体架构系统。

所谓的单体架构就是所有功能,都放在一个应用里。
单体架构系统有其好处,如便于开发,测试,部署也很方便,直接打成一个 jar 或者 war, 就什么都好了。
不过单体架构也有其弊端,最主要体现在高访问,高并发的上限是固定的。 比如一个单体架构,能够承受 1000次访问/秒。 但是访问量达到 2000次/秒的时候,就会非常卡顿,严重影响业务,并且仅仅依靠单体架构本身,很难突破这个瓶颈了。解决办法通常就是采用分布式和集群,接下来就是要说的Spring Cloud

SpringCloud 就是一套工具,帮助开发很容易的搭建出集群和分布式的框架

什么是Spring cloud

构建分布式系统不需要复杂和容易出错。Spring Cloud 为最常见的分布式系统模式提供了一种简单且易于接受的编程模型,帮助开发人员构建有弹性的、可靠的、协调的应用程序。Spring Cloud 构建于 Spring Boot 之上,使得开发者很容易入手并快速应用于生产中。

Spring Cloud 的服务发现框架——Eureka 

Eureka是基于REST(代表性状态转移)的服务,主要在AWS云中用于定位服务,以实现负载均衡和中间层服务器的故障转移。我们称此服务为Eureka服务器。Eureka还带有一个基于Java的客户端组件Eureka Client,它使与服务的交互变得更加容易。客户端还具有一个内置的负载平衡器,可以执行基本的循环负载平衡。在Netflix,更复杂的负载均衡器将Eureka包装起来,以基于流量,资源使用,错误条件等多种因素提供加权负载均衡,以提供出色的弹性。

SpringCloud 与 SpringBoot关系

Spring boot 是 Spring 的一套快速配置脚手架,可以基于spring boot 快速开发单个微服务,Spring Cloud是一个基于Spring Boot实现的云应用开发工具;Spring boot专注于快速、方便集成的单个个体,Spring Cloud是关注全局的服务治理框架;spring boot使用了默认大于配置的理念,很多集成方案已经帮你选择好了,能不配置就不配置,Spring Cloud很大的一部分是基于Spring boot来实现。

Spring boot可以离开Spring Cloud独立使用开发项目,但是Spring Cloud离不开Spring boot,属于依赖的关系。

spring -> spring boot > spring cloud 这样的关系。

SpringBoot与SpringCloud的版本需要对应,对应详细版本可参考如下链接:

Document

Java--SpringBoot与SpringCloud的版本对应详细版_MinggeQingchun的博客-CSDN博客

springcloud 比较特别,它由多个微服务组成, 所谓的微服务,就是 springboot,。
所以可以说 springcloud 由多个 springboot 项目组成, 而这些 springboot 之间又是围绕一个共同目的而存在的。
所以,为了便于组织这些 springboot 项目,我们会采用 maven 父子-聚合 项目的方式来开发

1、创建父项目,菜单---->File---->Other---->Maven---->Maven Project,项目参数填写好

2、创建好了父项目之后把 src 目录删了,因为父项目里用不到。
父项目的pom.xml 文件里有几点重要信息:
(1)依赖 springboot 版本是 2.0.3
(2)有基于 hutool 的依赖, hutool 是一个工具类
(3)springcloud 用的版本是 Finchley

<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>
  <groupId>com.myjava.springcloud</groupId>
  <artifactId>springcloud</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>
  
  <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
        <relativePath/>
    </parent>
 
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
    </properties>
           
    <dependencies>
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-test</artifactId>
          <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>cn.hutool</groupId>
        <artifactId>hutool-all</artifactId>
        <version>4.3.1</version>
      </dependency>
      
      <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>2.3.0</version>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-impl</artifactId>
        <version>2.3.0</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jaxb</groupId>
        <artifactId>jaxb-runtime</artifactId>
        <version>2.3.0</version>
    </dependency>
    <dependency>
        <groupId>javax.activation</groupId>
        <artifactId>activation</artifactId>
        <version>1.1.1</version>
    </dependency>
      
    </dependencies>
 
    <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>
  
    <modules>
    	<module>eureka-server</module>
    </modules>
</project>

3、创建子项目eureka-server,菜单---->File---->Other---->Maven---->Maven Module,项目参数填写好

4、子项目pom.xml 文件,增加 spring-cloud-starter-netflix-eureka-server jar 包

<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.myjava.springcloud</groupId>
    <artifactId>springcloud</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>eureka-server</artifactId>
  
  <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
  </dependencies>
  
</project>

5、创建EurekaServerApplication启动类

package com.myjava.springcloud;

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

import cn.hutool.core.util.NetUtil;

//EurekaServer 本身就是个 Springboot 微服务, 所以它有 @SpringBootApplication 注解
@SpringBootApplication
//@EnableEurekaServer 表示这是个 EurekaServer 
@EnableEurekaServer
public class EurekaServerApplication {
	//8761 这个端口是默认的,不用修改,后面的子项目,都会访问这个端口。
	public static void main(String[] args) {
		int port = 8761;
		if (!NetUtil.isUsableLocalPort(port)) {
			System.err.printf("端口%d被占用了,无法启动%n", port );
            System.exit(1);
		}
		new SpringApplicationBuilder(EurekaServerApplication.class).properties("server.port=" + port).run(args);
	}
}

6、application.yml,配置文件,提供 eureka 的相关信息

#配置文件,提供 eureka 的相关信息。
#hostname: localhost 表示主机名称。
#registerWithEureka:false. 表示是否注册到服务器。 因为它本身就是服务器,所以就无需把自己注册到服务器了。
#fetchRegistry: false. 表示是否获取服务器的注册信息,和上面同理,这里也设置为 false。
#defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ 自己作为服务器,公布出来的地址。 比如后续某个微服务要把自己注册到 eureka server, 那么就要使用这个地址: http://localhost:8761/eureka/
#
#name: eurka-server 表示这个微服务本身的名称是 eureka-server
eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
 
spring:
  application:
    name: eureka-server

注:Eureka的常用配置

eureka:
  client: #eureka客户端配置
    register-with-eureka: true #是否将自己注册到eureka服务端上去
    fetch-registry: true #是否获取eureka服务端上注册的服务列表
    service-url:
      defaultZone: http://localhost:8001/eureka/ # 指定注册中心地址
    enabled: true # 启用eureka客户端
    registry-fetch-interval-seconds: 30 #定义去eureka服务端获取服务列表的时间间隔
  instance: #eureka客户端实例配置
    lease-renewal-interval-in-seconds: 30 #定义服务多久去注册中心续约
    lease-expiration-duration-in-seconds: 90 #定义服务多久不去续约认为服务失效
    metadata-map:
      zone: jiangsu #所在区域
    hostname: localhost #服务主机名称
    prefer-ip-address: false #是否优先使用ip来作为主机名
  server: #eureka服务端配置
    enable-self-preservation: false #关闭eureka服务端的保护机制

文件目录如下:

7、启动运行 EurekaServerApplication,访问地址http://127.0.0.1:8761/

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值