当前位置: 首页 > 知识库问答 >
问题:

对ESB作为点对点集成的解决方案感到困惑

殳俊晤
2023-03-14

对于研究应用程序架构仍然很陌生,并且在一本关于微服务的书中很难接受一些想法。在我的阅读中,我遇到了ESB(企业服务总线)的旧思想及其在新服务和遗留应用程序之间协调消息的作用。ESB 被吹捧为点对点集成带来的问题的解决方案。微服务似乎是新公司采取的方法,作为创建敏捷、可扩展和弹性应用程序的事实标准。但是微服务不是使用点对点集成吗?从微服务构建的应用程序中的每个节点都直接与其他节点通信,对吗?我觉得我正在连接一些不应该连接的点。非常感谢任何帮助,提前感谢。

共有3个答案

尹雅健
2023-03-14

这两种方法都不是必要的排他性。微服务可以使用消息中间件(kafka、AMQP、Akka actor、JMS…)而不是直接的http通道进行通信。这取决于您的约束(主要是一致性)和部署策略。

每个选择都有他的优点和缺点,我个人建议不要将自己局限于一种方法,而是同时使用两种方法并根据每种情况进行选择

请参阅微服务:REST与消息和https://capgemini.github.io/architecture/is-rest-best-microservices/

萧韬
2023-03-14

微服务不一定严格依赖点对点集成。

与直接通信相关的问题通常使用消息代理在微服务体系结构中进行管理。如果通信可以异步完成 - “即发即弃” - 则发送消息的应用程序在接收器关闭时不会变得无法运行。当接收服务恢复时,消息仍将存在。

如果微服务在REST上集成,那么调用者需要知道如果其他服务没有响应,该如何反应。由于当您跨系统保存数据(即分布式事务)时,这会变得很麻烦,所以我只喜欢将REST用于数据检索API。并根据消息进行所有保存。

重要的是要注意,ESB不仅仅是消息传递,还有很多其他功能。在这里的答案中查看更多信息。

吕树
2023-03-14

ESB是许多公司已经实施的解决方案,以确保应用程序的互操作性和可追溯性。然而,它们是不允许水平扩展的重型解决方案,通常ESB采用两个节点的配置,主动-主动或主动-被动。

另一方面,ESB中的服务通常不是单独部署的,而是与其他服务一起部署在部署包中,这使得交付管理和测试更加复杂。

微服务旨在单独开发和部署,因此在云基础架构中可以轻松地横向扩展,动态增加实例数量。

应用程序之间的互操作性目前已经进入了后台,因为今天通过web服务的通信实际上已经很普遍了,尽管在一些非常旧的基础设施中可能仍然需要一些解决连接性的中间件。

 类似资料:
  • 所以我被react应用程序中的一个bug卡住了(一般来说,我是React和JS的新手),我想过滤公司名称列表,这样它们都是唯一的,不会重复。所以我打开github copilot,得到了一个可行的解决方案,但是我不知道为什么或者它在做什么。有人能帮我吗? 我不明白如何[...新 集(公司名称)] 过滤掉唯一名称或正在发生的事情。据我所知,您只能在已经存在的数组上使用 spread 运算符,因此也不

  • 我正在尝试提出一种解决方案,它涉及在连接操作之后应用一些逻辑,从多个中的中选择一个事件。这类似于reduce函数,但它只返回1个元素,而不是递增地返回。因此最终结果将是单个(,对,而不是一个 每个键保证只到达一次。 假设像上面这样的连接操作,它用4个生成了1个,成功地连接并收集在。现在,我想做的是,立即访问这些值,并执行一些逻辑以将正确匹配到一个。例如,对于上面的数据集,我需要(,和)。 将为每个

  • 所以我一直在读Kafka的语义学,我对它的工作原理有点困惑。 我理解生产者如何避免发送重复的消息(以防代理的ack失败),但我不明白的是,在消费者处理消息但在提交偏移量之前崩溃的情况下,一次是如何工作的。Kafka不会在这种情况下重试吗?

  • 问题内容: 我在理解jsonp请求如何工作的细节方面遇到麻烦。我已经阅读了包括jsonp上的wiki在内的多个资源,并且对于在进行jsonp调用时回调实际上如何保留从服务器返回的函数仍然很困惑。例如,在Wiki中,请求的源设置为: jsonp = parseResponse究竟实际在做什么/意味着什么?然后他们继续说有效负载是: 这是如何运作的?我对整个回调功能感到困惑。函数名称parseResp

  • 问题内容: 我可以理解以下定义: 每个对象都有一个标识,一个类型和一个值。一旦创建了对象,其身份就永远不会改变。您可能会认为它是对象在内存中的地址。所述操作者比较两个对象的身份; 该函数返回一个表示其身份的整数。 我认为上面的定义在创建“某物”时起作用,例如: 但是我不理解: 我还没有创建任何东西。那么整数“ 1”如何具有ID?这是否意味着只要我在Python Shell中“提及” 1,便立即将其

  • 问题内容: 我已经在eclipse中创建了一个项目,并添加了Maven依赖项。在Eclipse中,它表示我正在使用JRE 1.5。一切在Eclipse中都可以正常运行,例如,我可以运行测试。 当我尝试从终端运行时,出现以下错误。 …在-source 1.3中不支持泛型(使用-source 5或更高版本来启用泛型)… 看来,Maven认为我正在使用JRE 1.3,并且无法识别泛型或for-each循