Ошибка 404 с Spring Boot и Zuul - PullRequest
       18

Ошибка 404 с Spring Boot и Zuul

0 голосов
/ 19 ноября 2018

Я пытаюсь создать несколько микро сервисов, интегрированных с Eureka для discovery & Zuul в качестве шлюза.

  1. Приложение Eureka - это приложение сервера Eureka.
  2. Пользовательское приложение - приложение для отдыха Я бы хотел выставить
  3. Приложение для шлюза - приложение Zuul

Все вышеперечисленное разработано в режиме весенней загрузки. Eureka Application application.yml

 server:
   port: 8761
eureka:
  client:
    registerWithEureka: false
    fetchRegistry: false  

EurekaDiscoveryService

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
import org.springframework.context.annotation.Import;

@SpringBootApplication
@EnableEurekaServer
@Import({ FrameworkConfiguration.class })
public class EurekaDiscoveryService extends SpringBootServletInitializer {

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

	}

	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
		return application.sources(EurekaDiscoveryService.class);
	}
}
Пользовательское приложение application.yml

server:
  port: 9091
  servlet:
    context-path: /user-service
spring:
  application:
    name: user
  autoconfigure:
    exclude:
      - org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
  data:
    rest:
      base-path: /api      
  
eureka:
  client:
    registerWithEureka: true
    serviceUrl:
      defaultZone: http://localhost:8761/discovery/eureka        
Пользовательское приложение

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.transaction.annotation.EnableTransactionManagement;



@SpringBootApplication(exclude={MongoAutoConfiguration.class})
@EnableDiscoveryClient
@EnableFeignClients
@EnableJpaRepositories(ConfigurationUtil.SpringConfiguration.REST_REPO_SCAN_PKG)
@EnableTransactionManagement
public class UserApplication extends SpringBootServletInitializer  {

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

	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
		return application.sources(UserApplication.class);
	}
}

Приложение шлюза * * Application.yml тысяча сорок-девять

server:
  port: 8762
  servlet:
    context-path: /gateway-service
spring:
  application:
    name: gateway
  autoconfigure:
    exclude:
      - org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
      - org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration

eureka:
  client:
    registerWithEureka: false
    fetchRegistry: true  
    serviceUrl:
      defaultZone: http://localhost:8761/discovery/eureka            
# Map paths to services
zuul:
  ignoredServices: '*'
  routes:
     account:
       path: /account/**
       service-id: account     
     user:
       path: /user/**
       serviceId: user
       stripPrefix : true  
        

Приложение шлюза

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;

@SpringBootApplication
@EnableEurekaClient 	
@EnableDiscoveryClient
@EnableZuulProxy	
public class ProxyApplication {

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

Конфигурация WebSecurity Используется как в шлюзе, так и в пользовательском приложении

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/", "/api","/user").permitAll();
        http.csrf().disable();
    }
}

Когда я запускаю все 3 приложения по порядку, я вижу оба приложения Пользователь и шлюз , перечисленные на сервере Eureka в URL http://localhost:8761/discovery/. Всякий раз, когда я пытался позвонитьспецифический для пользователя микро-сервис URL http://localhost:9091/user-service/api/user/search/searchByUserName?username=syam, Я получаю ответ ниже, как и ожидалось.

{
  "id" : 100,
  "dateofBirth" : "1985-05-20",
  "firstName" : "Syam",
  "lastName" : "Mohan"
}

Когда я пытался получить к нему доступ через URL шлюза, он выдает ошибку 404.Я использовал ниже конечных точек.

  1. http://localhost:8762/user/api/search/searchByUserName?username=syam
  2. http://localhost:8762/proxy-service/user/api/search/searchByUserName?username=syam

Я не уверен, что и где я ошибся.Может ли кто-нибудь помочь мне разобраться с этой проблемой?

...