Cayambe monolith

 

它是一个古老的在线交易网站,我们试图完成对他的改造。先看看他的现状:

1. 页面非常古老

企业级Java微服务2:开发一个简单的Restful微服务

2. 属于单体架构 

企业级Java微服务2:开发一个简单的Restful微服务

改造后的预期架构:

企业级Java微服务2:开发一个简单的Restful微服务

 

迁移策略:先拆分管理网站

 

将管理页面拆分出来,以便于单独对用户交互的页面进行扩展,而不是将管理页一并扩展。(解决单体的问题)

原有的管理页面:

企业级Java微服务2:开发一个简单的Restful微服务

功能相对简单,页面非常古老。

我们将使用JAX-RS与ReactJS进行改造:

企业级Java微服务2:开发一个简单的Restful微服务

目前,我们要完成的是这一部分的改造:

 

企业级Java微服务2:开发一个简单的Restful微服务 

 

管理页面需要提供的功能

 

企业级Java微服务2:开发一个简单的Restful微服务

通过UI页面完成对category的增删改查操作。

此功能模块的架构是:

企业级Java微服务2:开发一个简单的Restful微服务

视图层使用ReactJS, API层提供Rest接口,数据层使用JPA提供数据持久化服务。

在传统的设计架构中,所有的层需要部署到同一个war包里,导致管理和扩展的不便。

我们将其采用微服务的方式进行部署:

企业级Java微服务2:开发一个简单的Restful微服务

将接口层及数据访问层合并为微服务层,对外通过rest接口的形式提供服务,将原有的单体架构拆分为视图层和微服务层。

 

因为这样视图层与接口分别部署,会带来非同源访问的问题,需要支持CORS:

企业级Java微服务2:开发一个简单的Restful微服务

如果你的微服务是在网关后面提供服务的,直接在网关进行CORS配置即可。

 

API层开发

 

企业级Java微服务2:开发一个简单的Restful微服务

这里我们仅仅考虑API的设计,先忽略JPA的具体实现。

 

设计应用的根目录:

企业级Java微服务2:开发一个简单的Restful微服务

这里给出了应用的根目录(使用ApplicationPath注解)

 

设计rest节点:

企业级Java微服务2:开发一个简单的Restful微服务

使用@Path标记当前节点的url

@PersistenceContext表示持久层上下文。

@Produces表示返回的数据转为json

@GET表示动作方法为GET

 

删除动作节点:

 

企业级Java微服务2:开发一个简单的Restful微服务

 

根据categoryId删除分类。

@Transactional表示开启事务。

 

添加动作节点:

 

企业级Java微服务2:开发一个简单的Restful微服务

企业级Java微服务2:开发一个简单的Restful微服务

 

@Consumes表示接受的数据类型

 

配置打包插件

 

企业级Java微服务2:开发一个简单的Restful微服务

 

启动项目

 

启动API:

企业级Java微服务2:开发一个简单的Restful微服务

启动UI:

企业级Java微服务2:开发一个简单的Restful微服务

 

相关文章: