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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
sklearn中的nearest neighbor
本文介绍了KNN算法在机器学习中的原理、应用场景和实现方法。主要包括KNN算法的基本原理,如k近邻算法、k-NN算法、k-Nearest Neighbors算法;分类和回归问题的应用场景;以及KNN算法的实现,包括支持向量机、朴素贝叶斯、决策树、随机森林等分类算法的实现。同时,还提供了KNN算法在回归问题中的实现方法。
GavinZhou
2018/01/02
9020
sklearn中的nearest neighbor
快速入门Python机器学习(九)
所谓K近邻算法,即是给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例(也就是上面所说的K个邻居), 这K个实例的多数属于某个类,就把该输入实例分类到这个类中。
顾翔
2022/09/23
2420
快速入门Python机器学习(九)
深入浅出KNN算法(二) sklearn
上次介绍了KNN的基本原理,以及KNN的几个窍门,这次就来用sklearn实践一下KNN算法。
py3study
2020/01/16
1.9K0
深入浅出KNN算法(二) sklearn
机器学习之KNN最邻近分类算法[通俗易懂]
KNN(K-Nearest Neighbor)最邻近分类算法是数据挖掘分类(classification)技术中最简单的算法之一,其指导思想是”近朱者赤,近墨者黑“,即由你的邻居来推断出你的类别。
全栈程序员站长
2022/08/10
1.3K0
机器学习之KNN最邻近分类算法[通俗易懂]
k均值聚类
n_digits: 10, n_samples 1797, n_features 64 _______________________________________________________________________________ init time inertiahomo compl v-meas ARI AMI silhouette k-means++ 0.43s 69684 0.683 0.722 0.702 0.573 0.699 0.154 random 0.30s 69656 0.673 0.713 0.692 0.558 0.689 0.120 PCA-based 0.05s 70793 0.667 0.695 0.681 0.553 0.677 0.156 _______________________________________________________________________________
裴来凡
2022/05/29
5250
k均值聚类
手把手教你使用sklearn快速入门机器学习
sklearn(scikit-learn)是一个非常优秀的Python库,它封装了机器学习中常用的算法,包括监督学习、非监督学习等。它有以下几个特点:
abs_zero
2018/04/11
3.3K0
手把手教你使用sklearn快速入门机器学习
机器学习 | KNN, K近邻算法
k近邻法 (k-nearest neighbor, k-NN) 是一种基本分类与回归方法。是数据挖掘技术中原理最简单的算法之一,核心功能是解决有监督的分类问题。KNN能够快速高效地解决建立在特殊数据集上的预测分类问题,但其不产生模型,因此算法准确 性并不具备强可推广性。
数据STUDIO
2021/06/24
9840
机器学习测试笔记(10)——K邻近算法
我们谈起机器学习经常会听到监督学习和非监督学习,它们的区别在哪里呢?监督学习是有标签的,而非监督学习是没有标签的。比如有一批酒,我们知道里面包括红酒和白酒,算法f可以用于鉴别某一个酒是否为红酒和白酒,这时候算法f就称作为监督学习,红酒、白酒即为标签。如果现在另有一批酒,我们知道里面包括不同品种的酒,但是不知道有几类,算法g可以把相同类别的酒归为一类,不同类别的酒归为不同的类(比如:红酒、白酒、啤酒、米酒…), 算法g就称作为非监督学习。在监督学习中我们称作“分类”,在非监督学习中我们称作“聚类”。本文提到的K邻近算法属于监督学习内的“分类”算法。
顾翔
2021/01/04
6300
机器学习测试笔记(10)——K邻近算法
Python之Sklearn使用教程
Scikit-learn(sklearn)是机器学习中常用的第三方模块,对常用的机器学习方法进行了封装,包括回归(Regression)、降维(Dimensionality Reduction)、分类(Classfication)、聚类(Clustering)等方法。当我们面临机器学习问题时,便可根据下图来选择相应的方法。Sklearn具有以下特点:
小一
2019/08/14
1.6K0
Python之Sklearn使用教程
A.机器学习入门算法(三):K近邻(k-nearest neighbors),鸢尾花KNN分类,马绞痛数据--kNN数据预处理+kNN分类pipeline
kNN(k-nearest neighbors),中文翻译K近邻。我们常常听到一个故事:如果要了解一个人的经济水平,只需要知道他最好的5个朋友的经济能力, 对他的这五个人的经济水平求平均就是这个人的经济水平。这句话里面就包含着kNN的算法思想。
汀丶人工智能
2023/03/22
1.8K0
A.机器学习入门算法(三):K近邻(k-nearest neighbors),鸢尾花KNN分类,马绞痛数据--kNN数据预处理+kNN分类pipeline
SciPyCon 2018 sklearn 教程(下)
在前面的章节和笔记本中,我们将数据集分为两部分:训练集和测试集。 我们使用训练集来拟合我们的模型,并且我们使用测试集来评估其泛化能力 - 它对新的,没见过的数据的表现情况。
ApacheCN_飞龙
2022/12/02
1K0
快速入门Python机器学习(27)
stacking严格来说并不是一种算法,而是精美而又复杂的,对模型集成的一种策略。
顾翔
2022/09/23
3200
快速入门Python机器学习(27)
技术 | 机器学习中Python库的3个简单实践——你的图片将由你来创造
【导读】今天为大家介绍机器学习、深度学习中一些优秀、有意思的 Python 库,以及这些库的 Code 实践教程。涉及到的理论与学术内容会附上相应的论文与博客,方便大家参考学习。
用户1737318
2018/07/23
7230
技术 | 机器学习中Python库的3个简单实践——你的图片将由你来创造
python实现kNN(最近邻)
最近邻可以用于分类和回归,这里以分类为例。给定一个训练集,对新输入的实例,在训练数据集中找到与该实例最接近的k个实例,这k个实例的多数属于某个类,就把该输入实例分为这个类
西西嘛呦
2020/08/26
7670
python实现kNN(最近邻)
sklearn 源码分析系列:neighbors(2)
by DemonSonggithub源码链接(https://github.com/demonSong/DML)
用户1147447
2019/05/26
1.2K0
数据处理的统计学习(scikit-learn教程)
Scikit-learn 是一个紧密结合Python科学计算库(Numpy、Scipy、matplotlib),集成经典机器学习算法的Python模块。 一、统计学习:scikit-learn中的设置与评估函数对象 (1)数据集 scikit-learn 从二维数组描述的数据中学习信息。他们可以被理解成多维观测数据的列表。如(n,m),n表示样例轴,y表示特征轴。 使用scikit-learn装载一个简单的样例:iris数据集 >>from sklearn import datasets >>iris =
机器学习AI算法工程
2018/03/14
1.6K0
数据处理的统计学习(scikit-learn教程)
机器学习(二十)贪心学院ML训练营学习1 -KNN算法
K-邻近算法采用测量不同特征值之间的距离方法进行分类,工作原理是:存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,意思是我们知道样本集中的每一个数据与所属分类的对应关系。输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据的分类标签。选择k个最相似数据中出现次数最多的分类,作为新数据的分类。
致Great
2019/07/04
1.2K0
机器学习(二十)贪心学院ML训练营学习1 -KNN算法
快速入门Python机器学习(四)
同样在第一个表达式中k1…kn-1叫做斜率,b叫做截距(即x1= x2=…=xn-1=0的时候,直线与y轴的交叉点)
顾翔
2022/05/22
3690
快速入门Python机器学习(四)
机器学习 | 决策树模型(二)实例
上面文章《决策树模型(一)理论》中,已详细介绍了决策树原理,包括决策树生长原理,决策树的特征选择原理,决策树剪枝策略以及决策树处理缺失值原理等等。如果您还没有阅读,可点击跳转,或关注公众号<数据STUDIO>获取文章详情。
数据STUDIO
2021/06/24
1.1K0
认真聊AI | 机器学习
然而,到底什么是机器学习,时至今日也很难给出一个确切的、公认的定义。不过好在这个词本身的字面意思就是一个还算不错的概念:让机器能够像人一样具有学习能力。
做数据的二号姬
2025/03/13
1760
认真聊AI | 机器学习
相关推荐
sklearn中的nearest neighbor
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验