我正在使用Spring Cloud。我的Spring boot应用程序College-service
、学生服务
、eureka-server
和api网关
中有四个服务。我尝试使用API Gateway调用College-service
和学生服务
。当我从API Gateway调用MyCollege-service
时,它可以正常工作,但学生服务
不起作用。当我尝试获取学生服务
时,我收到未找到错误404
。我是Spring Cloud的新人。这是我的代码。
下面是我的网址,最后一个网址是404
实体
public class College {
private String clgId;
private String clgName;
private String clgCity;
List<Student> students;
public College(String clgId, String clgName, String clgCity, List<Student> students) {
this.clgId = clgId;
this.clgName = clgName;
this.clgCity = clgCity;
this.students = students;
}
public College(String clgId, String clgName, String clgCity) {
this.clgId = clgId;
this.clgName = clgName;
this.clgCity = clgCity;
}
// getter and setter
}
public class Student {
private Long stId;
private String stName;
private String stEmail;
private String clgId;
public Student(Long stId, String stName, String stEmail, String clgId) {
super();
this.stId = stId;
this.stName = stName;
this.stEmail = stEmail;
this.clgId = clgId;
}
// getter and setter
}
学院控制员
@RestController
@RequestMapping("/college")
public class CollegeController {
@Autowired
private CollegeService collegeService;
@Autowired
private RestTemplate restTemplate;
@RequestMapping(value = "/{clgId}", method = RequestMethod.GET)
public ResponseEntity<College> getColleges(@PathVariable("clgId") String clgId) {
College college = collegeService.getCollege(clgId);
List student = restTemplate.getForObject("http://student-service/college/student/" + college.getClgId(),
List.class);
college.setStudents(student);
return ResponseEntity.ok(college);
}
}
应用程序. yml
server:
port: 9001
spring:
application:
name: college-service
eureka:
instance:
hostname: localhost
学生管理员实体
public class Student {
private Long stId;
private String stName;
private String stEmail;
private String clgId;
public Student(Long stId, String stName, String stEmail, String clgId) {
super();
this.stId = stId;
this.stName = stName;
this.stEmail = stEmail;
this.clgId = clgId;
}
// getter and setter
}
@RestController
@RequestMapping("/college")
public class StudentCotroller {
@Autowired
private StudentService studentService;
@RequestMapping(value = "/student/{clgId}", method = RequestMethod.GET)
public ResponseEntity<List<Student>> getStudents(@PathVariable("clgId") String clgId) {
return ResponseEntity.ok(studentService.getStudents(clgId));
}
}
应用程序. yml
server:
port: 9002
spring:
application:
name: student-service
eureka:
instance:
hostname: localhost
应用程序. yml
server:
port: 8761
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
server:
waitTimeInMsWhenSyncEmpty: 0
应用程序. yml
server:
port: 9003
eureka:
instance:
hostname: localhost
spring:
application:
name: api-gateway
cloud:
gateway:
routes:
- id: college-service
uri: lb://college-service
predicates:
- Path=/college/**
- id: student-service
uri: lb://student-service
predicates:
- Path=/student/**
学生服务的
谓词是匹配以学生开头的所有请求(Path=/学生/**
)。但是,您致电学生服务
,并要求从大学(/学院/学生/ CLG01)开始
。此请求将我与大学服务
相匹配,因为您将此服务的谓词设置为Path=/大学/**
。/学院/**
路径匹配 /大学/学生/CLG01
路径。
可能的解决方案:
StudentController
请求映射从/college
对学生服务使用不同的谓词,例如Host
设置特定路径谓词并更改路由的顺序:
routes:
- id: student-service
uri: lb://student-service
predicates:
- Path=/college/student/**
- id: college-service
uri: lb://college-service
predicates:
- Path=/college/**
我不知道spring-cloud-gateway是否支持从领事注册中心读取路由,就像Zuul一样。 另外,我用--debug启动了这一行:
我使用以下技术设计了一个微服务原型 尤里卡服务器(Discovery Server) Spring boot(后端服务) Spring Cloud API网关 上述服务正在启动,和在服务器中注册 当我向gate way发送请求时,它显示以下错误 如何解决上述问题。
我正在使用Spring Cloud(hoxton.sr10)和Spring Boot(2.2.6.release) 我在尤里卡服务器8761注册了我的服务 gateway mainClass java
我试图将使用工作的网关迁移到Spring Cloud网关,但遇到了请求路由问题。 下面是Spring Cloud Gateway配置的一个片段,我试图在其中配置一个等效的路由: 我使用Spring Cloud Eureka作为我的Discovery服务器(在一个单独的微服务中),并且我目前没有任何配置,如配置DiscoveryClient路由的谓词和过滤器中所述 如果我向发出请求,我将收到一个40
我想通过在eureka(应用程序名称)注册的服务ID在我的Spring云网关(无zuul)启用默认路由,但我总是得到404错误。 在我的聊天服务的引导程序中。yml我已经定义了应用程序名 在应用程序属性中: 当我进入eureka的仪表板时,我可以看到我的聊天服务和网关。 Eureka在网关应用程序中的配置与聊天服务相同,但我也有以下配置: 接下来,我还尝试添加显式路由,但这并不起作用,但如果我有发
我有一个Spring云网关、一个eureka服务注册中心和两个微服务器。我使用http://localhost:8081/auth直接向sevice发送请求没有问题。当我想使用网关http://localhost:8080/auth时,我总是得到404错误响应。服务和网关都连接到eureka服务器。下面是我的代码: 网关 Application.Properties: 主要: 主要: 我已经遍历了