Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SpringCloud服务发现Eureka的使用教程

SpringCloud服务发现Eureka的使用教程

作者头像
IT架构圈
发布于 2021-10-21 06:27:53
发布于 2021-10-21 06:27:53
48900
代码可运行
举报
文章被收录于专栏:IT架构圈IT架构圈
运行总次数:0
代码可运行

上次说了单体架构和微服务之前优缺点的对比,也说了zookeeper和Eureka理论上的区别,也说了Eureka高水平的架构。Eureka Server 和Eureka Client也就是消费者和生产者的的关系。

Eureka分区的概念(一)

用户量比较大或者用户地理位置分布范围很广的项目,一般都会有多个机房。这个时候如果上线springCloud服务的话,我们希望一个机房内的服务优先调用同一个机房内的服务,当同一个机房的服务不可用的时候,再去调用其它机房的服务,以达到减少延时的作用。

eureka提供了region和zone两个概念来进行分区,这两个概念均来自于亚马逊的AWS:

  • ① region

可以简单理解为地理上的分区,比如亚洲地区,或者华北地区,再或者北京等等,没有具体大小的限制。根据项目具体的情况,可以自行合理划分region。

  • ②zone

可以简单理解为region内的具体机房,比如说region划分为北京,然后北京有两个机房,就可以在此region之下划分出zone1,zone2两个zone。

Eureka简单搭建(二)
  • ① EurekaServer

pom 配置,加入spring cloud父POM及spring-cloud-starter-eureka-server。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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.tuling.springcloud</groupId>
	<artifactId>04-eureka-server</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>04-eureka-server</name>
	<url>http://maven.apache.org</url>

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

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.10.RELEASE</version>
	</parent>
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Edgware.SR3</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- eureka server -->
		<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>

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

application.properties

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
server.port=8761
#取消向eureka server(注册中心)注册
eureka.client.register-with-eureka=false
#取消向eureka server(注册中心)获取注册信息
eureka.client.fetch-registry=false
#eureka 提供服务发现的地址
eureka.client.service-url.defaultZone=http://idig8:777@localhost:8761/eureka
#eureka.client.service-url.defaultZone=http://localhost:8761/eureka
# 安全模块
security.basic.enabled=true
security.user.name=idig8
security.user.password=777
  • ② 启动类

pom.xml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

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

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerStart {

	public static void main(String[] args) throws Exception {
        SpringApplication.run(EurekaServerStart.class, args);
    }
}
  • ③ order端
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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.tuling.springcloud</groupId>
	<artifactId>04-microservice-order</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>04-microservice-order</name>
	<url>http://maven.apache.org</url>

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

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.10.RELEASE</version>
	</parent>
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Edgware.SR3</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>
	
	<dependencies>
		<!-- eureka -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka</artifactId>
		</dependency>
		<!-- 监控和管理生产环境模块 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
		<!-- Spring WEB -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- Test -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<!-- 集成Mybatis -->
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.1.1</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
	</dependencies>

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

application.properties

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spring.application.name=microservice-order
server.port=8082
## db config
spring.datasource.url=jdbc:mysql://localhost:3306/springcloud
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

## log
logging.level.root=INFO
logging.level.org.springframework.web=DEBUG
logging.level.com.tuling.springcloud=DEBUG

#eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
eureka.client.serviceUrl.defaultZone=http://zhangfei:777@localhost:8761/eureka
eureka.instance.prefer-ip-address=true
eureka.instance.instance-id=${spring.application.name}:${spring.application.instance_id:${server.port}}

controller

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.tuling.springcloud.api;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
@RequestMapping("/order")
public class OrderController {
	private final Logger logger = LoggerFactory.getLogger(OrderController.class);
	
	@Autowired
	private RestTemplate restTemplate;
	
	//http://localhost:8082/order/user/getById?userId=1
    @RequestMapping("/user/getById")
    public Object getUserById(String userId) {
    	String url = "http://localhost:8081/user/getById?id=" + userId;
    	logger.debug("param userId : {}, request url : {}", userId, url);
    	Object result = restTemplate.getForEntity(url, Object.class);
        return result;
    }
    
    @RequestMapping("/user/getByIdEureka")
    public Object getUserByIdEureka(String userId) {
    	String url = "http://microservice-user/user/getById?id=" + userId;
    	Object result = restTemplate.getForEntity(url, Object.class);
        return result;
    }
    
    
}

启动类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.tuling.springcloud;

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

@SpringBootApplication
@EnableDiscoveryClient
public class OrderMicroStart {

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

Eureka重要概念(三)

按照这个思路去观看源码

  • Register 服务注册
  • Renew 服务的续期
  • Fetch Registers : 获取注册列表信息
  • Eviction 服务剔除
  • Cancel: 服务下线

PS:eureka在springcloud中充当服务注册功能,相当于dubbo+zk里面得zk,但是比zk要简单得多,zk可以做得东西太多了,包括分布式锁,分布式队列都是基于zk里面得四种节点加watch机制通过长连接来实现得,但是eureka不一样,eureka是基于HTTPrest来实现的,就是把服务的信息放到一个ConcurrentHashMap中,然后服务启动的时候去读取这个map,来把所有服务关联起来,然后服务器之间调用的时候通过信息,进行http调用。eureka包括两部分,一部分就是服务提供者(对于eureka来说就是客户端),一部分是服务端,客户端需要每个读取每个服务的信息,然后注册到服务端,很明显了,这个服务端就是接受客户端提供的自身的一些信息。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT架构圈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SpringCloud详细教程 | 第一篇: 服务的注册与发现Eureka(Greenwich版本)
微服务是指开发一个单个小型的但有业务功能的服务,每个服务都有自己的处理和轻量通讯机制,简单的说就是对系统进行拆分,拆分多个服务,每个服务运行在其独立的进程中,服务和服务之间采用轻量级的通信机制相互沟通(通常是基于HTTP的Restful API).每个服务都围绕着具体的业务进行构建,并且能够被独立的部署到生产环境、类生产环境等
小东啊
2019/06/26
1.2K0
SpringCloud详细教程 | 第一篇: 服务的注册与发现Eureka(Greenwich版本)
SpringCloud Eureka注册中心使用
一、maven依赖配置,SpringCloud目前有四个版本,经测试Camden,Dalston两个版本构建Eureka正常,其它两版本存在jar依赖问题,所以选取Dalstont版本,目前采用最新和SR5 依赖如下
用户2603479
2018/08/16
3240
SpringCloud Eureka注册中心使用
微服务之SpringCloud架构第一篇——Eureka服务端和客户端
Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)。使用Spring Cloud开发人员可以快速地支持实现这些模式的服务和应用程序。他们将在任何分布式环境中运行良好,包括开发人员自己的笔记本电脑,裸机数据中心,以及Cloud Foundry等托管平台。
leehao
2025/02/11
1070
微服务之SpringCloud架构第一篇——Eureka服务端和客户端
SpringCloud入门(二)-服务注册与发现
服务注册与发现有多个组件可以使用,Eureka、zookeeper、nacos等,这里以Eureka为例。
故里
2020/11/25
3190
SpringCloud-分布式配置中心【加密-对称加密】
  前面我们介绍了SpringCloud的分布式配置中心,我们将项目中的配置信息保存在git或者码云的仓库中,但是这样一些敏感信息就暴露出来了,比如数据库连接的账号密码等信息,这时我们最好能够对这些信息进行加密处理。
用户4919348
2019/07/02
8090
SpringCloud-分布式配置中心【加密-对称加密】
SpringCloud之Eureka
服务发现是基于微服务的体系结构的关键原则之一。尝试手工配置每个客户端或某种形式的约定可能很困难,而且很脆弱。Eureka是Netflix的服务发现服务器和客户端。可以将服务器配置和部署为高可用性,每个服务器将注册服务的状态复制到其他服务器。
用户3467126
2019/07/03
5270
SpringCloud之Eureka
SpringCloud之服务调用
SpringCloud的服务调用有两个东西: Ribbon是一个客户端的负载均衡器,它提供对大量的HTTP和TCP客户端的访问控制。Feign也是用的Ribbon。
用户3467126
2019/07/03
5000
SpringCloud之服务调用
Spring Cloud Eureka-服务注册与发现
Spring Cloud是目前用于开发微服务的主流框架之一,我们都知道在微服务架构中最为基础、核心的模块,就是服务注册与发现。
端碗吹水
2020/09/24
4110
服务注册与发现---eureka
eureka简介:云端服务发现,一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移。 话不多说直接上代码 首先新建一个springcloud eurekaserver项目。
dalaoyang
2018/04/28
7910
服务注册与发现---eureka
业余草 SpringCloud 教程 | 第一篇: 服务的注册与发现Eureka(Finchley版本)
鉴于《史上最简单的Spring Cloud教程》很受读者欢迎,再次我特意升级了一下版本,目前支持的版本为Spring Boot版本2.0.3.RELEASE,Spring Cloud版本为Finchley.RELEASE。
业余草
2019/01/21
4240
业余草 SpringCloud 教程 | 第一篇: 服务的注册与发现Eureka(Finchley版本)
Spring Cloud Netfix Eureka
Eureka是什么 Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。
程序员小强
2019/06/03
7020
springCloud - 1- 服务的注册与发现 Eureka
一 、在 springcloud 中 eureka 的作用 :服务注册、服务发现 。
微风-- 轻许--
2019/07/01
4310
springCloud - 1- 服务的注册与发现 Eureka
史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现Eureka(Finchley版本)
个人博客纯净版:https://www.fangzhipeng.com/springcloud/2018/08/01/sc-f1-eureka.html
方志朋
2022/05/08
5910
史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现Eureka(Finchley版本)
SpringCloud 服务注册与发现
​ SpringCloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务治理。 在传统的 RPC 远程调用框架中, 管理每个服务与服务之间依赖关系比较复杂, 所以需要使用服务治理管理服务与服务之间依赖关系, 了以实现服务调用、 负载均衡、容错等, 实现服务发现与注册 。
OY
2022/03/17
7690
SpringCloud 服务注册与发现
史上最简单的SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon)
方志朋
2017/12/29
7380
史上最简单的SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon)
Spring Cloud 入门教程1、服务注册与发现(Eureka)
Eureka是Netflix开源的服务注册与发现框架,Eureka由两个组件组成:Eureka服务器和Eureka客户端。
KenTalk
2018/09/11
6520
Spring Cloud 入门教程1、服务注册与发现(Eureka)
《SpringCloud篇:001Eureka服务的注册与发现入门篇》
https://martinfowler.com/articles/microservices.html
2020/11/13
3400
《SpringCloud篇:001Eureka服务的注册与发现入门篇》
Spring Cloud【Finchley】-02服务发现与服务注册Eureka + Eureka Server的搭建
上篇文章 Spring Cloud-01服务提供者与服务消费者 中,我们通过配置文件的方式来配置服务提供者的地址,有两个缺点
小小工匠
2021/08/17
2820
SpringCloud入门系列之Eureka注册中心
Eureka Register Service(注册中心服务端)、Provider Service(服务提供者,客户端)、Consumer Service(服务消费者,客户端)
AI码真香
2022/09/13
2910
SpringCloud入门系列之服务链路追踪Sleuth&Zipkin
备注:zipkin 服务端,可以直接前往官网https://zipkin.io/下载jar包运行。当然也可以整合在spring cloud中(常见)
AI码真香
2022/09/13
2240
推荐阅读
相关推荐
SpringCloud详细教程 | 第一篇: 服务的注册与发现Eureka(Greenwich版本)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验