gpt4 book ai didi

java - 将 spring-cloud 与 netflix Eureka 一起使用时,如何让 Discovery Client 工作?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:41:42 29 4
gpt4 key购买 nike

我正在尝试使用 Spring Cloud 和 Netflix 插件(如 Hystrix、Eureka 和 Ribbon)制作一个基本项目,以了解其工作原理。我正在尝试制作的项目是一个简单的消息服务器,它将保留消息。还有一个消息客户端,它只会向服务器询问消息,我想为此使用自动发现客户端,或 RestTemplate 发现。但我不能去工作。

我有以下结构:

  • 消息客户端( Eureka 客户端)
  • 消息服务器( Eureka 客户端)
  • 配置服务(配置服务器)
  • 发现服务( Eureka 服务器)

  • 我目前做的是启动配置服务,并在它们通过以下结构连接时将 application.yml 详细信息公开给所有这些“应用程序/客户端”:
  • config-service\src\main\resources\config\appname.yml
  • app\src\main\resources\bootstrap.yml(包含应用名称和云配置的 url)

  • 这工作得很好,我的应用程序在它们从配置服务器接收的端口上启动,并且它们都连接到我的 eureka 服务器,并且它们都在那里可见。除了 Hystrix 故障转移也可以正常工作,并不是说它与此有关,但它告诉我它不会完全错误。

    但我的困惑来了……
    在我的客户端模块内的服务类(@Service 注释)中使用 @Autowired 注释时,我得到一个 discoveryClient 对象,但我无法找到使用该对象的任何其他服务。

    消息客户端 - 引导类:
    @EnableAutoConfiguration
    @EnableHystrix
    @EnableEurekaClient
    @ComponentScan("cloud.rest.resources, spring.cloud.client")
    public class ClientBoot {
    public static void main(String[] args) {
    SpringApplication.run(ClientBoot.class, args);
    }
    }

    消息客户端 - REST 资源:
    @RestController
    public class MessageResource {
    @Autowired
    private MessageClient messageClient;
    @RequestMapping(value = "/message/{client}", method = RequestMethod.GET)
    public Message getMessage(@PathVariable String client) {
    return messageClient.getMessage(client);
    }
    }

    消息客户端 - 消息客户端:
    @Service
    public class RestMessageClient implements MessageClient {
    @Autowired
    private DiscoveryClient discoveryClient;
    @Autowired
    private RestTemplate restTemplate;
    @Override
    public Message getMessage(String client) {
    return restTemplate.getForObject(String.format("http://message-server/message/%s", client), Message.class);
    }
    }

    我保存消息的消息服务器引导类与我的客户端具有相同的注释。

    正如我所说,我的服务类找不到任何东西..
    这让我想到了我所有的问题:
  • 实际使用功能区负载平衡器需要什么?
  • 我是否必须使用功能区才能使用“自动发现”,我想不是,但现在我很困惑。
  • 据我了解,在使用 EnableEurekaClient 时,我不应该也需要使用 EnableDiscoveryClient 吗?
  • 我可以在运行时为客户端更改配置服务器上的 yml 文件,而只需重新启动客户端吗?
  • 配置服务器真正要共享多少配置,因为目前我所有的客户端都只包含一个 super 基本的 bootstrap.yml 文件。
  • 有没有人有一个很好的链接,我可以在这里阅读有关在我的 yml 文件中设置的所有属性的更多信息?既有关于存在的属性的实际作用的文档,也有关于如何将它们与 Spring Cloud 结合使用的文档?
  • 我是否需要特定属性才能让我的应用程序/客户端找到其他应用程序/客户端?

  • 编辑信息

    感谢您快速而出色的回复,我今天已经一遍又一遍地经历了这个,我终于让我的应用程序工作了..
    问题(我不明白为什么,希望你能帮助我理解这一点)是我的发现服务包含我的每个其他客户端的 yml 文件,我在其中指定了诸如端口和 Eureka 信息之类的内容......我在这里也指定了曾是:
    eureka:
    client:
    serviceUrl:
    defaultZone: http://localhost:8761/eureka

    所以,当我设置这个值时,它似乎覆盖了一些使我的服务发现不起作用的东西..即使我可以在 eureka 服务器中看到我的所有应用程序,当我设置这个值时它们无法找到彼此。

    我通过在我的配置服务中有一个 message-server.yml 文件来设置这个值,该文件在引导后发送到我的消息服务器应用程序。

    那么我有两个新问题。
  • 如何覆盖此 Eureka 服务器属性?
  • 为什么当我设置这个值时我的发现客户端停止工作,它实际上是做什么的?
  • 最佳答案

    What is required to actually use ribbon load balancer?



    ribbon-loadbalancer 必须在类路径上(例如通过“spring-cloud-starter-ribbon”)。然后你可以注入(inject)一个 LoadBalancerClient或者你可以注入(inject)一个 RestTemplate (如果您有 LoadBalancerClient ,它将被负载平衡器感知)。

    Do I have to use ribbon to be able to use the "auto discovery", I thought not but now I'm just confused.



    什么是“自动发现”?您无需使用 Ribbon 即可使用 DiscoveryClient (Ribbon 是负载均衡器,而不是服务注册中心)。

    From what I've understood, when using EnableEurekaClient I should not need to use the EnableDiscoveryClient as well?



    正确的。 @EnableEurekaClient@EnableDiscoveryClient 注释所以它只是为了表达偏好。

    Can I change the yml files on my config-server for the clients in runtime and just have to reboot the client?



    是的。或者您可以使用/refresh 或/restart 端点(在生产中完全重启可能是最好的,至少定期)。

    How much configuration is really meant to be shared by the config-server, because currently all of my clients just contain a super basic bootstrap.yml file.



    随心所欲。一段绳子有多长?如果我是你,我会尝试将中央配置保持在最低限度(只有在环境之间或运行时发生变化的东西)。

    Does anyone have a good link to where I can read more about all the properties that is being set in my yml files? Both a documentation of what the properties that exists actually do as well as some documentation on how I can use them in combination with spring cloud?



    Spring Boot 和 Spring Cloud 为外化属性自动生成元数据。新一代 IDE 理解它们(因此获得 STS 3.6.4 或 IDEA 14.1),它们列在用户指南(至少对于 Spring Boot)中 http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#common-application-properties 下。

    Do I need specific properties to enable my apps/clients to find other apps/clients?



    您需要能够找到您的服务注册中心(在本例中为 Eureka)。如果您正在使用 Eureka 并且您的客户已经注册,那么这就足够了。

    关于java - 将 spring-cloud 与 netflix Eureka 一起使用时,如何让 Discovery Client 工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28990517/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com