Ошибка страницы с белой меткой при использовании Netflix Zuul - PullRequest
0 голосов
/ 10 июля 2019

Я практикую использовать балансировку нагрузки с использованием Netflix Zuul и Eureka Server в Spring Boot. И я столкнулся с проблемой. Итак, я создал проект 2 Spring Boot. Один проект для создания Eureka Server и один для создания Eureka Client. Вот код обоих проектов.

Проект Eureka Server

package com.example.eureka;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {

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

}

и application.yaml

# This default profile is used when running a single instance completely standalone:
spring:
  profiles: default
server:
  port: 9000  
eureka:
  instance:
    hostname: my-eureka-server.com
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/    

---
spring:
  profiles: united-states
  application:
    name: eureka-server-clustered   # ==> This is Service-Id
server:
  port: 9001  
eureka:
  instance:
    hostname: my-eureka-server-us.com    
  client:
    registerWithEureka: false
    fetchRegistry: false       
    serviceUrl:
      defaultZone: http://my-eureka-server-fr.com:9002/eureka/,http://my-eureka-server-vn.com:9003/eureka/

---
spring:
  profiles: france
  application:
    name: eureka-server-clustered   # ==> This is Service-Id   
server:
  port: 9002
eureka:
  instance:
    hostname: my-eureka-server-fr.com      
  client:
    registerWithEureka: false
    fetchRegistry: false  
    serviceUrl:
      defaultZone: http://my-eureka-server-us.com:9001/eureka/,http://my-eureka-server-vn.com:9003/eureka/

---
spring:
  profiles: vietnam
  application:
    name: eureka-server-clustered    # ==> This is Service-Id  
server:
  port: 9003
eureka:
  instance:
    hostname: my-eureka-server-vn.com    
  client:
    registerWithEureka: false
    fetchRegistry: false  
    serviceUrl:
      defaultZone: http://my-eureka-server-us.com:9001/eureka/,http://my-eureka-server-fr.com:9002/eureka/   

Я уже добавил новое доменное имя в C:\Windows\System32\drivers\etc\host И проект Eureka_Client

package com.example.config;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.netflix.discovery.EurekaClient;

@SpringBootApplication
@Controller
public class EurekaClientApplication {
    @Autowired
    private DiscoveryClient discoveryClient;

    @Autowired
    @Lazy
    private EurekaClient eurekaClient;

    @Value("${eureka.instance.appname}")
    private String appName;

    @Value("${server.port}")
    private String port;

    public static void main(String[] args) {
        SpringApplication.run(EurekaClientApplication.class, args);
    }
    @RequestMapping("/client")
    public String getService(Model m) {
        List<String> listService = discoveryClient.getServices();
        String name = eurekaClient.getApplication(appName).getName();
        String info = "Name app: " + name + " Port: " + port;
        m.addAttribute("info",info);
        m.addAttribute("listService",listService);
        return "service";
    }
    @RequestMapping("/home")
    public String goHome() {
        return "home";
    }

}

и application.yaml

spring:
  application:
    name: ABC-SERVICE # ==> This is Service-Id


---
# Items that apply to ALL profiles:   
eureka:
  instance:
    appname: ABC-SERVICE  # ==> This is a instance of ABC-SERVICE
  client:   
    fetchRegistry: true
    serviceUrl:   
      defaultZone: http://my-eureka-server-us.com:9001/eureka

server:
  port: 8000  

---
spring:
  profiles: firstService
eureka:
  instance:
    appname: ABC-SERVICE  # ==> This is a instance of ABC-SERVICE
    preferIpAddress: true
  client:   
    fetchRegistry: true
    serviceUrl:
      defaultZone: http://my-eureka-server-us.com:9001/eureka  

server:
  port: 8001   

---
spring:
  profiles: secondService
eureka:
  instance:
    appname: ABC-SERVICE  # ==> This is a instance of ABC-SERVICE
    preferIpAddress: true
  client:   
    fetchRegistry: true
    serviceUrl:
      defaultZone: http://my-eureka-server-us.com:9001/eureka   

server:
  port: 8002

---
spring:
  profiles: thirdService
eureka:
  instance:
    appname: ABC-SERVICE  # ==> This is a instance of ABC-SERVICE
    preferIpAddress: true  
  client:   
    fetchRegistry: true
    serviceUrl:
      defaultZone: http://my-eureka-server-us.com:9001/eureka  

server:
  port: 8003

Я запустил оба проекта с различным профилем пружины одновременно, и он работает очень хорошо. Когда я нажимаю на этот URL http://localhost:8001/home или http://localhost:8001/service, он возвращает именно то, что я хочу. А потом я создал проект для Netflix Zuul и вот его application.yaml файл

eureka:
  client:
    fetchRegistry: true
    registerWithEureka: true
    serviceUrl:
      defaultZone: http://my-eureka-server-us.com:9001/eureka
  instance:
    preferIpAddress: true
server:
  port: 8762
spring:
  application:
    name: zuul-server

И когда я нажимаю этот URL localhost:8762/ABC-SERVICE/home или localhost:8762/ABC-SERVICE/client, браузер возвращает сообщение об ошибке белой страницы. Я знаю, что что-то не так с настройкой Netflix Zuul в моем проекте. Можете ли вы, парень, помочь мне разобраться?

1 Ответ

0 голосов
/ 10 июля 2019

Похоже, вы не настраивали свои маршруты. Вот некоторая информация о том, как это настроить: https://cloud.spring.io/spring-cloud-static/spring-cloud-netflix/2.1.2.RELEASE/single/spring-cloud-netflix.html#netflix-zuul-reverse-proxy

РЕДАКТИРОВАТЬ: Если вы забыли аннотацию @EnableZuulProxy, это, скорее всего, будет причиной.

...