ActiveMQとQuarkus、Apache Camelで、画像アップロード処理をしたい。 その2 Consumer/Apache Camel編
- Quarkus - Start coding with code.quarkus.redhat.com で、雛形を作ります。
camel-quarkus-sjms2
/quarkus-artemis-jms
を依存関係に含めます。- ルート用のクラスは、DI対象に含めます。
ActiveMQ Altemis
用の設定を、application.properties
に記します。
- Camel Extensions for Quarkus と Camel K の入門 - 赤帽エンジニアブログ
- はい、この通りに、Maven/Gradeleでプロジェクトを作って、実行してみましょう。1
- Quarkus - Start coding with code.quarkus.redhat.com
上記のサンプルだと、少々使いづらい。 Routes
クラスを以下のように修正します。
- 継承する親クラスを
EndpointRouteBuilder
にします。2- タイプセーフで、「流れるようなインターフェース」でルートが書けるようになります。
- クラスに
@ApplicationScoped
アノテーションを付けます。Routes
クラスがDI対象に含まれます。
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
クラスは、このような記述になるでしょうか。
-
コンソールにログが出ますので、それで動作確認でしょうか。 ↩︎