springCould中的Eureka-从小白开始【2】

news/2024/12/15 5:58:34/

目录

1.什么是Eureka ❤️❤️❤️

2. 组件❤️❤️❤️

3.单机Eureka配置❤️❤️❤️

4.服务8001服务入住eureka ❤️❤️❤️

5.消费端80入住到eureka ❤️❤️❤️

6.集群Eureka配置 ❤️❤️❤️

7.将Client发布到eureka集群上 ❤️❤️❤️

8.服务端8002集群搭建 ❤️❤️❤️

9.负载均衡 ❤️❤️❤️

10.actuator信息完善❤️❤️❤️

11.服务发现 ❤️❤️❤️


1.什么是Eureka ❤️❤️❤️

Eureka是一个开源的服务发现框架,由Netflix公司开发。它可以用于在分布式系统中,自动注册、发现和管理服务实例。Eureka通过使用RESTful API,使得服务实例可以通过名称进行查找,从而实现了服务之间的通信。Eureka还具有高可用性和故障恢复机制,可以有效地处理服务注册和发现的问题。

2. 组件❤️❤️❤️

Eureka包含两个组件:Eureka ServerEureka Client

  • Eureka Server:提供服务注册服务各个微服务节点通过配置启动后,会在EurekaServer中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观看到。
  • EurekaClient:通过注册中心进行访问是一个Java客户端,用于简化Eureka Server的交互,客户端同时也具备一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳(默认周期为30秒)。如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳, EurekaServer将会从服务注册表中把这个服务节点移除(默认90秒)

3.单机Eureka配置❤️❤️❤️

1.创建模块

在父工程下创建子模块

注:jdk版本,maven版本

2.添加pom依赖

用到通用模块,导入依赖

引入eureka服务端依赖

 <dependencies><!--springboot--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--通用配置--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!--引入自己的api--><dependency><groupId>org.example</groupId><artifactId>cloud-api-commons</artifactId><version>${project.version}</version></dependency><!--eureka服务端--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency></dependencies>

3.创建主程序类

@EnableEurekaServer:可以将一个普通的 Spring Boot 应用转变为 Eureka 服务器,用于注册和发现其他微服务实例

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

4.改yml

1.修改端口号

2.添加eureka配置

3.注意yml格式

server:port: 7001eureka:instance:#eureka服务端的实例名称hostname: localhostclient:#false:表示不向注册中心注册自己register-with-eureka: false#false:表示自己就是注册中心,维护服务,不需要检测fetch-registry: false#设置与Eureka server交互的地址查询服务和注册服务都需要依赖这个地址。service-url:defaultZone: http://${eureka.instance.hostname}:${server.port}

5.测试 

访问配置的地址+ip成功看到eureka界面

4.服务8001服务入住eureka ❤️❤️❤️

1.改pom

添加eureka客户端依赖

        <!--eureka的client--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>

2.改yml

添加入住eureka的配置信息

eureka:client:#表示将自己注册到EurekaServerregister-with-eureka: true#是否从EurekaServer抓取已有的配置,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡fetch-registry: true#注入eureka地址service-url:defaultZone: http://localhost:7001

3.改主启动类

@EnableEurekaClient:将当前应用作为Eureka客户端注册到Eureka服务器。

@SpringBootApplication
@EnableEurekaClient
public class PaymentMain8001 {public static void main(String[] args) {SpringApplication.run(PaymentMain8001.class);}
}

 4.测试

启动8001服务端口,刷新浏览器页面,就会发现服务8001注册到eureka中

5.消费端80入住到eureka ❤️❤️❤️

1.改pom

服务端,消费端,在这里都是相对于eureka而言

因此消费端80相对于eureka也是Client端

        <!--eureka的Client端--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>

2.改yml

1.配置服务名称

2.配置入住到eureka的信息

spring:application:name: cloud-consumer-order
eureka:client:register-with-eureka: truefetch-registry: trueservice-url:defaultZone: http://localhost:7001/eureka

3.改主启动类

添加@EnableEurekaClient:入住到eureka

@SpringBootApplication
@EnableEurekaClient
public class OrderMain80 {public static void main(String[] args) {SpringApplication.run(OrderMain80.class);}
}

4.测试

启动80服务端口,刷新浏览器页面,就会发现服务80注册到eureka中

 

6.集群Eureka配置 ❤️❤️❤️

1.创建模块

雷同7001模块,在创建模块7002,7003

注意:jdk版本,maven版本

2.添加pom依赖

7001,7002,7003都是服务端,所以依赖相同

<dependencies><!--springboot--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--通用配置--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!--引入自己的api--><dependency><groupId>org.example</groupId><artifactId>cloud-api-commons</artifactId><version>${project.version}</version></dependency><!--eureka服务端--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency></dependencies>

3.修改映射文件

只有一台机器,创建三个域名指向同一个ip模拟三台机器

地址:C:\Windows\System32\drivers\etc下面的hosts

4.修改yml文件

以7001为例

1.添加hostname(hosts里配置的)

2.service-url 在另外两个eureka注入自己

注意:中间用逗号隔开,不要用空格

server:port: 7001eureka:instance:#eureka服务端的实例名称hostname: eureka7001.comclient:#false:表示不向注册中心注册自己register-with-eureka: false#false:表示自己就是注册中心,维护服务,不需要检测fetch-registry: false#设置与Eureka server交互的地址查询服务和注册服务都需要依赖这个地址。service-url:defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/

5.添加主启动类

 注意添加@EnableEureServer

@SpringBootApplication
@EnableEurekaServer//代表eureka服务端注册中心
public class EurekaMain7001 {public static void main(String[] args) {SpringApplication.run(EurekaMain7001.class);}
}

6.测试

分别启动三台eureka,并浏览器访问 

7.将Client发布到eureka集群上❤️❤️❤️ 

7.1.将8001发布到eureka集群上 

只需要在yml文件中,将其eureka的注册地址更改为多个即可

注:地址之间用逗号隔开,之间不能有空格

eureka:client:#表示将自己注册到EurekaServerregister-with-eureka: true#是否从EurekaServer抓取已有的配置,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡fetch-registry: true#注入eureka地址service-url:defaultZone: http://erureka7001:7001/eureka,http://erureka7002:7002/eureka,http://erureka7003:7003/eureka

7.2.将80发布到eureka集群上 

server:port: 80spring:application:name: cloud-consumer-order
eureka:client:register-with-eureka: truefetch-registry: trueservice-url:defaultZone: http://erureka7001:7001/eureka,http://erureka7002:7002/eureka,http://erureka7003:7003/eureka

7.3使用@value标识服务端口 

在controller层使用@value标识端口号

@RestController
@RequestMapping("/payment")
@Slf4j
public class PaymentController {@Autowiredprivate PaymentService paymentService;@Value("${server.port}")private String serverPort;}

7.4测试

启动eureka集群后,先启动8001(服务端相对于80)在启动80,刷新浏览器

可以看到:每台机器上都部署有其他eureka的信息,并且都有8001和80的注册信息

8.服务端8002集群搭建 ❤️❤️❤️

1.创建模块

创建和8001模块一样的模块,注意(如果拷贝的话很肯定识别错误)

2.添加pom依赖

添加和8001一样的pom依赖

3.修改yml文件

修改端口号8002,其余和8001一模一样

4.添加主起动类

@SpringBootApplication
@EnableEurekaClient
public class PaymentMain8002 {public static void main(String[] args) {SpringApplication.run(PaymentMain8002.class);}
}

5.测试

启动eureka集群后分别启动8001,8002;刷新浏览器可以发现一个应用程序有两个服务

9.负载均衡 ❤️❤️❤️

启动eureka集群后,在启动8001,8002服务端,最后启动80消费端。

但是80只能访问8001,因为我们在使用RestTemplate时,固定了访问地址

 public static final String PAYMENT_URL = "http://localhost:8001";
  •  使用负载均衡时,我们只告诉他访问的名称即可
public static final String PAYMENT_URL = "http://COULD-PAYMENT-SERIVCE";
  • 给RestTemplate赋予负载均衡的能力使用@LoadBalanced
@Configuration
public class ApplicationContextConfig {@Bean@LoadBalanced//赋予了RestTemplate负载均衡的能力public RestTemplate getRestTemplate() {return new RestTemplate();}
}

10.actuator信息完善❤️❤️❤️

如何修改IP地址 ,并显示IP端口

修改yml 

添加instance-id修改服务名称,prefer-ip-address:true:访问路径可显示ip 

eureka:client:#表示将自己注册到EurekaServerregister-with-eureka: true#是否从EurekaServer抓取已有的配置,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡fetch-registry: true#注入eureka地址service-url:defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka#修改服务名称    instance:instance-id: paymnet8002

11.服务发现 ❤️❤️❤️

对于注册进eureka里面的微服务,可以通过服务发现来获得该服务的信息

1.在controller添加DiscoveryClient

装配DiscoveryClient对象

注意:import org.springframework.cloud.client.discovery.DiscoveryClient;

@Autowiredprivate DiscoveryClient discoveryClient;

2.编写代码

   @GetMapping("/discovery")public Object discovery() {List<String> services = discoveryClient.getServices();for (String element : services) {log.info("列表中有:" + element);}List<ServiceInstance> instances = discoveryClient.getInstances("COULD-PAYMENT-SERVICE");for (ServiceInstance instance : instances) {log.info(instance.getServiceId() + "\t" + instance.getHost() + "\t" + instance.getPort() + "\t" + instance.getUri());}return this.discoveryClient;}

3.在主启动类添加@EnableDiscoveryClient

@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
public class OrderMain80 {public static void main(String[] args) {SpringApplication.run(OrderMain80.class);}
}

 


http://www.ppmy.cn/news/1275603.html

相关文章

WPF仿网易云搭建笔记(7):HandyControl重构

文章目录 专栏和Gitee仓库前言相关文章 新建项目项目环境项目结构 代码结果结尾 专栏和Gitee仓库 WPF仿网易云 Gitee仓库 WPF仿网易云 CSDN博客专栏 前言 最近我发现Material Design UI的功能比较简单&#xff0c;想实现一些比较简单的功能&#xff0c;比如消息提示&#xff0…

netty-daxin-3(rpc远程调用)

文章目录 nettyRpcObjectEncoder 与 ObjectDecoderjdk动态代理回顾Rpc调用过程简析服务端客户端 nettyRpc ObjectEncoder 与 ObjectDecoder ObjectEncoder继承自MessageToByteEncoder<Serializable>&#xff0c;它内部使用ByteBufOutputStream包装ByteBuf对象&#xff…

【Image】图像处理

计算机视觉 CV Perception 如自动驾驶领域。 只要是从所谓的图像当中去抽取信息的过程&#xff0c;我们都叫做Perception。 视觉检测可以涵盖二维检测&#xff0c;如车辆、人和信号灯的检测。另外&#xff0c;还可以控制三维信息&#xff0c;直接在三维空间中操作数据。 SL…

spring MVC概述和土门案例(无配置文件开发)

SpringMVC 1&#xff0c;SpringMVC概述2&#xff0c;SpringMVC入门案例2.1 需求分析2.2 案例制作步骤1:创建Maven项目步骤2:补全目录结构步骤3:导入jar包步骤4:创建配置类步骤5:创建Controller类步骤6:使用配置类替换web.xml步骤7:配置Tomcat环境步骤8:启动运行项目步骤9:浏览器…

<软考>软件设计师-5计算机网络(总结)

1 网络功能和分类 1-1计算机网络的功能 计算机网络是计算机技术与通信技术相结合的产物&#xff0c;它实现了远程通信、远程信息处理和资源共享。计算机网络的功能:数据通信、资源共享、负载均衡、高可靠性。 1-2计算机网络按分布范围划分 1-3网络的拓扑结构 总线型&#xff0…

【中等】73. 矩阵置零

题目 73. 矩阵置零 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a;[[1,0,1],[0,0,0],[1,0,1]] 示例 2…

云原生系列2-GitLab和Jenkins

1、GitLab类似github&#xff0c;是个私有仓库 1、GitLab安装&#xff0c;至少8G内存4核cpu # 查找Gitlab镜像 docker search gitlab/gitlab-ce # gitlab镜像拉取 docker pull gitlab/gitlab-ce # 查看镜像 docker images # 本机先建3个目录&#xff0c;为了gitlab容器通过挂…

SpringCloudGateway 3.1.4版本 Netty内存泄漏问题解决

一、 产生的异常 当时是服务器访问不到服务了&#xff0c;上去一看&#xff0c;无法申请资源OutOfDirectMemoryError了&#xff0c;内存级别的东西让人一阵头大&#xff0c;赶紧在线下模拟&#xff0c; 1. 减少分配的堆外内存&#xff0c;打开Netty的监测工具等有助于复现的…