ActiveMQとQuarkus、Apache Camelで、画像アップロード処理をしたい。 その2 Consumer/Apache Camel編

TL;DR

前回

Apache CamelとQuarkusの第一歩

Routeの修正

上記のサンプルだと、少々使いづらい。 Routesクラスを以下のように修正します。

  • 継承する親クラスを EndpointRouteBuilder にします。2
  • クラスに @ApplicationScoped アノテーションを付けます。
    • RoutesクラスがDI対象に含まれます。

ActiveMQからのメッセージ受信

  • camel-quarkus-sjms2を依存関係に加えます。
    • 諸々必要なコンポーネントが自動で入ります。
    • ActiveMQ/JMSを通じて、メッセージを受信するためのコンポーネントには、camel-activemq / camel-jmsがあります。
      • このコンポーネントには、Spring Frameworkのライブラリが依存で入ってしまうのです。
      • ネット上のサンプルプログラムは、Spring-BootベースのConsumerが多いからでしょうね。
  • quarkus-artemis-jmsを依存関係に加えます
    • camel-quarkus-sjms2には、ActiveMQとの通信をする、ConnectionFactoryの実装クラスが入ってないのです。
    • Artemis JMSの記述のようにapplication.propertiesに設定を記述すると、ConnectionFactoryもDI対象になります。
    • Quarkus Artemis BOMは、Quarkusと違うので、別途依存関係に追加します。
@ApplicationScoped
public class Routes extends EndpointRouteBuilder {
  private final ConnectionFactory connectionFactory;

  @Override
  public void configure() throws Exception {
    from(sjms2("topic:upload.image").connectionFactory(this.connectionFactory))
        // TODO 何かを処理
        .end();
  }

  @Inject
  public Routes(ConnectionFactory connectionFactory) {
    this.connectionFactory = connectionFactory;
  }
}

Routesクラスは、このような記述になるでしょうか。


  1. コンソールにログが出ますので、それで動作確認でしょうか。 ↩︎

  2. Endpoint DSL :: Apache Camel ↩︎