ActiveMQ サービス内にデプロイされた Apache Camel モジュールを使用します。
Spring DSL を使用routeContext
し、ファイルにルート定義 ( として実装) があるとしFilteringRouteContext.xml
ます (簡略化):
<routeContext id="filteringRouteContext" xmlns="http://camel.apache.org/schema/spring">
<route id="myFilteringRoute">
<from uri="direct:filteringRoute"/>
<idempotentConsumer messageIdRepositoryRef="idempotentRepository" skipDuplicate="false">
<simple>${header.JMSType}</simple>
<filter>
<property>CamelDuplicateMessage</property>
<stop/>
</filter>
</idempotentConsumer>
</route>
</routeContext>
次に、他の XML ファイルで Camel Context を構成しました (簡略化)。
<import resource="classpath:FilteringRouteContext.xml"/>
<camelContext xmlns="http://camel.apache.org/schema/spring">
<routeContextRef ref="filteringRouteContext"/>
<route id="myRoute1">
<from uri="activemq:topic:source1" />
<to uri="direct:filteringRoute" />
<to uri="activemq:topic:target1" />
</route>
<route id="myRoute2">
<from uri="activemq:topic:source2" />
<to uri="direct:filteringRoute" />
<to uri="activemq:topic:target2" />
</route>
<route id="myRoute3">
<from uri="activemq:topic:source3" />
<to uri="direct:filteringRoute" />
<to uri="activemq:topic:target3" />
</route>
</camelContext>
<bean id="idempotentRepository"
class="org.apache.camel.processor.idempotent.MemoryIdempotentRepository">
<property name="cacheSize" value="10"/>
</bean>
IoC 用語を使用して、依存関係ごとにインスタンスとして宣言された共有ルート (id=を使用myFilteringRoute
)を使用したいので、単一の Camel コンテキスト (id= 、、を使用) からの各ルートは、その共有ルート (id を使用) の独自のインスタンスを使用する必要があります。 = )、個別の内部状態、Bean インスタンスなど。filteringRouteContext
myRoute1
myRoute2
myRoute3
myFilteringRoute
つまり、Camel Context からの各ルート (id= myRoute1
, myRoute2
,を使用myRoute3
)は、共有ルート(id=を使用) の同じインスタンスを使用してはなりませんmyFilteringRoute
が、独自の完全に別個のインスタンス(完全に分離された内部状態と Bean インスタンスを使用)を持つ必要があります。
私の共有ルート ( id=を使用) は、myFilteringRoute
さまざまなスコープ ( 、 など) を持つ可能性のあるより多くの Bean を使用する可能性があることをsingleton
考慮してください。prototype
request
私の質問は次のとおりです。単一の Camel コンテキストを使用してこの目標を達成できますか、または別の Camel コンテキストにルート (id= myRoute1
、myRoute2
、myRoute3
) を配置する必要がありますか? 私の問題の最善の解決策は何ですか?
複数の Camel コンテキストを使用し、各コンテキストが Bean を使用して ActiveMQ ( org.apache.activemq.camel.component.ActiveMQComponent
)、または内部リソースまたはシステム リソースを消費する他の Bean と通信する場合、パフォーマンスに重大な影響がありますか?
それとも、Spring DSL の代わりに Java DSL を使用して問題を解決した方がよいでしょうか?
ありがとうございました。