Apache Camel Support
Spring 集成提供了一个 API 和配置,用于与在同一应用程序上下文中声明的 Apache Camel 端点进行通信。
您需要将此依赖项包含在项目中:
Spring Integration 和 Apache Camel 实现了企业集成模式,并提供了一种方便的方法来编写它们,但这些项目使用不同的方法来实现它们的 API 和抽象。 Spring 集成完全依赖于 Spring Core 的依赖注入容器。 它使用许多其他Spring项目(Spring Data,Spring AMQP,Spring for Apache Kafka等)来实现其通道适配器。 它还将抽象用作开发人员在编写集成流时需要注意的一等公民。 另一方面,Apache Camel不提供消息通道的一等公民抽象,而是建议通过内部交换来编写其路由,隐藏在API中。 此外,它需要一些额外的依赖项和配置才能在 Spring 应用程序中使用。MessageChannel
即使对于最终的企业集成解决方案来说,如何实现其部分并不重要,开发人员的经验和高生产力也会被考虑在内。 因此,开发人员可能会出于多种原因选择一个框架而不是另一个框架,或者如果某些目标系统支持存在差距,则两者兼而有之。 Spring Integration 和 Apache Camel 应用程序可以通过许多外部协议相互交互,它们为其实现了通道适配器。 例如,Spring 集成流可以将一条记录发布到 Apache Kafka 主题,该主题由消费者端的 Apache Camel 端点使用。 或者,Apache Camel路由可能会将数据写入SFTP文件的目录中,该文件由Spring Integration的SFTP入站通道适配器轮询。 或者,在同一个 Spring 应用程序上下文中,它们可以通过抽象进行通信。ApplicationEvent
为了使开发过程更容易,并避免不必要的网络跃点,Apache Camel提供了一个模块,通过消息通道与Spring Integration进行通信。 所需要的只是从应用程序上下文中引用 来发送或使用消息。 当 Apache Camel 路由是消息流的发起者并且 Spring 集成仅作为解决方案的一部分发挥支持作用时,这非常有效。MessageChannel
为了获得类似的开发人员体验,Spring Integration 现在提供了一个通道适配器来调用 Apache Camel 端点,并可以选择等待回复。 没有入站通道适配器,因为从 Spring 集成 API 和抽象的角度来看,订阅 a 以使用 Apache Camel 消息就足够了。MessageChannel
Apache Camel 的出站通道适配器
这是一个实现,可以在单向(默认)和请求-答复模式下工作。 它使用 a 发送(或发送和接收)到 . 交互模式可以通过该选项进行控制(可以在运行时通过 SpEL 表达式根据请求消息进行评估)。 目标 Apache Camel 端点可以显式配置,也可以配置为要在运行时评估的 SpEL 表达式。 否则,它将回退到 . 可以提供一个内联的显式组件,而不是指定端点,例如调用 Spring 集成中不支持通道适配器的 Apache Camel 组件。CamelMessageHandler
AbstractReplyProducingMessageHandler
org.apache.camel.ProducerTemplate
org.apache.camel.Endpoint
ExchangePattern
defaultEndpoint
ProducerTemplate
LambdaRouteBuilder
此外,可以提供(默认实现),以确定在 Spring 集成和 Apache Camel 消息之间映射哪些标头。 默认情况下,将映射所有标头。HeaderMapper
CamelHeaderMapper
支持模式调用和生成用于回复处理(如果有)的模式。CamelMessageHandler
async
ProducerTemplate.asyncSend()
CompletableFuture
可以通过 SpEL 表达式进行自定义,该表达式的计算结果必须为 .exchangeProperties
Map
如果未提供 ,则通过从应用程序上下文解析的 Bean 创建该 bean。ProducerTemplate
CamelContext
对于 Java DSL 流定义,可以使用工厂提供的一些变体配置此通道适配器:Camel