`
阅读更多

 

SpringCloud Eureka安装和使用,SpringCloud使用Eureka作为服务注册中心

 

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

©Copyright 蕃薯耀 2021-03-08

http://fanshuyao.iteye.com/

 

 

 

一、Eureka功能点

server:Eureka Server(服务注册中心)

provider:Eureka Client(服务提供者)+Actuator(服务器监控)

consumer:Eureka Client(服务器消费者)+Actuator(服务器监控)+Ribbon(负载均衡)

 

二、Eureka server服务端

1、引入Pom依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    <version>2.2.7.RELEASE</version>
</dependency>

<dependency>
	<groupId>cn.hutool</groupId>
	<artifactId>hutool-all</artifactId>
	<version>5.4.4</version>
</dependency>

 

 

2、application.properties文件配置

 

server.port=8501

spring.application.name=springCloud-eureka-server

#eureka服务端的实例名称,eureka8501.com需要修改host文件
eureka.instance.hostname=eureka8501.com
#客户端服务名
#eureka.instance.appname=${spring.application.name}
# 是否向注册中心注册自己,缺省:true
# 一般情况下,Eureka服务端是不需要再注册自己的,false表示不向注册中心注册自己
eureka.client.register-with-eureka=false
# 是否从Eureka获取注册信息,缺省:true
# 一般情况下,Eureka服务端是不需要的
eureka.client.fetch-registry=false
# Eureka服务器的地址,类型为HashMap,缺省的Key为 defaultZone;缺省的Value为 http://localhost:8761/eureka
#如果是单机,配置自己的地址:http://eureka8501.com:8501/eureka,同样可以配置成:http://${eureka.instance.hostname}:${server.port}/eureka
#如果是集群(服务端),在这里需要配置其他eureka server的地址,用逗号进行分隔,如http://192.168.170.11:7000/eureka,http://192.168.170.12:9000/eureka 
#格式为:http://${eureka.instance.hostname}:${server.port}/eureka
eureka.client.service-url.defaultZone=http://eureka8501.com:8501/eureka

#关闭自我保护机制,保证不可用服务被及时移除
eureka.server.enable-self-preservation=false
#3秒后移除
eureka.server.eviction-interval-timer-in-ms=3000

 

 

 

3、启动类

 

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

@SpringBootApplication
@EnableEurekaServer
public class SpringCloudEurekaServer8501Application {

	public static void main(String[] args) {
		SpringApplication.run(SpringCloudEurekaServer8501Application.class, args);
	}
}

 

 

 

三、Eureka provider - 服务提供者端

1、引入Pom依赖

 

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
	<version>2.2.7.RELEASE</version>
</dependency>
<dependency>
	<groupId>cn.hutool</groupId>
	<artifactId>hutool-all</artifactId>
	<version>5.4.4</version>
</dependency>

 

 

2、application.properties文件配置

server.port=8601



spring.application.name=springCloud-eureka-server



#eureka实例名称

#eureka.instance.hostname=eureka8601.com

eureka.instance.instance-id=eureka8601

#路径显示IP地址

eureka.instance.prefer-ip-address=true

#eureka客户端向服务端发送心跳的时间间隔,单元为秒,默认为30秒

eureka.instance.lease-renewal-interval-in-seconds=2

#eureka服务端收到最后一次心跳等待的时间上限,超时将移除服务,单元为秒,默认为90秒

eureka.instance.lease-expiration-duration-in-seconds=5



#false表示向注册中心注册自己

eureka.client.register-with-eureka=true

#是否从Eureka抓取已有的注册信息,默认为true。单节点不用设置,集群必须设置为true,才能配置ribbon使用负载均衡

eureka.client.fetch-registry=true

#设置与Eureka server交互的地址查询服务和注册服务都需要依赖这个地址

eureka.client.service-url.defaultZone=http://eureka8501.com:8501/eureka

#集群配置

#eureka.client.service-url.defaultZone=http://eureka8501.com:8501/eureka,http://eureka8502.com:8501/eureka

 

3、启动类

 

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

@SpringBootApplication
@EnableEurekaClient
public class SpringCloudEurekaClient8601Application {

	public static void main(String[] args) {
		SpringApplication.run(SpringCloudEurekaClient8601Application.class, args);
	}

}

 

 

4、服务类

 

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ClientController {

	@Value("${server.port}")
	private String serverPort;
	
	@Autowired
	private DiscoveryClient discoveryClient;
	
	@RequestMapping("/test")
	public Result test() {
		return Result.ok("端口:" + serverPort);
	}
	
	
	@RequestMapping("/discoveryClient")
	public Result discoveryClient() {
		List<String> services = discoveryClient.getServices();
		for (String service : services) {
			System.out.println("===service = " + service);
			System.out.println("");
			
			List<ServiceInstance> serviceInstances = discoveryClient.getInstances(service);
			for (ServiceInstance serviceInstance : serviceInstances) {
				System.out.println("+++getInstanceId = " + serviceInstance.getInstanceId());
				System.out.println("+++getHost = " + serviceInstance.getHost());
				System.out.println("+++getPort = " + serviceInstance.getPort());
				System.out.println("+++getUri = " + serviceInstance.getUri());
				System.out.println("");
			}
			System.out.println("-------------------------------------");
		}
		
		return Result.ok(discoveryClient);
	}	
}

 

 

 

import java.util.Date;

import cn.hutool.core.date.DateUtil;

public class Result {
	
	public static final String SUCCESS = "操作成功。";
	public static final String FAILURE = "操作失败!";
	
	private boolean result;
	private String timestamp;
	private String msg;
	private Object datas;
	
	private Result() {}
	
	public static Result ok() {
		return Result.ok(SUCCESS, null);
	}
	
	
	public static Result ok(Object datas) {
		return Result.ok(SUCCESS, datas);
	}
	
	
	public static Result okMsg(String msg) {
		return Result.ok(msg, null);
	}
	
	
	public static Result ok(String msg, Object datas) {
		Result result = new Result();
		result.setResult(true);
		result.setTimestamp(DateUtil.formatDateTime(new Date()));
		
		if(msg == null || msg == "" || msg.trim() == "") {
			result.setMsg(SUCCESS);
		}else {
			result.setMsg(msg);
		}
		
		result.setDatas(datas);
		return result;
	}
	
	public static Result fail() {
		return Result.fail(FAILURE, null);
	}
	
	
	public static Result failMsg(String msg) {
		return Result.fail(msg, null);
	}
	
	
	public static Result fail(Object datas) {
		return Result.fail(FAILURE, datas);
	}
	
	public static Result fail(String msg, Object datas) {
		Result result = new Result();
		result.setResult(false);
		result.setTimestamp(DateUtil.formatDateTime(new Date()));
		
		if(msg == null || msg == "" || msg.trim() == "") {
			result.setMsg(FAILURE);
		}else {
			result.setMsg(msg);
		}
		result.setDatas(datas);
		return result;
	}
	
	public boolean isResult() {
		return result;
	}
	public void setResult(boolean result) {
		this.result = result;
	}
	public String getTimestamp() {
		return timestamp;
	}

	public void setTimestamp(String timestamp) {
		this.timestamp = timestamp;
	}

	public String getMsg() {
		return msg;
	}
	public void setMsg(String msg) {
		this.msg = msg;
	}
	public Object getDatas() {
		return datas;
	}
	public void setDatas(Object datas) {
		this.datas = datas;
	}
	

	public static void main(String[] args) {
		
	}
	
}

 

 

四、Eureka consumer - 服务消费者端

1、引入Pom依赖

 

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
	<version>2.2.7.RELEASE</version>
</dependency>
<dependency>
	<groupId>cn.hutool</groupId>
	<artifactId>hutool-all</artifactId>
	<version>5.4.4</version>
</dependency>

 

 

2、application.properties文件配置

server.port=8701



spring.application.name=springCloud-eureka-web



#eureka服务端的实例名称

eureka.instance.hostname=eureka8701.com



#eureka实例名称

eureka.instance.instance-id=eureka8701

#路径显示IP地址

eureka.instance.prefer-ip-address=true

#eureka客户端向服务端发送心跳的时间间隔,单元为秒,默认为30秒

eureka.instance.lease-renewal-interval-in-seconds=2

#eureka服务端收到最后一次心跳等待的时间上限,超时将移除服务,单元为秒,默认为90秒

eureka.instance.lease-expiration-duration-in-seconds=5



#false表示向注册中心注册自己

eureka.client.register-with-eureka=false

#是否从Eureka抓取已有的注册信息,默认为true。单节点不用设置,集群必须设置为true,才能配置ribbon使用负载均衡

eureka.client.fetch-registry=true

#设置与Eureka server交互的地址查询服务和注册服务都需要依赖这个地址

eureka.client.service-url.defaultZone=http://eureka8501.com:8501/eureka

 

 

3、启动类

 

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

@SpringBootApplication
@EnableEurekaClient
public class SpringCloudEurekaWebApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringCloudEurekaWebApplication.class, args);
	}

}

 

4、RestTemplate类

 

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RestConfig {

	//@LoadBalanced实现负载均衡
	@Bean
	@LoadBalanced
	public RestTemplate restTemplate() {
		return new RestTemplate();
	}
}

 

 

5、服务请求类

 

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
@RequestMapping("/web")
public class TestController {

	//private String serviceUrl = "http://eureka8601.com:8601";
	//springCloud使用RestTemplate,如果使用了服务的地址,RestTemplate必须加上@LoadBalanced注解,不然会java.net.UnknownHostException
	private String serviceUrl = "http://SPRINGCLOUD-EUREKA-SERVER";
	
	@Autowired
	private RestTemplate restTemplate;
	
	@RequestMapping(value="/get", produces = MediaType.APPLICATION_JSON_VALUE)
	public Result get() {
		Result result = restTemplate.getForObject(serviceUrl + "/test", Result.class);
		return result;
	}
	
}

 

 

五、eureka配置项解析

1、eureka通用配置

# 应用名称,将会显示在Eureka界面的应用名称

spring.application.name=config-service

# 应用端口,Eureka服务端默认为:8761

server.port=3333

 

 

2、eureka.server前缀的配置项

# 是否允许开启自我保护模式,缺省:true

# 当Eureka服务器在短时间内丢失过多客户端时,自我保护模式可使服务端不再删除失去连接的客户端

eureka.server.enable-self-preservation = false



# Peer节点更新间隔,单位:毫秒

eureka.server.peer-eureka-nodes-update-interval-ms = 



# Eureka服务器清理无效节点的时间间隔,单位:毫秒,缺省:60000,即60秒

eureka.server.eviction-interval-timer-in-ms = 60000

 

 

 

3、eureka.instance前缀的配置项

# 服务名,默认取 spring.application.name 配置值,如果没有则为 unknown

eureka.instance.appname = eureka-client



# 实例ID

eureka.instance.instance-id = eureka-client-instance1



# 应用实例主机名

eureka.instance.hostname = localhost



# 客户端在注册时使用自己的IP而不是主机名,缺省:false

eureka.instance.prefer-ip-address = false



# 应用实例IP

eureka.instance.ip-address = 127.0.0.1



# 服务失效时间,失效的服务将被剔除。单位:秒,默认:90

eureka.instance.lease-expiration-duration-in-seconds = 90



# 服务续约(心跳)频率,单位:秒,缺省30

eureka.instance.lease-renewal-interval-in-seconds = 30



# 状态页面的URL,相对路径,默认使用 HTTP 访问,如需使用 HTTPS则要使用绝对路径配置,缺省:/info

eureka.instance.status-page-url-path = /info



# 健康检查页面的URL,相对路径,默认使用 HTTP 访问,如需使用 HTTPS则要使用绝对路径配置,缺省:/health

eureka.instance.health-check-url-path = /health

 

 

 

4、eureka.client前缀的配置项

# Eureka服务器的地址,类型为HashMap,缺省的Key为 defaultZone;缺省的Value为 http://localhost:8761/eureka

# 如果服务注册中心为高可用集群时,多个注册中心地址以逗号分隔。 

eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka



# 是否向注册中心注册自己,缺省:true

# 一般情况下,Eureka服务端是不需要再注册自己的

eureka.client.register-with-eureka = true



# 是否从Eureka获取注册信息,缺省:true

# 一般情况下,Eureka服务端是不需要的

eureka.client.fetch-registry = true



# 客户端拉取服务注册信息间隔,单位:秒,缺省:30

eureka.client.registry-fetch-interval-seconds = 30



# 是否启用客户端健康检查

eureka.client.health-check.enabled = true



# 

eureka.client.eureka-service-url-poll-interval-seconds = 60



# 连接Eureka服务器的超时时间,单位:秒,缺省:5

eureka.client.eureka-server-connect-timeout-seconds = 5



# 从Eureka服务器读取信息的超时时间,单位:秒,缺省:8

eureka.client.eureka-server-read-timeout-seconds = 8



# 获取实例时是否只保留状态为 UP 的实例,缺省:true

eureka.client.filter-only-up-instances = true



# Eureka服务端连接空闲时的关闭时间,单位:秒,缺省:30

eureka.client.eureka-connection-idle-timeout-seconds = 30



# 从Eureka客户端到所有Eureka服务端的连接总数,缺省:200

eureka.client.eureka-server-total-connections = 200



# 从Eureka客户端到每个Eureka服务主机的连接总数,缺省:50

eureka.client.eureka-server-total-connections-per-host = 50

 

 

(如果文章对您有所帮助,欢迎捐赠,^_^)

 

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

©Copyright 蕃薯耀 2021-03-08

 

http://fanshuyao.iteye.com/

1
1
分享到:
评论

相关推荐

    spring cloud eureka(免费下载)

    在微服务架构中,每个服务可能都会独立部署和扩展,Eureka作为一个服务注册中心,帮助各个服务实例进行注册和发现,从而实现服务间的通信。 在最新的Spring Cloud版本中(此处为Spring Boot 2.6.4和Spring Cloud ...

    springcloud eureka服务注册中心 最新版本2.x.x

    SpringCloud Eureka是微服务架构中的关键组件,它作为一个服务注册与发现的工具,使得服务之间的调用变得简单。在最新版本2.x.x中,Eureka提供了更稳定、高效的特性来支持大规模分布式系统的构建。 首先,让我们...

    Spring Cloud eureka服务注册DEMO

    我们将基于提供的"Spring Cloud Eureka服务注册DEMO"来理解其核心概念,并探索如何通过三个Spring Boot应用——服务注册模块、服务提供模块和服务发现与消费模块——实现服务注册与发现。 1. **Eureka概述**: ...

    springcloud+注册中心eureka+配置中心demo

    总结,SpringCloud Eureka作为服务注册与发现中心,使得服务实例能够被其他服务发现和调用;而SpringCloud Config作为配置中心,实现了配置的集中管理和动态更新。在实际的Demo项目中,这两个组件的集成使得微服务...

    springcloud eureka 服务注册中心

    **SpringCloud Eureka 服务注册中心** 在微服务架构中,服务发现是核心组件之一,它使得服务之间能够互相找到并进行通信。Spring Cloud Eureka 就是这样的一个服务注册与发现工具,它是 Netflix 提供的开源项目,是...

    spring cloud eureka 注册中心客户端

    综上所述,Spring Cloud Eureka客户端是微服务架构中不可或缺的部分,它提供了服务注册、发现和健康检查等功能,帮助构建高可用和可扩展的分布式系统。通过合理的配置和API使用,我们可以轻松地在Spring Cloud项目中...

    Spring Cloud Eureka Server

    Eureka Server作为服务注册中心,为其他微服务提供服务注册和发现的能力,使得微服务之间可以进行有效的通信。 在部署Eureka Server时,我们通常会遵循以下步骤: 1. **构建项目**:首先,你需要有一个配置好的...

    springcloud注册中心Eureka集群示例代码.zip

    - `springcloud-order` 和 `springcloud-member` 作为服务提供者,它们启动后会向 Eureka 集群注册自己的服务。注册过程包括发布服务元数据,如服务名、IP 地址、端口等。 - 当服务消费者(如 `springcloud-order`...

    Spring Cloud Eureka + Spring Cloud Gateway + Spring Cloud Zipkin

    Eureka服务器作为服务注册中心,微服务实例启动后会向Eureka注册自身信息,同时也会定期心跳上报以保持服务状态。客户端则可以通过Eureka获取到所有可用服务的信息,实现服务之间的互相调用。Eureka还提供了服务失效...

    springcloud Eureka源码解读

    Eureka服务器是Eureka的核心部分,它作为服务注册中心,负责服务的注册、查询和管理。服务提供者(即应用)向Eureka服务器注册自身信息,包括服务名、IP地址、端口等。服务消费者则通过Eureka服务器查找并获取服务...

    SpringCloud Eureka集群项目

    本项目是一个SpringCloud Eureka集群的示例,旨在帮助开发者了解如何设置和运行一个包含双节点的Eureka集群,以实现高可用的服务注册中心。 首先,我们来理解Eureka的基本工作原理。Eureka服务器作为服务注册中心,...

    spring cloud eureka服务注册与发现

    Spring Cloud Eureka是Spring Cloud框架中的一个核心组件,主要用于实现微服务架构中的服务注册与发现功能。在微服务架构中,服务之间的通信依赖于服务发现机制,Eureka就是扮演这个角色,帮助各个微服务实例自动...

    Spring Cloud Eureka源码分析

    通过对Spring Cloud Eureka源码的深入分析,我们可以更好地理解其工作原理,优化服务注册与发现的性能,以及在特定场景下如何进行定制和扩展。源码分析有助于我们提升系统设计和故障排查的能力,是成为高级微服务...

    springcloud-eureka.zip

    7. **配置与使用**:在Spring Cloud项目中,可以通过配置文件(如`application.yml`或`application.properties`)来设置Eureka Server和Eureka Client的相关参数,比如服务注册的超时时间、心跳间隔、服务发现的重试...

    spring cloud eureka示例代码

    1. **Eureka Server**:作为服务注册中心,它存储了所有服务实例的信息。 2. **Eureka Client**:每个微服务应用都包含一个Eureka客户端,负责向Eureka Server注册自身、心跳保持以及查询其他服务实例。 实现Eureka...

    springcloud-eureka-server.zip

    Eureka Server作为注册中心,负责服务的注册、查询和管理,使得服务提供者能够将自己的服务注册到Eureka Server,同时服务消费者可以从Eureka Server获取到服务提供者的信息。 二、Eureka Server核心功能 1. **...

    01Spring Cloud Eureka:服务注册与发现1

    在配置文件application.yml中添加Eureka注册中心的配置,然后使用IDEA的Run Dashboard来运行SpringCloud应用。 在微服务项目中,我们可以使用IDEA的Run Dashboard来启动多个服务,以便于管理。为了让服务注册到...

    springcloud整合Eureka的demo

    Eureka是一个基于REST的服务,它作为服务注册中心,使得各个微服务能够相互发现。每个微服务在启动时会向Eureka注册自身信息,包括服务名、IP地址、端口等。同时,微服务也会定期向Eureka发送心跳,表明其仍在运行。...

    最简单的Spring Cloud Eureka集群搭建.md

    Spring Cloud Eureka集群搭建

    如何使用Spring Cloud Eureka实现服务发现,0基础!!易懂!!.html

    Spring Cloud Eureka 是其中一个重要组件,提供了服务注册和发现的功能。 本文将详细介绍如何使用 Spring Cloud Eureka 实现服务发现。我们将涵盖以下内容: 什么是服务发现? Spring Cloud Eureka 简介 搭建 ...

Global site tag (gtag.js) - Google Analytics