二、Spring Cloud之注册中心 Eureka

本文详细介绍了如何使用SpringCloudEureka实现服务的注册与发现,包括配置客户端与服务中心的交互、创建服务提供者和消费者示例,以及如何扩展到集群模式以提高系统的高可用性。
摘要由CSDN通过智能技术生成

eureka.client.register-with-eureka=true

表示是否从Eureka Server获取注册信息,默认为true。

eureka.client.fetch-registry=true

#设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址。多个地址可使用 , 分隔。

eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/

现在我们就可以启动项目看看

在这里插入图片描述

可以看到我们将自身注册到了服务中。

Eureka 客户端


前面说了,服务提供者和服务消费者都是客户端,其实就是我们具体的某一业务的项目。所以我们再创建一个子模块。我这里分开吧,我们分别创建服务提供者和服务消费者。

服务提供者

我们创建一个eureka-client-provider的子模块,pom 文件中引入spring-cloud-starter-netflix-eureka-client。

cn.quellanan

SpringCloud

1.0.0

groupId>com.quellanan.springcloud

eureka-client-provider

1.0.0

eureka-client-provider

eureka-client-provider 服务提供者

org.springframework.boot

spring-boot-starter-web

org.springframework.cloud

spring-cloud-starter-netflix-eureka-client

启动类中加入@EnableEurekaClient注解或者@EnableDiscoveryClient注解都可以。

@SpringBootApplication

@EnableDiscoveryClient

public class EurekaClientProviderApplication {

public static void main(String[] args) {

SpringApplication.run(EurekaClientProviderApplication.class, args);

}

}

application.properties 中增加如下配置

server.port=9000

#服务名,在注册时所用

spring.application.name=eureka-client-provider

eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/

这里指定的eureka的服务中心的地址为8000。如上配置就可以将服务注册到注册中心啦。

我们在写一个测试接口。

创建一个IndexController 类,内容如下:

@RestController

public class HelloController {

@RequestMapping(“/hello”)

public String hello(){

return "hello world ";

}

}

服务消费者

我们一样的创建一个 eureka-client-consumer的模块。pom文件如下:

cn.quellanan

SpringCloud

1.0.0

com.quellanan.springcloud

eureka-client-consumer

1.0.0

eureka-client-consumer

eureka-client-consumer 服务消费者

org.springframework.boot

spring-boot-starter-web

org.springframework.cloud

spring-cloud-starter-netflix-eureka-client

org.springframework.cloud

spring-cloud-starter-openfeign

相对于服务提供者,我们增加了Feign 依赖,主要用来发现服务和实现客户端负载均衡,我们这里用来发现服务就可以了。

在启动类中@EnableDiscoveryClient 用来发现服务,并注入RestTemplate 的实例bean 用来对服务提供的接口进行调用。@LoadBalanced 是开启客户端负载均衡的,最开始我没有加这个注解,但是发现不加的话,服务消费者就不能通过服务名来获取可用的服务提供者的实例。所以这里大家可以试验一下。

@EnableDiscoveryClient

@SpringBootApplication

public class EurekaClientConsumerApplication {

@Bean

@LoadBalanced

public RestTemplate restTemplate(){

return new RestTemplate();

}

public static void main(String[] args) {

SpringApplication.run(EurekaClientConsumerApplication.class, args);

}

}

我们接下写一个接口,调用服务消费者,我们创建一个IndexController,内容如下:

@RestController

public class IndexController {

private static final String applicationName = “eureka-client-provider”;

@Autowired

private RestTemplate restTemplate;

@RequestMapping(“/index”)

public String getHello(){

String url = “http://”+ applicationName +“/hello”;

return restTemplate.getForObject(url,String.class);

}

}

这里我们可以看到applicationName 就是服务提供者的服务名。实际中,一种类型的服务可能有好几台服务器,可能物理地址和ip不一样,但是保证他们的服务名一样就可以了,这样服务消费者就可以通过服务名获取可用的列表,再通过复杂均衡策略选择其中一个实例访问。

最后我们在application中加上如下配置:

server.port=9001

#服务名,在注册时所用

spring.application.name=eureka-client-consumer

eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/

测试


现在我们启动注册中心和客户端这两个项目来看下。启动后,我们输入

http://localhost:8000

在这里插入图片描述

可以发现我们的客户端已经注册到注册中心啦。服务提供者和服务消费者都已经注册到了注册中心啦。我们再来调接口试试。我们输入如下:

http://localhost:9001/index

在这里插入图片描述

可以看到其实获取了9000服务提供者的接口。这样就实现了服务的注册和发现啦,并实现远程调用。

集群模式(高可用)

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

上面我们我们搭建的注册中心只是单机模式,只有一个Eureka 服务端,单实际应用中注册中心其实是尤为重要的,所以就需要搭建集群环境,其实Eureka 对集群模式是天然的支持的,我们搭建也非常简单。

为什么这么说呢,我们前面可以看到只要配置了eureka.client.serviceUrl.defaultZone 就就会被对应的注册中线检测到,所以我们代码完全一样,只需要将eureka.client.serviceUrl.defaultZone相互指引就可以了,就就可以简单的搭建一个高可用的环境。

下面我们来搭建一个,因为我们就一台服务器,所以就用不同的端口,其实代码完全一样的,只是配置文件中配置不一样,我们分别把三个分配置文件贴出来。

8000端口的

spring.application.name=spring-cloud-eureka-server-8000

server.port=8000

#表示是否将自己注册到Eureka Server,默认为true。

eureka.client.register-with-eureka=true

表示是否从Eureka Server获取注册信息,默认为true。

eureka.client.fetch-registry=true

#设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址。多个地址可使用 , 分隔。

eureka.client.serviceUrl.defaultZone=http://localhost:8001/eureka/,http://localhost:8002/eureka/

8001端口:

spring.application.name=spring-cloud-eureka-server-8001

server.port=8001

#表示是否将自己注册到Eureka Server,默认为true。

eureka.client.register-with-eureka=true

表示是否从Eureka Server获取注册信息,默认为true。

eureka.client.fetch-registry=true

#设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址。多个地址可使用 , 分隔。

eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/,http://localhost:8002/eureka/

8002 端口

spring.application.name=spring-cloud-eureka-server-8002

server.port=8002

#表示是否将自己注册到Eureka Server,默认为true。

eureka.client.register-with-eureka=true

表示是否从Eureka Server获取注册信息,默认为true。

eureka.client.fetch-registry=true

#设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址。多个地址可使用 , 分隔。

eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/,http://localhost:8001/eureka/

我们现在分别启动这个这三个配置文件,你们可以用profile 来指向,我这为了分明,直接创建了三个模块。启动后,我们分别访问

http://localhost:8000/

http://localhost:8001/

http://localhost:8002/

在这里插入图片描述

这里可以看到其实已经相互监控了。我们了解一下这两个配置参数。

#定义服务续约任务的调用时间间隔,默认30s

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

#定义服务失效的时间默认90s

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

我们现在再将我们的服务提供者和服务消费者注册进来,但是这里,需要修改的地方也是eureka.client.serviceUrl.defaultZone。将服务注册到集群中。

eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/,http://localhost:8001/eureka/,http://localhost:8002/eureka/

然后启动项目可,可以看到注册到了注册中心,并且可以调用服务提供者提供的接口。

在这里插入图片描述

总结

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

最后画了一张图来说明整个注册中心的架构图。

在这里插入图片描述

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

每年转战互联网行业的人很多,说白了也是冲着高薪去的,不管你是即将步入这个行业还是想转行,学习是必不可少的。作为一个Java开发,学习成了日常生活的一部分,不学习你就会被这个行业淘汰,这也是这个行业残酷的现实。

如果你对Java感兴趣,想要转行改变自己,那就要趁着机遇行动起来。或许,这份限量版的Java零基础宝典能够对你有所帮助。

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
va开发知识点,真正体系化!**

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

每年转战互联网行业的人很多,说白了也是冲着高薪去的,不管你是即将步入这个行业还是想转行,学习是必不可少的。作为一个Java开发,学习成了日常生活的一部分,不学习你就会被这个行业淘汰,这也是这个行业残酷的现实。

如果你对Java感兴趣,想要转行改变自己,那就要趁着机遇行动起来。或许,这份限量版的Java零基础宝典能够对你有所帮助。

[外链图片转存中…(img-a6KFvtrb-1711877764613)]

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

  • 12
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值