Я пытаюсь создать несколько микро сервисов, интегрированных с Eureka для discovery & Zuul в качестве шлюза.
- Приложение Eureka - это приложение сервера Eureka.
- Пользовательское приложение - приложение для отдыха Я бы хотел выставить
- Приложение для шлюза - приложение 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.Я использовал ниже конечных точек.
- http://localhost:8762/user/api/search/searchByUserName?username=syam
- http://localhost:8762/proxy-service/user/api/search/searchByUserName?username=syam
Я не уверен, что и где я ошибся.Может ли кто-нибудь помочь мне разобраться с этой проблемой?