我一直在网上搜索,但我对Java微服务究竟是什么感到困惑。我的意思是我知道什么是Web服务,并且我告诉每个维基的微服务如下:
在计算领域,微服务是一种软件架构风格,其中复杂的应用程序由使用与语言无关的API相互通信的小型独立进程组成。
和微服务的属性是:
微服务架构的属性:
它是一种架构服务很容易取代服务 围绕能力组织,例如用户界面前端, 推荐,后勤,计费等服务可以实施 使用不同的编程语言,数据库,硬件和 软件环境,取决于最适合的架构 对称而不是等级(生产者 - 消费者)
但我需要一个具体的java示例来了解我如何制作微服务。有没有人有你可以提供的例子?
答案 0 :(得分:8)
微服务就像它的名字所暗示的那样。它是一项服务非常简单的小型服务。
所以是的,就代码而言,您可能正在寻找REST服务。请注意,任何其他API样式都可以。它不一定是REST,但它必须语言无关才能吸引所有的好处。
但这个想法比那更重要。它背后的想法是,它们非常专业,并且没有大的业务工作流程。例如,如果您有一个处理付款的服务,则写入审核日志,然后通知客户。我不认为这是一个微服务。编写审计日志,可能是微服务,也通知客户,也处理信用卡。您的系统将通过调用3个必要的微服务来协调该业务工作流程(上述3个步骤)。因此,您的系统是协调员,您不必担心实施业务功能。
微服务不要试图想太多,他们只是按照他们的说法去做,但他们很快就会这么做。
所以简而言之。采用一个非常简单的业务功能,在它前面放置一个REST API。你有一个微服务。
微服务有几个有趣的属性:
但你也应该考虑一些缺点
在所有这些调用中维护一致的事务要困难得多。如果需要回滚,则需要JTA回滚所有REST调用。这可能是一种痛苦,并且在我的经历中表现不佳。
如果您没有一致的记录和一致的交易ID,那么通过系统跟踪交易以进行故障排除可能非常粗略
如果由于可能产生副作用的部署导致地面不断变化,找到缺陷的位置可能会很棘手。
显然,所有这些REST调用都可能非常昂贵。我不一定在谈论传输,因为它可能所有的微服务都存在于同一个数据中心。但是每次通过网络拨打电话时,你都必须整理/解组你的数据,这可能会很快降低CPU的成本。
答案 1 :(得分:2)
此示例基于以下服务:
Netflix Eureka:
Eureka是一种基于REST(Representational State Transfer)的服务,主要用于AWS云,用于定位服务,以实现中间层服务器的负载平衡和故障转移。
Eureka只是一个Service Registry,包含所有已启动的服务实例severname和端口详细信息。
Netflix Zuul:
Zuul是一项边缘服务,可提供动态路由,监控,弹性,安全性等。
它是微服务客户端的端点。所有其他服务实例都在安全框中保护,而Zuul则暴露给拦截所有客户请求的客户端。
Netflix功能区:
功能区是具有内置软件负载平衡器的进程间通信(远程过程调用)库。主要使用模型涉及具有各种序列化方案支持的REST调用。
功能区与Zuul结合使用,在N个微服务实例运行时,使用大量算法选择性能最佳的服务节点来处理请求。
简单来说,Zuul拦截客户端请求,并根据请求URL Zuul通过使用Eureka服务发现找到Microservice实例的ip和端口。功能区选择最佳服务节点来为请求提供服务,然后从Zuul请求路由到相应的微服务实例。
从我的项目角度看优势:
我们可以添加或删除' N'基于网络流量的服务节点数。
答案 2 :(得分:0)
以下是一些用Java编写的微服务的具体示例。这些微服务在设计上具有教育意义,因此希望这意味着您应该能够继续学习。
不建议从头开始编写Java微服务,因为有许多框架可以加速您的开发。用于微服务开发的两个最受欢迎的Java框架是Spring Boot和Dropwizard。
feed3 project使用Dropwizard实现了基本的多语种持久性新闻提要微服务。
feed8 project使用Spring Boot实现相同功能的微服务。
甚至还有一个Spring Boot vs Dropwizard article可以分析差异。