Spring Cloud微服务解决方案①:Eureka服务端的构建

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_22075041/article/details/85007816

Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,以实现SpringCloud的服务发现功能。包含两个组件:Eureka Server和Eureka Client。

Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。

Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也就是一个内置的、使用轮询(round-robin)负载算法的负载均衡器。

在应用启动后,将会向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。Eureka Server之间通过复制的方式完成数据的同步,Eureka还提供了客户端缓存机制,即使所有的Eureka Server都挂掉,客户端依然可以利用缓存中的信息消费其他服务的API。综上,Eureka通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性。

以上是百度百科,原理啥的自行了解去,废话不多数,这一篇是阐述一下Eureka Server怎么玩。

demo下载地址:https://download.csdn.net/download/qq_22075041/10851487

本文源码是microservice-discovery-eureka文件夹模块

我这边的话Eureka是创建了一个子模块的形式,在parent的pom.xml中当然不能缺少springboot和springcloud的依赖

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.4.1.RELEASE</version>
	</parent>
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Camden.SR1</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

然后在Eureka子模块中需要加入Eureka的依赖

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
<!--这个依赖不是必须的,但是如果你的项目加上basic认证的话,需要加上这个依赖,不然不生效-->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-security</artifactId>
</dependency>

在启动类上加上一个@EnableEurekaServer注解

package com.itmuch.cloud;

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

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

还有配置文件里面

security: # 加入权限 需要pom依赖
  basic:
    enabled: true
  user:
    name: user # 账号
    password: password123 # 密码
server:
  port: 8761 # 启动端口
eureka:
  client:
    # 以下俩个注解的意思是 只把当前项目作为服务端,因为eureka本身也是一个客户端,eureka和eureka之间会同步信息,当前我们是单机
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://user:password123@localhost:8761/eureka #连接地址可以多个 注意连接中的权限参数

然后启动起来  访问http://localhost:8761/

 

=======================================================================================

接下来我们来聊聊eurake的高可用,代码案例在项目的microservice-discovery-eureka-ha模块

eurake服务本身也是个客户端,那么他就需要和其他的eurake保持通讯互相同步(续约时间为30秒,90秒无响应会踢掉节点,可以配置缩短这个时效,但是生产环境官方建议我们使用默认值),我们知道zookeeper必须奇数个才可以,但是eurake俩个就可以了。接下来看demo,我启动了三个。

配置文件这样写:

spring:
  application:
    name: EUREKA-HA
---
server:
  port: 8761
spring:
  profiles: peer1
eureka:
  instance:
    hostname: peer1
  client:
    serviceUrl:
      defaultZone: http://peer2:8762/eureka/,http://peer3:8763/eureka/ #注册到其他俩个,也可以peer1注册到peer2 peer2注册到peer3 peer3注册到peer1 ,只要不是孤立某一个就好了
---
server:
  port: 8762
spring:
  profiles: peer2
eureka:
  instance:
    hostname: peer2
  client:
    serviceUrl:
      defaultZone: http://peer1:8761/eureka/,http://peer3:8763/eureka/
---
server:
  port: 8763
spring:
  profiles: peer3
eureka:
  instance:
    hostname: peer3
  client:
    serviceUrl:
      defaultZone: http://peer1:8761/eureka/,http://peer2:8762/eureka/

记得在主机的hosts文件里面加一条

 127.0.0.1 peer1 peer2 peer3

我这样写只是为了方便,启动的时候记得run configration指定启动哪一个哦;

猜你喜欢

转载自blog.csdn.net/qq_22075041/article/details/85007816
今日推荐