我有两个webapps,每个都有自己的后端微服务,每个微服务都有自己的数据库。对于microservice1数据库表的任何变化,我想在微服务2的数据库表中更改(创建/更新)条目。我该怎么做?
Webapp 1:人力资源协调员安排面试的界面。
微服务1:安排面试的后端服务。
微服务1的数据库:存储与候选人面试相关的信息。
interviews: [ {
"interviewId": "1",
"candidateId": "abc",
"interviewers": [
{
"interviewer_name": "Thor",
"schedule": {
"startTime": "",
"endTime": "",
"roomNumber": 101
}
},
{
"interviewer_name": "Loki",
"schedule": {
"startTime": "",
"endTime": "",
"roomNumber": 101
}
}
]
} ]
Webapp 2 :面试官可以在面试中协调问题的UI。
微服务2:面试官的后端服务,以协调问题选择。即每位面试官在面试中选择他/她将要求候选人提出的问题(这是为了确保没有两位面试官最终向候选人提出同样的问题)。
DB for microservice 2: Schemas
// QuestionBank:包含问题的表格,访调员可以选择。
//访调员:包含公司所有访调员的表格。
// InterviewToInterviewer :(与访调员面谈的多对多映射)。一次面试可以有很多面试官,每位面试官都可以参加很多面试。
// InterviewToInterviewerToQuestion :(面试的多对多映射到问讯者)。对于每次访谈,访问者可以选择许多问题,问题库中的每个问题都可以成为许多访谈的一部分。访问者参与。
一旦从webapp1安排了采访:
如果面试官没有选择问题,那么我想向他们发送提醒。为此,我希望webapp2知道会安排面试。
我希望webapp2能够了解所发生的任何阵容变化(在特定的面试,面试官被更改或面试被取消等)。
一旦从webapp1安排/更改了面试,webapp1将调用webapp2(webapp2公开API),让webapp2知道创建了新面试或更新了现有面试。
对于DB1中的访谈表中的任何新条目/更新,都会向DB2启动DB触发器。我不确定这是否也可行。
在上述两种方法中,有人可以帮助我选择一个人的优点和缺点。或者还有其他一些替代方法来实现这一目标。
这里的潜在客户表示赞赏。
答案 0 :(得分:2)
不要将这两项服务紧密耦合,如果第二项服务依赖于任何其他服务,您可能会遇到延迟。如果第二次服务没有启动怎么办?所以尽量在这里使用消息队列。您的第一个服务是发布可以处于状态的面试活动(新的,取消的等以及其他详细信息面试ID,面试官等)。制作第二个服务来听取它。正如您所说,面试请求发送给多位面试官。在第二次服务中配置提醒作业/日程安排,并在您的数据存储中配置详细信息,例如:面试官ID,面试ID,时间范围等,以便您可以向面试官发送提醒容易。这应该对你有帮助。如果我的问题没有正确,请告诉我。 微服务使用change事件来获得给定系统中的数据一致性。
答案 1 :(得分:1)
上述两种方法都是可行的方法。
对于第一种方法,您需要使用Observer设计模式来考虑设计,其中Interview Scheduler(webapp1)是webapp2中观察者订阅的主题。这将是即时的,因为面试调度程序将立即通知其他webapp关于计划的面试。一旦安排了面试,您就可以在webapp2中拥有一个服务端点,以便通过webapp1调用通知目的。这种方法的缺点是在两个webapps上都需要额外的编程工作。
该解决方案在许多数据库中都是可行的,取决于您使用的是哪个数据库。但是,根据我的理解,您将遇到的麻烦是它不是通知。即使触发器更新数据库,也不会通知任何人它已更改。无论如何,您都需要实现一个侦听器,以便webapp2知道数据库中是否有一些更改。
这不是您所希望的精确解决方案,但我想它可以帮助您深入了解可能的解决方案。