ZuulProxy не работает в приложении spring boot

#java #spring-boot #netflix-eureka #netflix-zuul

#java #spring-boot #netflix-эврика #netflix-zuul

Вопрос:

Я создал приложение spring boot, и в нем есть один микросервис. Теперь я хочу напрямую получить доступ к этому микросервису из браузера, который я зарегистрировал на сервере eureka.

введите описание изображения здесь

Класс ServicesInfoClient — это один микросервис, а его конфигурационный файл — ServiceInfo.yml.

ServiceInfoClient.java:

 package com.myoldschool.manager.serviceClientInfo;

import com.myoldschool.manager.studentnames.StudentNameCountClient;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })
@EnableDiscoveryClient
@RestController
public class ServicesInfoClient {

    public static void main(String[] args) {
        System.setProperty("spring.config.name", "serviceInfo");
        SpringApplication.run(StudentNameCountClient.class, args);
    }

    @GetMapping("/getInfo")
    public String getServiceEndPoints(){
        return "all endpoints";
    }

}
 

ServiceInfo.yml:

 # Discovery Server Access
spring:
  application:
    name: services-info

eureka:
  client:
    registerWithEureka: true
    fetchRegistry: true
    serviceUrl:
      defaultZone: http://localhost:1111/eureka/
    instance:
      hostname: localhost

# HTTP Server
server:
  port: 4444   # HTTP (Tomcat) port
 

MyZuulProxyClient.java:

 package com.myoldschool.manager.zuulservice;

import com.myoldschool.manager.ManagerApplication;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;

@EnableZuulProxy
@EnableDiscoveryClient
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })
public class MyZuulProxyClient {

    public static void main(String[] args) {
        System.setProperty("spring.config.name", "zuulService");
        SpringApplication.run(ManagerApplication.class, args);
    }
}
 

zuulService.yml:

 # Configure this Discovery Server
spring:
  application:
    name: zuul-service

eureka:
  client:
    registerWithEureka: false
    fetchRegistry: true
    serviceUrl:
      defaultZone: http://localhost:1111/eureka/
    instance:
      hostname: localhost

# HTTP Server
server:
  port: 5555   # HTTP (Tomcat) port

zuul:
  routes:
    services-info:
      path: /services-info/**
      serviceId: services-info
 

Теперь после запуска приложения, когда я нажимаю http://localhost:1111/services-info/getInfo , оно выдает мне эту ошибку:

 Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.

Sun Nov 22 16:34:12 IST 2020
There was an unexpected error (type=Not Found, status=404).
 

Я видел так много потоков, но ни один из них не работает. Поэтому, пожалуйста, скажите мне, что я здесь делаю не так.

Ответ №1:

Я не вижу ваш микросервис EurekaServer. Вам необходимо создать сервер Eureka как порт: 1111. После этого ваши микросервисы могут зарегистрировать его.

Комментарии:

1. Я только что не опубликовал его код здесь, но он у меня есть, и вы можете легко прочитать это во второй строке моего вопроса: «микросервис из браузера, который я зарегистрировал на сервере eureka».

2. Ваш запрос отправляется на сервер Eureka, порт которого равен 1111. Тем не менее, вы должны отправить запрос на ваш ZuulProxy. ZuulProxy найдет ваш путь и перешлет запрос на соответствующий микросервис. Пожалуйста, отредактируйте порт с помощью 5555. localhost:5555/services-info/getInfo .