【问题标题】:How do I add Camel Support to an existing application如何将 Camel 支持添加到现有应用程序
【发布时间】:2014-03-10 11:50:31
【问题描述】:

我想“打开”基于应用程序的产品,以便与 Camel 进行企业集成。也就是说,我希望购买我的应用的客户能够通过 Camel 向应用提供信息,而无需在我的应用上创建完整的公共 API。

我已经阅读了 很多 骆驼文档、示例,甚至书籍,但我仍然无法从概念上开始。 首先,我可以让 Camel 运行:我的应用支持 Spring,我只是不知道如何“部署”它。

让我对用例进行过度简化:

  • 假设我希望我的应用程序偶尔弹出一个对话框,其中包含一条消息。我的网络应用控制何时弹出对话框。
  • 我希望消息来自客户拥有的其他软件系统 - 我希望通过 Camel 发送消息。 (可能是 ActiveMQ,可能是电子邮件,可能是存放在某个地方的文件,Camel 支持的所有东西)
  • 客户早先在我的应用程序中配置了此消息,并带有要获取消息的密钥。所以这是一个 InOut 交换(用骆驼术语)。换句话说:
    • 在配置时,客户说:“我有 'foo' 消息需要在对话框弹出时显示”。
    • 在运行时,我的应用程序说:“嘿骆驼,我要显示一个对话框,你有一个 'foo' 消息让我在其中显示吗?”

就是这样。很简单,我应该能够根据我所阅读的内容轻松解决它,但我不能完全掌握我的案例在示例和教程中的确切位置。我认为这种脱节在于,其中大多数都在解决特定解决方案中的特定集成问题。而我正在将我的应用程序开放为一种通用集成 - 我没有关于骆驼客户方面的任何细节。

所以要回答具体问题:

  1. 我假设我的应用程序需要是骆驼端点,这是正确的吗?例如。客户在我的应用中设置了通往此对话框弹出功能的路线。

  2. 在这种情况下,谁应该真正运行骆驼,客户、我的应用程序,还是两者兼而有之? (我认为“运行”骆驼意味着启动 CamelContext 对吗?我可以在我的应用程序中执行此操作,没问题,但这就是我想要的吗?)

  3. 具体内容是什么:我是创建消费者还是生产者?

  4. 从客户的角度来看,它是什么样的?他们如何向此端点发送消息?他们如何获得请求?客户是否需要访问我的 API,或者他们只需要 Camel?他们还需要启动 CamelContext 吗?

【问题讨论】:

  • 松耦合意味着您应该创建一种不太具体的方式来与应用程序集成。
  • 你是什么意思?如何打开我的应用程序来请求和获取骆驼消息紧耦合?
  • 您要求打电话给您的人使用 Camel,而不是例如他们使用 HTTP。如果添加 REST 或 Web 服务 API,任何技术都可以访问它。包括骆驼。

标签: apache-camel


【解决方案1】:

第一季度。我假设我的应用程序需要是骆驼端点,这是正确的吗?例如。客户在我的应用中设置了通往此对话框弹出功能的路线。

A1。这是一种选择,用骆驼术语来说,您的应用程序将成为骆驼组件。但是,我认为这将是一个糟糕的决定。然后,您将您的应用程序绑定为依赖骆驼。

您应该做的是在您的应用程序中添加一些接口,可以是 Web 服务,也可以是 active-mq 等。这是 camel 与您的应用程序通信的地方。

第二季度。在这种情况下,谁应该真正运行骆驼,客户,我的应用程序,或两者兼而有之? (我认为“运行”骆驼意味着启动 CamelContext 对吗?我可以在我的应用程序中执行此操作,没问题,但这就是我想要的吗?)

A1。您应该将骆驼服务与您的应用程序分开开发。它是一个集成框架。它们应该完全相互分离。它可以作为应用程序的单独服务启动,侦听其不同的端点(电子邮件、a-mq、文件删除)并将此信息路由到应用程序公开的接口。

第三季度。具体是什么:我是创建消费者还是生产者?

您将创建消费者来使用从客户发送到您的应用程序的请求(电子邮件、a-mq、文件删除)。生产者将用于将这些消息发送到您的应用程序界面。

第四季度。从客户的角度来看,它是什么样的?他们如何向该端点发送消息?他们如何获得请求?客户是否需要访问我的 API,或者他们只需要 Camel?他们还需要启动 CamelContext 吗?

Camel 有许多客户可以使用的不同消费者,它侦听电子邮件、公开 Web 服务、等待文件丢失。客户需要访问这些端点,以便他们可以与您的系统进行通信。他们不需要启动骆驼上下文,骆驼位于您公开的接口后面,并将消息路由到您定义的端点。

但是,您真的需要所有这些端点吗?在您的应用程序中设置一个客户可以使用的接口不是更明智吗?

【讨论】:

  • 嗯,谢谢,但不确定这正是我要找的。在我的产品中创建骆驼依赖项没有问题。在向我的客户提供公共接口(或任何 API)时,我遇到了更大的问题。我希望这种将消息指定给我的对话框的能力是我的应用程序的 feature。如果客户必须学习 Camel 才能做到这一点,这不是问题。我的问题是如何启用它。我看过自定义组件,但对于本应简单的事情似乎付出了很多努力。
  • 只是对话框,你能解释一下你的用例吗?
  • 它甚至不是一个对话框,但这是描述用例的最简单方式。我希望我的客户能够根据他们的需要配置任意数量的这些,根据他们的密钥为对话消息提供他们自己的信息。假设他们为 foo 创建了一个,为 bar 创建了一个。该应用程序现在有 2 个按钮,分别称为“foo”和“bar”。每次用户单击“foo”时,都会弹出一个对话框,我的应用程序将调用 - 使用骆驼 - 并说“给我 'foo' 对话框中的字符串”。看起来很简单。
  • Camel 将提供一个公共接口,但您不能公开“Camel 端点”,它将是一个 http 端点、JMS 端点等。Camel 位于您的应用程序和它公开的接口之间。如果您的应用程序和客户应用程序在不同的机器上,它们就不可能拥有相同的 CamelContext。
猜你喜欢
  • 1970-01-01
  • 2011-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-05
  • 2020-06-18
  • 1970-01-01
相关资源
最近更新 更多