SpringCloud注册中心eureka搭建与服务注册

微服务:独立的工程之间通过框架形成的一个集群的服务调用;这个集群称之为微服务集群;

微:集群中的工程(服务器),都是独立运行的项目;功能非常单一微小,例如后台的增删改查可以切分成4个独立运行的微服务工程.

springCloud的微服务框架具有很多的功能组件:

1 服务治理 eureka 所有工程都可以在eureak中注册自己的服务名称,如果名称一致,将会被eureka作为同一个服务来使用;

2 负载均衡调用组件:ribbon, 前端的客户端的组件
3 接口客户端组件: feign 底层依赖ribbon+template实现的调用。看不到实际调用的方法,利用接口,注解
4 熔断器:Hystrix, 当服务调用出现任何异常或者问题时,可以利用熔断的逻辑完成错误的解决;类似代码中的try catch
5 分布式配置:config,分布式配置组件;
6 网关组件:zuul,实现网关路由,监听,对当前的需要的服务进行网关治理;

微服务治理组件eureka

springcloud中的核心组件之一,没有它就无法形成微服务的框架;有服务治理中心,有服务注册客户端;

搭建一个服务注册中心

1 springboot工程(quickstart)

可以再 start.spring.io 生成一个springboot工程

2 pom依赖(标准的springboot,但是必须springboot版本1.5.9.Release,和springcloud版本兼容 Edgware,Dalston)
<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.arno</groupId>
  <artifactId>eureka-server</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>eureka-server</name>
  <url>http://maven.apache.org</url>
<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.9.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
  </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>Edgware.RELEASE</spring-cloud.version>
  </properties>
  <dependencies>
        <dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka-server</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</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>
</project>

3 application.properties
server.port=8090
//当前中心访问的域名
eureka.instance.hostname=localhost 
eureka.client.registerWithEureka=false  
//当前的注册中心默认情况会在自己启动的中心注册一个自己的服务
eureka.client.fetchRegistry=false  
//匹配eureka.instance.hostname的值得中心访问地址,服务注册中心的页面可以通过这个地址访问,给其他的服务使用的,浏览器直接访问localhost:8090,给其他服务用来在注册中心注册的地址
eureka.client.serviceUrl.defaultZone=http://localhost:8090/eureka/
3 编写启动类,查看注册中心内容,在启动类上添加@EnableEurekaServer注解
package com.arno;

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

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

localhost:8090访问测试,服务端已经搭建起来

SpringCloud注册中心eureka搭建与服务注册

eureka客户端(服务调用的服务提供者)在注册中心注册服务

1 quickstart的maven骨架

可以再 start.spring.io 生成一个springboot工程

2 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.0</modelVersion>

  <groupId>com.arno</groupId>
  <artifactId>eureka-client01</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>eureka-client01</name>
  <url>http://maven.apache.org</url>
<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.9.RELEASE</version>
		<relativePath /> <!-- lookup parent from repository -->
	</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>Edgware.RELEASE</spring-cloud.version>
	</properties>
  <dependencies>
    <dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka</artifactId>
		</dependency>


		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</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>
</project>
3 application.properites
server.port=8091
server.context-path=/
//在eureka中心注册一个service-hi的服务,名字自定义,服务中心根据服务名称判断是否是处理同一种逻辑的服务,
//例如用户登录服务,统一一个名字,可以启动多个项目,到注册中心
spring.application.name=service-hi
//指向注册中心,与eureka center一致,服务启动后悔自动到下面的地址注册名称为service-hi的服务
eureka.client.serviceUrl.defaultZone=http://localhost:8090/eureka/
在启动类中添加@EnableEurekaClient注解
package com.arno;

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

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

启动客户端会根据地址自动到服务端注册服务,查看服务端http://localhost:8090/

SpringCloud注册中心eureka搭建与服务注册

已经注册了服务,和服务提供的地址。

eureka报警

EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY’RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.

当提供服务的eureka client断开连接,程序关闭,宕机等问题,导致服务治理中心无法发现或连接通信服务提供者时,可连接的服务提供者占用所有服务提供者的85%(默认值)以下时,出现以上预警