网站添加百度地图标注,wordpress4.7安装,驻马店市做网站,wordpress下载安装java ee的小程序您是否曾经想过将现有的Java EE单体应用程序重构为基于微服务的应用程序需要做什么#xff1f; 该博客说明了一个简单的购物车示例如何转换为基于微服务的应用程序#xff0c;以及围绕它的一些担忧。 整体和基于微服务的应用程序的完整代码库位于#xff1a… java ee的小程序 您是否曾经想过将现有的Java EE单体应用程序重构为基于微服务的应用程序需要做什么 该博客说明了一个简单的购物车示例如何转换为基于微服务的应用程序以及围绕它的一些担忧。 整体和基于微服务的应用程序的完整代码库位于 github.com/arun-gupta/microservices 。 继续阅读以获取更多荣耀 Java EE Monolith Java EE整体应用程序通常定义为WAR或EAR档案。 该应用程序的全部功能都打包在一个单元中。 例如在线购物车可能包含用户目录和订单功能。 所有网页都在应用程序的根目录中所有相应的Java类都在WEB-INF/classes目录中资源在WEB-INF/classes/META-INF目录中。 让我们假设您的整体设计不是设计成一个分散的大泥巴 而应用程序是按照良好的软件体系结构构建的。 一些常见的规则是 分离关注点可能使用Model-View-Controller 使用定义明确的API的高内聚和低耦合 不要重复自己干 接口/ API和实现是分开的并且遵循Demeter定律 。 类不会直接调用其他类因为它们恰好位于同一存档中 使用域驱动设计将与域/组件相关的对象保持在一起 YAGNI或您不需要它不要构建您现在不需要的东西 这是一个简单的购物车整体WAR存档的样子 此整体应用程序具有 网页例如.xhtml文件用于用户目录和订单组件打包在归档的根目录中。 这些网页还打包了在不同网页之间共享的所有CSS和JavaScript资源。 这三个组件的类在WEB-INF/classes目录中的单独软件包中。 多个类使用的所有实用程序/公共类也都打包在这里。 每个组件的配置文件打包在WEB-INF/classes/META-INF目录中。 该应用程序的任何配置文件例如分别连接和填充数据存储的persistence.xml和load.sql也都打包在此处。 它具有众所周知的体系结构IDE友好易于共享简化测试易于部署等常见优点 。 但同时也具有诸如敏捷性受限持续交付的障碍技术堆栈“卡住”技术债务增加等缺点 。 即使微服务如今已成为热门但整体还是不错的。 即使那些对您不起作用的企业也可能不会从迁移到微服务中获得很多或立即的收益。 其他方法如更好的软件工程和体系结构可能会有所帮助。 微服务既不是免费的午餐也不是灵丹妙药它需要大量的投资才能成功例如服务发现服务复制服务监视容器PaaS弹性等等。 除非您的系统过于复杂而无法作为一个整体进行管理否则甚至不要考虑使用微服务。 微服务高级版 Java EE的微服务架构 好了我已经听说了所有这些内容但是想知道之前/之后的内容即整体代码库的外观以及重构后的微服务代码库的外观。 首先让我们看一下整体架构 此体系结构中的关键部分是 在将用户订单和目录组件打包为单独的WAR文件的情况下应在功能上分解应用程序。 每个WAR文件应具有该组件所需的相关网页 15 类和配置文件。 Java EE用于实现每个组件但是对堆栈没有长期承诺因为不同的组件使用定义良好的API 14 相互通信。 每个档案都有自己的数据库即不共享数据存储。 这允许每个微服务发展和选择最合适的数据存储类型-关系NoSQL平面文件内存中或其他。 每个组件都将向服务注册中心注册。 这是必需的因为每个服务的多个无状态实例可能在给定的时间运行并且它们的确切端点位置仅在运行时才知道 17 。 Netflix Eureka Etcd Zookeeper是该领域的一些选项 更多详细信息 。 如果组件需要相互通信这很常见则可以使用预定义的API进行通信。 实现同步的REST或实现异步通信的Pub / Sub是实现此目的的常用方法。在我们的案例中Order组件发现用户和目录服务并使用REST API与它们进行对话。 该应用程序的客户端交互是在另一个应用程序在本例中为Shopping Cart UI中定义的。 该应用程序主要从服务注册表中发现服务并将它们组合在一起。 它应该主要是一个哑代理在其中调用不同组件的UI页面以显示界面 18 。可以通过提供标准CSS / JavaScript资源来实现常见的外观。 该应用程序相当琐碎但至少强调了一些基本的体系结构差异。 整体与微服务 下面比较了基于单体和基于微服务的应用程序的一些统计信息 特性 整体式 微服务 档案数量 1个 5 合同JAR〜4 KB 顺序WAR〜7 KB 用户WAR〜6 KB 目录WAR〜8 KB Web UIWAR27 KB 网页 8 8见下文 配置文件 4 web.xml template.xhtml persistence.xml load.sql 每个档案3个 persistence.xml load.sql web.xml 类文件 12 26 每个档案的服务注册 服务发现类 每个档案的应用程式类别 档案总大小 24 KB 〜52 KB总计 整体应用程序的代码库位于 github.com/arun-gupta/microservices/tree/master/monolith/everest 支持微服务的应用程序的代码库位于 github.com/arun-gupta/microservices/tree/master/microservice 问题和待办事项 以下是将整体重构为基于微服务的应用程序时遇到的问题和TODO Java EE已经可以使用EAR封装对应用程序进行功能分解。 应用程序的每个组件都可以打包为WAR文件并捆绑在EAR文件中。 他们甚至可以通过这种方式共享资源。 现在这不是真正的微服务方式但这可能是使您入门的过渡步骤。 但是请注意 FlowScoped bean没有在EAR中正确激活 WFLY-4565 。 使用JSF资源库模板提取所有模板文件。 目前所有网页都在everest模块中但它们应该位于每个组件中 15 。 将整体数据库拆分为多个数据库需要为每个应用程序使用单独的persistence.xml和DDL / DML脚本。 同样需要相应地创建迁移脚本例如使用Flyway。 必须为所有组件创建一个REST接口该接口需要被另一个组件访问。 UI仍在单个Web应用程序中。 而是应将其包含在已分解的WAR 15 中然后再次在哑代理中进行组合。 闻起来像portlet吗 在PaaS中部署多个WAR文件 12 每个微服务都应易于部署在容器中 6 这是单片应用程序的类的完整列表 ./target/classes/org/javaee7/wildfly/samples/everest/cart/Cart.class
./target/classes/org/javaee7/wildfly/samples/everest/cart/CartItem.class
./target/classes/org/javaee7/wildfly/samples/everest/catalog/CatalogItem.class
./target/classes/org/javaee7/wildfly/samples/everest/catalog/CatalogItemBean.class
./target/classes/org/javaee7/wildfly/samples/everest/catalog/CatalogItemType.class
./target/classes/org/javaee7/wildfly/samples/everest/checkout/Order.class
./target/classes/org/javaee7/wildfly/samples/everest/checkout/OrderBean.class
./target/classes/org/javaee7/wildfly/samples/everest/checkout/OrderItem.class
./target/classes/org/javaee7/wildfly/samples/everest/checkout/Shipping.class
./target/classes/org/javaee7/wildfly/samples/everest/uzer/Uzer.class
./target/classes/org/javaee7/wildfly/samples/everest/uzer/UzerBean.class
./target/classes/org/javaee7/wildfly/samples/everest/uzer/UzerItem.class 这是基于微服务的应用程序的类的完整列表 ./catalog/target/classes/org/javaee7/wildfly/samples/everest/catalog/ApplicationConfig.class
./catalog/target/classes/org/javaee7/wildfly/samples/everest/catalog/CatalogItem.class
./catalog/target/classes/org/javaee7/wildfly/samples/everest/catalog/CatalogItemREST.class
./catalog/target/classes/org/javaee7/wildfly/samples/everest/catalog/CatalogItemType.class
./catalog/target/classes/org/javaee7/wildfly/samples/everest/catalog/ServiceRegistration.class
./everest/target/classes/org/javaee7/wildfly/samples/everest/cart/Cart.class
./everest/target/classes/org/javaee7/wildfly/samples/everest/cart/CartItem.class
./everest/target/classes/org/javaee7/wildfly/samples/everest/catalog/CatalogBean.class
./everest/target/classes/org/javaee7/wildfly/samples/everest/catalog/CatalogItem.class
./everest/target/classes/org/javaee7/wildfly/samples/everest/checkout/Order.class
./everest/target/classes/org/javaee7/wildfly/samples/everest/checkout/OrderBean.class
./everest/target/classes/org/javaee7/wildfly/samples/everest/checkout/OrderItem.class
./everest/target/classes/org/javaee7/wildfly/samples/everest/checkout/Shipping.class
./everest/target/classes/org/javaee7/wildfly/samples/everest/ServiceDiscovery.class
./everest/target/classes/org/javaee7/wildfly/samples/everest/ServiceDiscoveryStatic.class
./everest/target/classes/org/javaee7/wildfly/samples/everest/ServiceDiscoveryURI.class
./everest/target/classes/org/javaee7/wildfly/samples/everest/ServiceDiscoveryZooKeeper.class
./everest/target/classes/org/javaee7/wildfly/samples/everest/uzer/UzerBean.class
./everest/target/classes/org/javaee7/wildfly/samples/everest/uzer/UzerItem.class
./order/target/classes/org/javaee7/wildfly/samples/everest/order/ApplicationConfig.class
./order/target/classes/org/javaee7/wildfly/samples/everest/order/Order.class
./order/target/classes/org/javaee7/wildfly/samples/everest/order/OrderItem.class
./order/target/classes/org/javaee7/wildfly/samples/everest/order/OrderREST.class
./user/target/classes/org/javaee7/wildfly/samples/everest/uzer/ApplicationConfig.class
./user/target/classes/org/javaee7/wildfly/samples/everest/uzer/UserREST.class
./user/target/classes/org/javaee7/wildfly/samples/everest/uzer/Uzer.class 同样完整的代码库位于github.com/arun-gupta/microservices 。 未来话题 本系列中的一些未来主题将是 微服务是否需要容器 如何使用容器部署多个微服务 如何轻松监控所有这些服务 A / B测试 使用微服务和容器进行连续部署 您还想看些什么 请享用 翻译自: https://www.javacodegeeks.com/2015/06/monolithic-to-microservices-refactoring-for-java-ee-applications.htmljava ee的小程序