Получение ошибки 404 с помощью Spring Boot и Zuul

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

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

Все вышеперечисленное разработано в пружинных ботинках. Приложение Eureka
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: // локальный: 8761 / открытие /. Всякий раз, когда я пытался вызвать конкретный URL-адрес микросервиса пользователя http: // localhost: 9091 / пользователь-сервис / API / пользователь / поиск / searchByUserName? username = syam, я получаю ответ ниже, как и ожидалось.

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

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

  1. http: // localhost: 8762 / пользователь / api / search / searchByUserName? username = syam
  2. http: // localhost: 8762 / proxy-service / user / api / search / searchByUserName? username = syam


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

Пожалуйста, прочтите вторую конечную точку прокси как localhost: 8762 / gateway-service / user / api / search /…

Syam Mohan 19.11.2018 09:00
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
0
1
1 935
0

Другие вопросы по теме