我们需要找到在微服务体系结构中解决分布式事务管理的最佳方法。
这是问题陈述。
我们有一个复合微服务,它将与其他2个原子微服务(显然是为了特定的目的)进行交互,并有单独的数据库,例如我们可以将这2个微服务视为
在复合服务用例中,用户(管理员)可以为特定课程的学生指派老师。
我想知道我们如何在一个事务中解决这个问题,因为每个服务器(STUDENT_SERVICE和TEACHER_SERVICE)都有单独的数据库,所有这些都应该发生在一个事务中,要么提交,要么回滚。
因为这两个服务是分开的,我认为JTA不会有什么帮助,因为它意味着将这两个应用程序(服务)部署在同一个应用程序服务器上!
如上所述,我选择了JTA//伪代码类CompositeService{
AssignStaff(resquest){
//txn Start
updateStudentServiceAPI(request);
UpdateTeacherServiceAPI(request);
//txn End
}
}
api执行后,系统应处于一致状态
这是一个棘手的问题,即使乍一看并不明显。
您所要求的功能被理解为微服务架构的反模式。
微服务体系结构通常是一个分布式系统。分布式系统中的事务很难处理(请参阅https://martin.kleppmann.com/2015/09/26/transactions-at-strange-loop.html).您的应用程序由两个服务组成。
JTA是用于ACID风格事务的Java API。ACID事务通常需要在数据库中建立锁。由于事务跨越多个服务(在您的案例中有两个),因此一个服务的故障可能会阻止另一个服务的处理。在这种情况下,您将失去微服务体系结构的优势——服务的松散耦合和独立性。你最终可以构建一个分布式的整体(参见本文)https://blog.christianposta.com/microservices/the-hardest-part-about-microservices-data/).
顺便说一下,在Stackoverflow上有一些关于微服务中事务的讨论。只需搜索或检查。
你有什么选择
(免责声明:我是http://narayana.io的开发人员,提供的选项是从JavaEE和Narayana的角度出发的。可能还有其他项目提供类似的功能。另外,即使Narayana与Spring集成得很好,您也可能需要处理一些集成问题。(
我使用的是Spring Boot 1.4.2中的spring-boot-starter-data-jpa。 一切都很好(@Entity classes discovery、datasource自动配置、transaction自动配置、EntityManager自动配置)。
我是Java和Spring Boot的初学者,我在Spring Boot上使用< code>Pagination,用这个代码我返回用户列表,如果我想返回页数,我必须这样做? 我知道使用我可以获取页数,但如何返回它?
在Consul,可以查看SpringBoot应用程序中配置的健康状态。 或者我们是否可以让Consult拉出/调用某个服务的任何服务/URL,以便在Consult中查看响应?
我试图从我的Spring启动服务向IBMMQ队列发送消息。配置如下: 一个pplication.properties 菜豆 IBM MQ浏览器图片 当我尝试发送消息时,我收到错误: 我错过了什么?我的chammel类型所显示的错误与我的请求不符,但我不知道这意味着什么。 提前谢谢。
到处玩弄Spring Boot,我无法显示jsp页面。有daos等工作,所以没有probs那里,但我不能为我的生活使它显示一个简单的jsp页面(没有数据传入,只是一个简单的页面) 我尝试在/resources/meta-inf/resources/WEB-INF/jsp和/webapp/WEB-INF/view中添加JSP 误差
我有一个带应用程序的spring boot应用程序。属性文件和spring数据jpa。在应用程序中,我有一个外部依赖项,需要加载外部Spring项目的bean,该项目具有基于xml的配置。外部xml有自己的组件扫描和spring jpa设置,可以与应用程序中提供该DB属性的其他DB进行交互。属性文件,我正在使用@ImportResources将其bean注入父应用程序。但是,当我在做这个sprin