Я пытаюсь создать несколько микросервисов, интегрированных с Eureka для обнаружения и 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);
}
}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. Я использовал конечные точки ниже.
Я не уверен, что и где я сделал не так. Может ли кто-нибудь помочь мне разобраться в этой проблеме?




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