返回顶部
首页 > 资讯 > 后端开发 > Python >如何用Eureka + Feign搭建分布式微服务
  • 426
分享到

如何用Eureka + Feign搭建分布式微服务

2024-04-02 19:04:59 426人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录EurekaFeign创建父项目注册中心主要依赖配置文件主类服务提供者主要依赖配置文件主类及Controller客户端主要依赖配置文件主类、Controller及Feign映射E

Eureka

Eureka主要解决了消费者对服务的记忆问题。如果没有Eureka,那么消费者必须记忆每个服务的地址,且一旦服务提供者宕机或地址发生变更,很可能不会收到通知,导致地址失效。加入Eureka后,只需记住Eureka注册中心的地址就能够找到其它所有服务。

此外,Eureka能够接受多个服务的注册,还能够通过其它组件的加持直接替代消费者进行负载均衡,使消费者无需手动选择服务。

Feign

Feign是一个模板化的Http客户端。通过Feign,可以做到像调用一个本地方法一样请求远程服务,无需编写繁杂的代码来创建HTTP请求。

创建父项目

项目主要分为三个微服务:服务提供者、服务消费者、Eureka注册中心。为了方便演示,三个项目都在同一个主机上运行,且都放在一个父项目里。

首先在idea中创建一个空项目,然后分别在项目中新建对应的三个spring模块:

  • EurekaServer: 注册中心,依赖为Eureka Server。
  • ServiceProvider: 服务提供者,依赖为Eureka Discovery Client, Spring WEB
  • ServiceConsumer: 服务消费者,依赖为OpenFeign, Eureka Discovery Client, Spring Web。

注册中心

服务提供者通过向注册中心注册,提供它们的地址供调用;服务消费者向注册中心请求来获取可用的服务。

主要依赖


        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

配置文件


# 端口
server.port=1000
# 指定应用名称
spring.application.name=server
# 是否拉取其它服务器的注册信息
eureka.client.fetch-reGIStry=false
# 是否向其它服务器注册
eureka.client.register-with-eureka=false
# 指定服务url
eureka.client.service-url.defaultZone=http://localhost:1000/eureka

默认情况下,Eureka服务器假定自己是集群的一部分,会定期向其它Eureka服务器注册自己,并获取其它服务器的注册信息。由于本项目仅部署一个Eureka服务器提供注册服务,所以不需要这两个动作,通过配置文件的eureka.client.fetch-registry和eureka.client.register-with-eureka两个属性禁用。

eureka.client.service-url包含了每个zone的名称和地址。defaultZone是一个特殊的key,如果客户端没有指定所需的zone,就会使用这个默认的zone。一般情况下defaultZone的地址就是Eureka服务器本身。

主类


@SpringBootApplication
@EnableEurekaServer
public class MyEurekaServerApplication {

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

要启动Eureka注册服务,在原生的Spring Boot启动类上注解@EnableEurekaServer即可。

项目启动后,访问localhost:1000就能看到Eureka提供的界面了。如果在界面上看到警告

EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.

是正常现象。Eureka服务器默认开启了自我保护模式。由于没有收到集群中大部分服务器的心跳(本项目中就一个Eureka服务器,所以该服务器不会收到任何心跳,自我保护模式也没有多少影响),Eureka假定出现了网络问题,开启自我保护模式。在自我保护模式下,已经注册的服务不会因为没有收到心跳而被注销。

如果要关闭自我保护,可以在配置中设置如下属性。


eureka.server.enable-self-preservation=false

服务提供者

服务提供者将自己注册到注册中心。

主要依赖


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

spring-cloud-starter-netflix-eureka-client依赖包含了Eureka客户端(即服务提供者)的实现;spring-boot-starter-web用于将服务暴露为HTTP端点。

配置文件


# 应用端口
server.port=2000
# 应用名称
spring.application.name=service
# 注册中心地址
eureka.client.service-url.defaultZone=http://localhost:1000/eureka

eureka.client.service-url.defaultZone属性告诉Eureka客户端从哪里找到注册中心。

主类及Controller


@SpringBootApplication
public class MyEurekaServiceApplication {

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

}

@RestController
@RequestMapping("/test")
@Slf4j
class MyController {
    @Value("${server.port}")
    private int serverPort;

    @GetMapping
    public String getHandler() {
        log.info("##############received call, port: " + this.serverPort);
        return "test msg";
    }
}

为了展示方便,这些类都写在同一个文件中,下同。

这里的Controller提供了一个简单的服务:只要访问/test路径,就返回一个字符串test msg。如果有需要,可以同时启动多个服务实例,模拟服务器集群提供服务的情况。

@Slf4j是lombok提供的辅助注解,用于在类中方便地声明一个Logger实例log。

@Value是Spring提供的注解,用于获取配置文件中的信息。本例中就获取了之前配置的属性server.port=2000的值2000,注入到域serverPort中。

启动服务提供者后,会自动向配置文件中指定的Eureka服务器进行注册。此时访问之前的Eureka服务器界面,能够看到已经注册的服务信息。这里我分别修改端口号启动了3个实例。

此时访问服务提供者所在端口的/test路径就能够收到服务提供的字符串。

客户端

Feign是一个模板化的HTTP客户端。通过Feign,可以做到像调用一个本地方法一样请求远程服务,无需编写繁杂的代码来创建HTTP请求。

客户端通过Feign的加持,可以方便地发出请求,也可以加入Hystrix的负载均衡、熔断降级等功能。

主要依赖


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

配置文件


# 应用端口
server.port=3000
# 应用名称
spring.application.name=feignClient
# 注册中心地址
eureka.client.service-url.defaultZone=http://localhost:1000/eureka

同上,eureka.client.service-url.defaultZone属性指定了客户端应该到哪个地址寻找注册中心。

主类、Controller及Feign映射


@FeignClient(value = "service")
interface FeignController {
    @GetMapping("/test")
    public String getHandler();
}

@SpringBootApplication
@EnableFeignClients
@EnableDiscoveryClient
public class MyFeignClientApplication {

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

}

@RestController
@RequestMapping("/test")
class MyRestController {
    @Autowired
    FeignController feignController;

    @GetMapping
    public String getHandler() {
        return feignController.getHandler();
    }
}

类中的接口FeignController将发往该端口的HTTP请求映射为向服务的请求。本例中,@FeignClient(value = "service")指定了将调用映射为向service服务的请求。而用@GetMapping("/test")则代表每当调用该方法,就向/test路径请求。综上,每当调用该方法,该服务就会向名为service的服务的/test路径发送HTTP GET请求。这就是Feign的方便之处。

在启动类上需要注解@EnableFeignClients和@EnableDiscoveryClient,启动对Feign接口的扫描和对Eureka服务器的发现。

类中还写了一个MyRestController,用于将对该服务的请求映射到方法调用。调用链为:

  • 浏览器向Controller发送HTTP请求
  • Controller收到请求后调用Feign接口中的方法
  • Feign将对方法的调用映射为对注册中心中服务的请求并返回

这样一来,用户体验到的过程就是:通过Feign发送了一个请求,然后收到了远程服务器上的信息。

启动客户端,访问客户端所在端口的/test路径,正确收到了服务提供的字符串。

--结束END--

本文标题: 如何用Eureka + Feign搭建分布式微服务

本文链接: https://lsjlt.com/news/128584.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何用Eureka + Feign搭建分布式微服务
    目录EurekaFeign创建父项目注册中心主要依赖配置文件主类服务提供者主要依赖配置文件主类及Controller客户端主要依赖配置文件主类、Controller及Feign映射E...
    99+
    2024-04-02
  • 使用SpringCloud如何搭建一个netflix-eureka微服务集群
    使用SpringCloud如何搭建一个netflix-eureka微服务集群?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。新建项目选择需要引入的组件,然后下载下...
    99+
    2023-06-14
  • SpringCloud分布式微服务b2b2c电子商务分布式微服务中docker-feign-hystrix的示例分析
    这篇文章主要介绍SpringCloud分布式微服务b2b2c电子商务分布式微服务中docker-feign-hystrix的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、创建模块(microservice...
    99+
    2023-06-05
  • SpringCloud eureka(server)微服务集群搭建过程
    目录工作原理:eureka 高可用集群项目创建:Maven 依赖本地hosts文件修改启动服务测试工作原理: Spring Cloud框架下的服务发现Eureka...
    99+
    2024-04-02
  • hadoop伪分布式如何搭建
    要搭建Hadoop伪分布式,需要按照以下步骤进行操作:1. 安装Java开发工具:首先,确保已在计算机上安装了Java开发工具。Ha...
    99+
    2023-09-21
    hadoop
  • Java微服务分布式调度Elastic-job环境如何搭建及配置
    今天小编给大家分享一下Java微服务分布式调度Elastic-job环境如何搭建及配置的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解...
    99+
    2023-07-05
  • signalR+redis分布式聊天服务器是如何搭建
    signalR+redis分布式聊天服务器是如何搭建,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。最近在搞一个直播项目需要聊天服务器,之前是以小打小闹来做的,并没有想太多就只有...
    99+
    2023-06-17
  • 如何使用Eureka搭建简单的服务端注册服务
    这篇文章主要讲解了“如何使用Eureka搭建简单的服务端注册服务”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用Eureka搭建简单的服务端注册服务”吧!案例中有三个角色:服务注册中心...
    99+
    2023-06-05
  • SpringCloud搭建netflix-eureka微服务集群的过程详解
    目录1.打开官网稍微学习一下,了解一下springcloud是个什么东西,大概有哪些组件等2.新建项目3.更改项目结构4.新建相应的测试类和配置文件4.1register-cente...
    99+
    2024-04-02
  • SpringCloud分布式微服务b2b2c电子商务docker-feign配置的示例分析
    这篇文章主要介绍了SpringCloud分布式微服务b2b2c电子商务docker-feign配置的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。讨论一下feign配...
    99+
    2023-06-05
  • Java微服务分布式调度Elastic-job环境搭建及配置
    目录什么是任务调度为什么需要分布式调度Elastic-Job环境搭建更改Zookeeper配置SpringBoot集成ElasticJob什么是任务调度 任务调度是为了自动完成特定任...
    99+
    2023-02-09
    Java Elastic-job Java微服务分布式调度
  • 微服务Springcloud之Feign如何使用
    本文小编为大家详细介绍“微服务Springcloud之Feign如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“微服务Springcloud之Feign如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧...
    99+
    2023-07-05
  • 如何使用 Golang 函数构建分布式系统中的微服务
    如何使用 Go 函数构建分布式系统中的微服务 在分布式系统中,微服务是独立且松散耦合的组件,可协同工作以执行更广泛的任务。Go 函数与其轻量级和出色的并发性使其非常适合构建微服务。 函...
    99+
    2024-04-19
    golang 微服务 git
  • 如何进行HA分布式集群搭建
    今天就跟大家聊聊有关如何进行HA分布式集群搭建,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一:HA分布式配置的优势:  1,防止由于一台namenode挂掉,集群失败的情形  2,...
    99+
    2023-06-03
  • SpringCloud分布式微服务b2b2c电子商务中docker-feign-hystrix-ribbon的示例分析
    小编给大家分享一下SpringCloud分布式微服务b2b2c电子商务中docker-feign-hystrix-ribbon的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我...
    99+
    2023-06-05
  • SpringCloud分布式微服务架构如何操作
    这篇文章主要介绍了SpringCloud分布式微服务架构如何操作的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringCloud分布式微服务架构如何操作文章都会有所收获,下面我们一起来看看吧。SpringC...
    99+
    2023-07-02
  • 如何使用Docker Swarm搭建分布式爬虫集群
    今天小编给大家分享一下如何使用Docker Swarm搭建分布式爬虫集群的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获...
    99+
    2024-04-02
  • 分布式医疗挂号系统Nacos微服务Feign远程调用数据字典
    目录步骤1:向Nacos服务中心注册微服务(1)引入Nacos依赖(2)配置微服务到Nacos1.配置service-hosp2.配置service-cmn3.将各微服务模块添加到注...
    99+
    2024-04-02
  • 如何使用PHP和Apache搭建分布式存储系统?
    随着互联网技术的不断发展,数据存储和访问需求也越来越高。传统的单机存储系统已经难以满足大规模数据存储和高并发访问的需求,因此分布式存储系统逐渐成为了主流。 本文将介绍如何使用PHP和Apache搭建分布式存储系统,以满足大规模数据存储和高...
    99+
    2023-09-30
    分布式 存储 apache
  • Apache和Python:如何搭建分布式文件系统?
    随着数据量的不断增加,传统的单机文件系统已经无法满足我们的需求。为了解决这个问题,分布式文件系统应运而生。分布式文件系统通过将数据存储在多个节点上,并允许多个用户同时访问这些数据,实现了高可用性和可伸缩性。在本文中,我们将介绍如何使用Ap...
    99+
    2023-07-31
    apache 文件 分布式
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作