当前位置: 首页 > 知识库问答 >
问题:

我们可以通过RestTemplate调用支持Zuul的服务器吗

师成弘
2023-03-14

我试图通过RestTemplate直接给出URL来调用启用Zuul的服务器。例如:RestTemplate.getForObject(“http://localhost:8090/emp-api”,employee[].class);

但它给了我一个错误:

java.lang.IllegalStateException:org.springframework.cloud.netflix.ribbon.ribbonLoadBalancerClient.execute上没有可用于localhost的实例(RibbonLoadBalancerClient.java:90)~[spring-cloud-netflix-core-1.2.3.release.jar:1.2.3.release]

详细问题:我有四个项目(Github link(branch-master):https://Github.com/vickygupta0017/microservice-poc)

>

  • 微服务服务器(eureka-server)端口:8080
  • 微服务生产者(Rest-api)端口:8086
  • zuul-gatewayproxy(zuul-server)端口:8090
  • 微服务-使用者(spring-mvc)端口:8087

    如果我直接从浏览器(“http://localhost:8090/emp-api”)调用Zuul Server,则它将请求成功重定向到生产者。但如果我通过RestTemplate从使用者调用此URL,则它将给我此错误。

    有关信息:如果我不使用zuul服务器,那么我可以使用resttemplate成功地从“microservice-consumer”调用“microservice-producer”。

  • 共有1个答案

    曹昊焱
    2023-03-14

    我已经成功地执行了您的代码,并做了以下更改,删除了

    enablediscovery和LoadBalanced注释

    如果启用了这一功能,那么rest模板将始终转到eureka进行发现,因为您使用的是代理服务器,那么您的使用者就不需要发现,因为您给出了绝对路径,也可以从application.yml中删除eureka配置。

    package com.eureka.discovery.client;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Bean;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.client.RestTemplate;
    
    import com.eureka.discovery.client.bo.Employee;
    
    @SpringBootApplication
    @RestController
    //@EnableDiscoveryClient
    public class UserApplication {
    
      @Bean
    //@Loadbalancer
      RestTemplate restTemplate(){
        return new RestTemplate();
      }
    
      @Autowired
      RestTemplate restTemplate;
    
      @RequestMapping("/hi")
      public String hi() {
          Employee[] employeeList = this.restTemplate.getForObject("http://localhost:8090/emp-api", Employee[].class);
        return String.format("%s, %s!", "Testing", "Abhay");
      }
    
      public static void main(String[] args) {
        SpringApplication.run(UserApplication.class, args);
      }
    }
    
     类似资料:
    • 问题内容: 我发现我在Web框架和Web服务器之间感到困惑。 我们可以说node.js是Web服务器吗???我对Web服务器/框架感到很困惑。 如果以某种方式,node.js是一种Web服务器,而不是webframework(Express),那么为什么在有用的实践中我们为什么需要将整个node.js放在Nginx服务器之上? 谁可以帮助??? 套件 问题答案: 网络服务器 Web服务器可以指帮助

    • 我有一个关于SSLConnection的问题,在java中,我为客户端编写了下面的代码(这个应用程序必须连接到服务器,我有支持ssl的服务器),但我得到了这样的错误“javax.net.ssl.sslException:Connection Hays Shutdown:javax.net.ssl.sslhandShakeException:sun.security.validator.valida

    • 我的Spring Boot初始化遇到了麻烦。我在一个简单的Spring Boot项目中有这个结构。

    • 我的Web Server是用Golang编码的,并且支持HTTPS。我希望利用Web Server中的HTTP/2 Server Push功能。以下链接解释了如何将HTTP Server转换为Support HTTP/2:-https://www.ianlewis.org/en/http2-and-go 但是,不清楚如何在Golang中实现Server Push通知。 -我应该如何添加Server

    • 问题内容: 如何通过 JNI 从Node.js调用Java ?有没有例子? 问题答案: 看起来很棘手。Node.JS在Google Chrome JavaScript引擎V8上运行。您将要做的是创建一个V8 C ++绑定(一个v8 c ++崩溃课程 显示了一个示例),该绑定启动JVM并执行所有JNI处理。 我认为让JavaServer和Node.js通过网络进行通信可能更好(有人写了一个使用Rab

    • 问题内容: 我正在寻找一种CAS服务器,该服务器支持通过OAuth进行单点登录的Facebook / Twitter身份验证。我已经检查了JASIG- CAS服务器,但它似乎不支持它们。我的Java Web应用程序基于Spring Security 3和其他外部PHP应用程序。是否存在支持Facebook / Twitter的CAS服务器?或在JASIG上对此支持的扩展(或示例代码)? 问题答案: