我正在尝试使用 Spring Boot 将单体系统划分为微服务。我遇到的问题是,虽然每个微服务通常应该具有实现服务功能的类,但我需要接收和处理封装与其他微服务相关的许多类的对象。例如,下面的代码是 microservice1 的一部分,它提供学生信息:
class Microservice1{
int id;
String name;
int grade;
Record record;
}
现在请注意,Record对象属于另一个微服务的类,该微服务是microservice2,它提供学生记录,如下所示:
class Microservice2{
List<int> marks;
Behaviour behaviour;
}
现在行为也是另一个对象,其类属于另一个微服务3,依此类推。
我的问题是:如何解决必须将所有这些类包含在微服务 1 中的问题,因为微服务 1 在提供服务时需要处理它们?问题很严重,因为我有许多相互封装的类,并且我需要将大多数单体系统类包含在一个微服务中。
最佳答案
据我所知,您的微服务过于细化。以这种方式实现你会遇到很多麻烦。
恕我直言,如果记录
与学生
相关并且属于同一个业务上下文,它们属于同一个微服务。
正如 David 在评论中所说,限界上下文概念可以(真正)帮助您。
无论如何,想象一下您想要遵循您所提议的路线。如果一个 Record
属于微服务 B,并且您必须通过微服务 A 中的某个位置组合来引用它,那么您唯一需要的就是它的主键。不是整个对象。
会是这样的:
微服务A:
Student.java
public class Student {
private Integer id;
private String name;
private Integer grade;
private Integer recordId;
// getters and setters omitted for brevity
}
微服务B:
Record.java
public class Record {
private Integer recordId;
private List<Integer> marks;
private Integer behaviourId;
// getters and setters omitted for brevity
}
等等..
但正如我所说,也许这不是最好的方法。
参见here关于有界上下文的好文章。
关于java - 如何处理与微服务无关的类对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59878104/