第三章 SpringCloud 使用Erueak服务注册中心

Spring Cloud - Eureka原理、注册、搭建、应用(全过程详解) 上一章我们讲到,利用 RestTemplate 发送 http 请求时,将 url 写成了 "http://localhost:8081/user/" + order.getUserId() ,这无疑将 url 写死了,?这只是其中一个背景,总的来讲,有以下三种原因:服务消费者该如何获取服务提供者的?如果有多个服务提供者,消费者该?消费者如何得知服务提供者的? 阅读详情
本章节完整源代码地址:https://github.com/kwang2003/springcloud-study-ch03.git
1.先前架构的问题及改进
通过前两章的学习,我们已经掌握了通过SpringCloud/SpringBoot来提供一个Rest服务接口,并且可以通过RestTemplate来调用服务,整个世界看起来非常清洁:

但是这个架构是非常脆弱的,在生产环境下,我们的message服务不可能只部署一份,因为这样意味着该节点一旦出现问题或宕机,client端就没法使用了,同时服务节点多了就意味着能应对更大的客户端访问流量,于是我们的架构可能升级到下面的样子:
我们会考虑中间建一层nginx作为负载均衡代理,客户端只对nginx接口进行访问,由nginx通过路由规则将请求分发到下游的各个节点上的服务

通过如上的改造,我们的服务节点单点故障解决了,访问压力也能通过nginx分发到各个节点上执行了,是否这样就完美了呢?如果你仔细看的话,会发现,其实nginx还是存在单点故障,也就是说,一旦nginx当即故障,client端的调用就全完了---即便这个时候所有的message服务都可用,于是,我们的架构不得不再次升级,来解决nginx的单点故障问题,于是架构可能升级到了如下版本:

这个架构看起来比较完美了吧,nginx和message服务的单点故障都解决了,但是忽然有一天,我们的系统访问压力增加了,需要快速的部署一些新的message节点上来,当一段时间以后,当访问压力下来的时候我们又得对这些节点资源进行回收---如电商的双11节点,这个时候运维工程师不得不去nginx服务器上去逐一设置新增节点的ip和端口增加上去,然后重新加载nginx,当节日过后,他们又不得不逐一对已经增加过的节点进行下架,重启nginx---说了半天什么意思呢,这架构对于运维节点并不是非常友好,当节点发生变化的时候,必须有人为介入进行处理,一旦有手工处理的地方就意味着有出错的可能性,服务节点数量少的时候没问题,当服务节点成千上万,经常变化的时候呢?计算机程序能自动处理的事情就不要让人去处理,因为计算机比人要严谨的多,于是引入了这一章节的主角-Eureka

采用了Eureak的架构和nginx的架构非常类似,但是eureak的先进性在于当有服务节点的增删时,并不需要人为手动干预,而是服务启动时自动将服务节点信息注册到Eureka注册中心来,而当服务节点宕机故障时,Eureka自动将故障节点排除,客户端通过服务ID来调用注册中心中的服务,让后通过一定的负载均衡算法(轮询、权重、绑定。。)找到一个活动状态的服务节点进行通信。同时Erueka多个节点之间可以组成一个集群,集群中的Eureak之间保持数据的同步,因此只要Eureka集群中有一个节点存活,真个集群就处于可用状态
2.启动Eureka服务器
a)新建一个工程,并添加eureka相关的依赖
设置parent
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.8.RELEASE</version>
</parent>
加入springcloud的声明
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
引入eureka server依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
完整的项目依赖如下

b)main函数中启用Erueka的注解
package com.pachiraframework.springcloud.eureka;

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

@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
c)修改下端口8081以及eureka自身的信息

d)启动main函数

e)访问
http://localhost:8081访问注册中心

3.将message服务注册到注册中心
a)工程结构重构
通过对上一节中的message服务进行稍微的改造,就可以将其注册到注册中心里来了
为了对每个章节中的代码能够保持独立,每个章节都设置了一个端独的git工程,因为这个章节用到了上一章的代码进行改造,如果不加以独立,我们回头来翻阅代码的时候就很难找到先前的代码了。如图所示,我们通过maven的多模块机制将第一章的message作为本章的一个子模块引入进来,代码完全一样,另一个模块是刚新增的eureka模块,通过这种联系把2个组件绑定在一个工程结构中。

b)引入eureka依赖
增加eureka的客户端依赖
引入springcloud声明
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
引入eureka客户端
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
如图所示:

c)添加Eureka注解
在MessageApplication上添加@EnableDiscoveryClient注解

d)message服务中设置注册中心地址
打开message服务项目中的application.properties文件,设置一下服务的名称和注册中心地址,注意为每一个微服务设置一个有意义的,唯一的名称是非常必要的
spring.application.name=message-service
eureka.client.serviceUrl.defaultZone= http://127.0.0.1:8081/eureka/
e)启动message模块里的main函数MessageApplication.main
从日志可以看到,message服务已经注册到eureka中了

f)通过eureka控制台查看已经注册的服务
可以看到我们在步骤d)中设置的微服务名称已经出现在了服务列表中了

4.基于注册中心调用服务
在上个章节中,我们提供了2中方式进行Rest接口的调用,为了更加真实的模拟真实项目,我们在这个章节中对服务调用者进行了分离,单独成一个user-service,user-service中有一个用户注册的功能,当用户注册时,需要给用户发送短信验证码,从而调用message服务中的短信接口,用来模拟真实项目中用户相关的微服务,于是,整个测试项目的架构就变成了如下

a)创建springcloud-user工程并添加依赖

b)增加配置项application.properties
设置唯一服务名称,修改占用端口以及eureka的地址

c)编写项目启动函数UserApplication
package com.pachiraframework.springcloud.user;

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

@EnableDiscoveryClient
@SpringBootApplication
public class UserApplication {
public static void main(String[] args) {
SpringApplication.run(UserApplication.class, args);
}
}
d)配置RestTemplate
SpringCloud给提供了一个@LoadBalanced注解,和RestTemplate一起使用就可以从注册中心中以负载均衡的方式调用服务
package com.pachiraframework.springcloud.user.config;

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 WebConfig {
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
e)编写UserController
注意这个类中高亮的部分,通过@Autowired标签注入上个步骤设置的@RestTemplate,另外调用的时候写的不是具体的服务ip和端口,而是我们在application.properties文件中设置的服务的名称!,通过@Loadbalanced和RestTemplate搭配,SpringCloud会在生成RestTemplate这个Bean的时候,加入一些拦截器,而在拦截器中会对服务ID进行替换,具体参考源代码中的LoadBalancerInterceptor类

package com.pachiraframework.springcloud.user.controller;

import java.util.Random;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import lombok.Data;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@RestController
@RequestMapping("/user/")
public class UserController {
@Autowired
private RestTemplate restTemplate;
@RequestMapping(value= {"regist/sms"})
public ResponseEntity<SmsSendResponse> sms(String mobile){
Random random = new Random();
int next = random.nextInt(10000000);
String code = ""+(10000000-next);
ResponseEntity<SmsSendResponse> response = doSend(mobile, code);
return response;
}
public ResponseEntity<SmsSendResponse> doSend(String mobile,String code) {
final String sendUrl = "http:// message-service/message/sms/send";
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
MultiValueMap<String, String> map= new LinkedMultiValueMap<String, String>();
map.add("mobile", mobile);
map.add("templateId", "CHECK_CODE");
map.add("params['code']", code);
log.info("发送参数:{}",map);

HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(map, headers);
ResponseEntity<SmsSendResponse> response = restTemplate.postForEntity(sendUrl, request, SmsSendResponse.class);
return response;
}
@Data
public static class SmsSendResponse {
/**
* 返回消息
*/
private String message;
/**
* 返回状态码
*/
private String code;
}
}
f)启动UserApplication.main
g)访问

SpringCloud 微服务 SpringCloud 微服务框架的基础学习代码。分为三部分。EruekaServer是服务注册中心,TestService是提供服务的微服务;RibbonConsumer是采用了Ribbon负载均衡的客户端,三个程序都采用SpringBoot开发。 立即下载

相关推荐

第三章 SpringCloud 使用Erueak服务注册中心.pdf

第三章 SpringCloud 使用Erueak服务注册中心.pdf

Spring Cloud 之 Eureka

eureka 服务注册与发现,该部分内容基于spring cloud 当前最新版本 2021.0.0学习

风儿甚是喧嚣的博客 2430

OpenManus本地部署实战:从源码编译到浏览器路径优化全解析

本文详细解析了OpenManus本地部署的全过程,从源码编译到浏览器路径优化。涵盖环境准备、源码获取、模型配置、依赖安装等关键步骤,特别针对Windows系统下的chrome.exe路径修改提供了实用解决方案,帮助开发者高效完成部署并优化性能。

weixin_28826545的博客 379

SpringCloud 一、Erueka 注册中心,服务治理与服务注册与发现

一、搭建 erueka 注册中心环境 1、创建springboot 项目,springcloud-erueka 2、maven 全部依赖信息 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/...

ws - 兮的博客空间 1061

Vc出现不能连接到一个或多个 vCenter server 系统:http://vcenter-vx.utibet.edu.cn:443/sdk

问题描述: 解决办法: esxi6.7的bug 第一种通过升级系统来解决问题 第二种是通过删除数据来解决 第一步:进入到esxi的shell 第二步查看其中的服务开启状态 第二步 df -h 第三步 /opt/vmware/vpostgres/current/bin/psql -d VCDB -U postgres 第四步 SELECT nspname || '.' || relname AS "relation", pg_size_pretty(pg_total_relation_size(C.oi

m0_49328536的博客 9899

《物联网技术》课程笔记——第二章 物联网技术架构

文章目录第二章:物联网技术架构1 物联网技术体系(C3SD)2 系统体系结构的基本概念3 物联网体系结构——信息传递视角3.1物联网感知层3.1.1 感知层要解决的问题3.1.2 感知层的形态3.1.3 节点的感知能力与控制能力3.1.4 感知层实例3.2 物联网网络层3.2.1 网络相关概念3.2.2 IPV6与IPV4相比互联网协议的升级3.2.3 计算机网络的逻辑层次3.2.4 传输网的拓扑结构3.2.4.1 举例:智能小区的三表采集系统3.2.4.2 接入层3.2.4.2 汇聚层3.2.4.2 核心

南京大学软件工程硕士在读 2503

Spring Cloud:Eureka

Eureka是Spring Cloud里面的一个组件,名为注册中心,分为Eureka Server与Eureka Client。Spring Cloud 微服务框架下有众多服务,各个服务都是独立部署运行的,需要一个统一的中心管理并注册各个服务,保存服务的metadata(ip地址,服务名等等),这时Eureka 便诞生出来了。(1)Eureka Server服务端Eureka服务端用作服务注册中心(注册服务)。支持集群部署。

浩泽学编程的博客 2341

StarUML最新版汉化与破解二合一教程:5分钟搞定永久使用

本文提供StarUML最新版的高效使用指南,涵盖从安装到深度定制的全流程优化方案。包括软件获取最佳实践、界面个性化设置、核心建模技巧、团队协作策略及性能优化建议,帮助架构师和开发团队提升UML建模效率。特别推荐版本控制集成和文档自动化输出方案,适用于各类规模的项目开发。

weixin_42530732的博客 450

(二) SpringCloud 使用Erueak服务注册中心 - Spring Cloud复习笔记

1、核心技术选型:   Maven:3.3.9  JDK: 1.8.0_144  spring-boot-starter-parent: 2.0.3.RELEASE  spring-cloud-dependencies: Finchley.RELEASE 1、项目创建:   2-1、新建Spring Boot项目   2-2、填写包名和其他资料      2...

weixin_30443895的博客 248

让 OData V4 界面更聪明:SAP UI5 中的 Side Effects 全解析

摘要:在OData V4应用中,字段修改常触发联动更新(Side Effects)。SAP UI5支持通过后端PATCH响应隐式返回或前端显式请求(requestSideEffects)两种方式处理。最佳实践包括:在validateFieldGroup事件中触发同批次请求,使用$$patchWithoutSideEffects避免重复刷新,并在草稿场景优化响应体。注解定义触发规则,而前端负责执行时机,二者配合可减少网络开销并保证数据一致性。Fiori elements进一步扩展了Side Effects在批

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 177

[Dify实战] 品牌舆情速览:多渠道抓取、聚类情绪、生成日报-带绑定资源

摘要: 品牌舆情监测面临多渠道信息分散、手工处理效率低的痛点。Dify舆情速览助手通过自动化流程(数据抓取→情绪聚类→日报生成)帮助快速识别热点与风险。方案核心包括: 结构化处理:按情绪(正/中/负)聚类,分级标注风险事件; 日报输出:含热点摘要、趋势分析及处置建议(动作+团队+时间窗口); 质量控制:数据去噪、黑名单过滤,结合人工复核确保合规性。 落地需明确数据源分级(如权威媒体优先)、设置情绪阈值,并建立"发现-响应-复盘"闭环机制,提升舆情应对效率。 (字数:150)

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 297

第四章 SpringCloud使用Eureka集群

本章节完整源代码地址:https://github.com/kwang2003/springcloud-study-ch04.git 1.项目概要 本章内容是基于上个章节内容第三章 SpringCloud 使用Erueak服务注册中心 在此基础上增加了注册中心集群的功能。 在生产环境下,保证整个架构的各个环节都没有单点故障是一个基本要求,而注册中心承载着服务注册和服务端负载均衡的

无证程序员 3293

5GS 协议栈 — PFCP 协议 — URR 用量上报规则

目录 文章目录目录URR 用量上报规则UEE 的参数Usage Report 的参数示例 URR 用量上报规则 29244 5.2.2 Usage Reporting Rule URR 的作用? 用来告诉 UPF 如何对 PDR 识别的 SDF 或 Application 业务进行使用量统计信息的上报。CP 收到 Report Information 后,可用于计费或者管控(e.g. 超量限速)等用途。 URR 在哪个流程里下发的? N4 会话建立流程。 N4 会话修改流程。 URR 是怎么工作

烟云的计算 4588

SpringCloud入门之配置中心Config的使用

一般情况下,我们开发的程序都会把配置文件放到Resources文件夹下供程序读取,虽然这种方式用起来简单方便,开发的应用程序越来越多,维护起来难度肯能就会越来越大。相同的配置要改好几个应用,有时还可能会改不全或者直接就改错了。所以我们可以使用Springcloud提供的Config中心来集中管理配置文件,有修改或者变动的时候,直接改配置中心管理的文件就可以了。虽然现在有非常强大的Nacos或者其他的什么工具,但有时候用Spring Cloud的配置中心也没啥毛病啊,是不是~

凡许真的博客 600

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

springcloud 实现原理

服务注册发现 1. 所有的实例 注册至服务注册中心(Erueak),由Erueak管理所有注册的实例。 2. Erueak会每隔一段时间 发起心跳检测,检测所有注册的实例是否还处于运行状态,以及运行情况(压力情况之类)。根据不同的压力情况对所有的实例分配权重等级 网关服务器Zuul 1. 请求发送至网关服务器,网关服务器根据配置信息,在注册服务中心找到要转发的地址。(在此实现负载均衡。由于服务注册...

lzq199528的博客 532

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

企业分布式微服务云SpringCloud SpringBoot mybatis (十)高可用的服务注册中心

文章 史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka) 介绍了服务注册与发现,其中服务注册中心Eureka Server,是一个实例,当成千上万个服务向它注册的时候,它的负载是非常高的,这在生产环境上是不太合适的,这篇文章主要介绍怎么将Eureka Server集群化。 一、准备工作 Eureka can be made even more res...

weixin_34232363的博客 77

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Spring Cloud入门-Eureka服务注册与发现(Hoxton版本)

文章目录什么是Spring Cloud摘要Eureka简介搭建Eureka注册中心创建父工程springcloud-learning创建Eureka服务端模块使用IDEA的Run Dashboard来运行SpringCloud应用搭建Eureka客户端搭建Eureka注册中心集群搭建两个注册中心运行Eureka注册中心集群给Eureka注册中心添加认证创建一个eureka-security-ser...

ThinkWon的博客 3万+

微服务架构(2)——注册中心

目录: 1、为什么需要注册中心 2、注册中心技术组件选型 3、注册中心搭建 4、注册中心原理 为什么需要注册中心 将一个项目拆分成多个服务之后,服务之间就可能会相互进行调用通讯,来完成一个完整的功能。如果A服务要调用B服务,那么A服务是如何知道B服务的地址和端口的呢?总不能在配置文件里面写死吧。这样的话要是B服务增加一个实例,那不是就要去修改这个配置。或是B服务有个实例挂掉了,由于配置文件没有修改,A服务还一直在调用这个挂掉的实例。所以这就需要配置中心了。所有服务启动后都会把地址和端口等相关的信息注册到注册

tack_back的博客 528

Eureak 开启 HTTPS

文章目录

大漠知秋的加油站 606

spring cloud 注册中心配置大全

一、erueka 客户端配置1、Eureka 启禁用eureka.client.enabled=true2、Eureka 连接超时时间eureka.client.eureka-server-connect-timeout-seconds=5eureka.client.eureka-connection-idle-timeout-seconds=303、Eureka Server等待超时时间eure...

JAVA圈的博客 5668

springboot无法引入@enableeurekaserver

最近再添加eureka依赖时 总是无法成功引入 导致程序@enableeurekaserver报错 最终找到原因是springboot与springcloud的支持版本不一致 修改pom.xml &lt;dependencies&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework.cloud&lt;/gr...

ALsoAm 2万+

搭建Erueka注册中心

1、创建maven项目eureka-server pom文件 &lt;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 htt...

飞飞好奇的专栏 794

Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十八):注册中心(Spring Cloud Consul)...

什么是 Consul Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其它分布式服务注册与发现的方案,Consul 的方案更“一站式”,内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心方案,不再需要依赖其它工具(比如 ZooKeeper 等)。使用起来也较为简单。Consul 使用 Go 语言编写,因此具...

朝雨忆轻尘 435

Spring Cloud Eureka详解

Spring Cloud Eureka详解 一 Eureka服务治理体系 1.1 服务治理 服务治理是微服务架构中最为核心和基础的模块,它主要用来实现各个微服务实例的自动化注册和发现。 Spring Cloud Eureka是Spring Cloud Netflix微服务套件中的一部分,它基于Netflix Eureka做了二次封装。主要负责完成微服务架构中的服务治理功能。 E...

sunhuiliang85的专栏 14万+

SpringCloud之Eureka使用篇

1.单例Eureka Server 1.1 环境准备 1.首先我这里有spring-cloud-parent pom工程 2.spring-cloud-eureka-server Eureka Server 子工程 这里端口我们使用90开头 3.spring-cloud-order-service-consumer 订单调用服务 (也就是咱们的服务消费者)这里端口我们使用80 开头 4.spring-cloud-order-service-provider 订单提供服务 (服务提供者) 这里端口我们使

猿上生活 2万+
上一篇: 第二章 使用SpringCloud框架实现一个微服务
下一篇: 第四章 SpringCloud使用Eureka集群
CrazyCoder2010
博客等级 码龄16年 298粉丝 110原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值