Amazon web services AWS中的Spring云网关未正确路由
我创建了一个简单的REST服务,如下所示:Amazon web services AWS中的Spring云网关未正确路由,amazon-web-services,amazon-elastic-beanstalk,spring-cloud,spring-cloud-gateway,Amazon Web Services,Amazon Elastic Beanstalk,Spring Cloud,Spring Cloud Gateway,我创建了一个简单的REST服务,如下所示: @RestController public class ServiceController { @GetMapping(value = "/getSimpleResponse") public ResponseEntity<String> getSimpleResponse() { return new ResponseEntity<>("Hello from Service 1", Http
@RestController
public class ServiceController {
@GetMapping(value = "/getSimpleResponse")
public ResponseEntity<String> getSimpleResponse() {
return new ResponseEntity<>("Hello from Service 1", HttpStatus.OK);
}
}
@Configuration
public class GatewayConfig {
@Bean
public RouteLocator gatewayRoutes(RouteLocatorBuilder builder) {
return builder.routes()
.route(getFirstTestServiceRoute())
.build();
}
private Function<PredicateSpec, Route.AsyncBuilder> getFirstTestServiceRoute() {
return p -> p
.path("/service1/**")
.uri("http://testservice1-env.qgwe5a4qq8.ap-south-1.elasticbeanstalk.com/")
.id("service1");
}
}
@RestController
公共类服务控制器{
@GetMapping(value=“/getSimpleResponse”)
公共响应获取简单响应(){
返回新的响应状态(“来自服务1的你好”,HttpStatus.OK);
}
}
我将其部署到AWS elastic beanstalk,并且运行良好。在这里:
现在我创建了一个Spring云网关服务,路由配置如下:
@RestController
public class ServiceController {
@GetMapping(value = "/getSimpleResponse")
public ResponseEntity<String> getSimpleResponse() {
return new ResponseEntity<>("Hello from Service 1", HttpStatus.OK);
}
}
@Configuration
public class GatewayConfig {
@Bean
public RouteLocator gatewayRoutes(RouteLocatorBuilder builder) {
return builder.routes()
.route(getFirstTestServiceRoute())
.build();
}
private Function<PredicateSpec, Route.AsyncBuilder> getFirstTestServiceRoute() {
return p -> p
.path("/service1/**")
.uri("http://testservice1-env.qgwe5a4qq8.ap-south-1.elasticbeanstalk.com/")
.id("service1");
}
}
@配置
公共类网关配置{
@豆子
公共路由器或网关路由(路由器或构建器生成器){
returnbuilder.routes()
.route(getFirstTestServiceRoute())
.build();
}
私有函数getFirstTestServiceRoute(){
返回p->p
.path(“/service1/**”)
.uri(“http://testservice1-env.qgwe5a4qq8.ap-south-1.elasticbeanstalk.com/")
.id(“服务1”);
}
}
我在AWS Elastic beanstalk中部署网关应用程序
但是返回一个白标签错误页面。我期望得到与服务1相同的输出。我做错了什么?尝试在浏览器中打开您在网关中设置的URL,您将看到相同的白标签错误页面。
您的端点是/getSimpleResponse,但您的网关不知道它。它没有魔力,它根据您的配置工作
此外,堆栈也不会在本地工作。首先让它在本地工作,然后再将它一块一块地移动到云中。我在类级别缺少RequestMapping。我的URL格式是 网关URL/service1/getSimpleResponse 我假设这是因为SpringCloudGateway可能正在将完整路径(/service1/getSimpleResponse)附加到下游服务URL
@RestController
@RequestMapping("/service1")
public class ServiceController {
@GetMapping(value = "/getSimpleResponse")
public ResponseEntity<String> getSimpleResponse() {
return new ResponseEntity<>("Hello from Service 1", HttpStatus.OK);
}
}
@RestController
@请求映射(“/service1”)
公共类服务控制器{
@GetMapping(value=“/getSimpleResponse”)
公共响应获取简单响应(){
返回新的响应状态(“来自服务1的你好”,HttpStatus.OK);
}
}
如果下游服务没有响应/service1,则需要修改路径,例如使用StripPrefix 1filter@spencergibb我对这整件事还不熟悉。你能给我举个例子吗?