我可以将 Kafka 与 Apache Camel 一起使用来替代 ActiveMQ 吗?

Can I use Kafka with Apache Camel as a replacement of ActiveMQ?

我有一个使用 Spring Boot 构建的 Camel 应用程序。此应用程序使用 ActiveMQ 在两个系统之间传递消息。现在我需要添加根据配置在 ActiveMQ 和 Apache Kakfa 之间选择作为消息代理的能力。

这是可以做到的吗?我对 Kafka 的了解为零,但就我正在阅读的内容而言,它的工作方式与 ActiveMQ 不同。

假设我的 Camel 应用程序像这样向队列发布消息:

from("direct:inbound")
     //random stuff happening
    .to(ExchangePattern.InOnly, "jms:queue:custom-queue")

我的 application.yml 这个配置

spring:
  activemq:
    packages:
      trusted:
      - java.util
      - java.lang
    broker-url: tcp://localhost:61616

我可以只用 Kafka 特定的配置替换 activemq 配置并期望它会神奇地工作吗?至少这是我的 PM 所期望的。

Spring Cloud 这样做。只需添加特定的活页夹即可使用各种消息系统。

起点是为 ActiveMQ 和 Kafka 创建“适配器路由”,并根据现有配置有条件地创建它们

这些适配器路由必须处理所有消息系统特定的东西以便“主要路由”不需要关心这些(即hexagon architecture)。

  • 您的核心逻辑在使用 direct 个端点的“主要路线”中
  • 有一个ActiveMQ消费者转发到主路由
  • 有一个Kafka消费者转发到主路由
  • 有一个 ActiveMQ 生产者生成从主要路由接收的消息
  • 有一个 Kafka 生产者生产从主要路由接收到的消息
  • 主要路由向活动生产者发送消息,例如使用Recepient List EIP

但是,ActiveMQ和Kafka有很大的不同。如果你真的想走这条路,它可能会变得非常颠簸:-)