【问题标题】:Using Kafka to decouple web-tier from business-logic code使用 Kafka 将 Web 层与业务逻辑代码分离
【发布时间】:2016-03-08 00:42:58
【问题描述】:

我有一些概念性思维障碍。我正在考虑使用 Kafka,如下所示:

---http-requests---> [Web Tier]

[Web Tier] ----composes message and publishes----> [Kafka Topic]

[Kafka Topic] <----consumes message------ [Engine Logic]

[Engine Logic] -----computes, api-calls, publishes result message----> [Kafka Topic]

[Kafka] ---???? somehow get result message to Web Tier---> [Web Tier]

[Web Tier] -----renders HTML and sends http response--->

使用非阻塞网络服务器(例如 Jetty),http 请求将保持打开状态,但不会阻塞。是否可以以请求/响应方式使用 Kafka?也就是说,Web Tier 是否可以向某个 Topic 发布消息,然后 Kafka 会知道它必须提供响应吗?还是由 Web 层负责轮询主题并查看是否有响应?

我想我要问的是使用 Kafka 作为 Web 层和引擎逻辑所依赖的“接口”的最佳方式是什么,以便 Web 层和引擎之间没有直接耦合?谢谢。

【问题讨论】:

    标签: apache-kafka


    【解决方案1】:

    我会说 Kafka 不太适合您的用例。

    Web 层有责任对主题进行轮询并查看是否有响应。

    我预见的几个问题:

    1. Kafka 旨在仅在请求时传递消息。在您的示例中,一旦数据到达第二个 Kafka 主题。它会一直待在那里,直到 Web 层对其进行轮询。
    2. 没有很好的方法可以从 Kafka SO Question 请求特定消息。在您的 Web 层中,如果您轮询 Kafka 服务器,您可能会收到 10 条消息,您可能会收到 0 条消息。如果您收到 10 条消息,则必须检查这 10 条消息中的任何一条是否是您要查找的消息。如果不是,您将不得不再次投票。可能会执行多次,具体取决于您的特定引擎逻辑完成所需的时间。

    在上面提到的 SO 问题中,在 cmets 中,OP 说他使用了 Mongo DB,因此他可以查询特定消息。

    【讨论】:

      猜你喜欢
      • 2014-09-04
      • 1970-01-01
      • 1970-01-01
      • 2013-12-15
      • 2011-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多