6

埋め込み Camel ルーティングで、リモート JMS キューへの耐久性のあるコンシューマーがあります。マスター/スレーブ構成でこの種のルーティングを行うことは可能ですか? 現在、Camel ルートは、実際のフェイルオーバーが発生したときではなく、スレーブ ActiveMQ が開始されたときにすでに開始およびアクティブ化されているようです。

これにより、スレーブ インスタンスは、マスターにも送信される同じメッセージを受信するようになり、これにより、フェイルオーバー時に重複したメッセージがキューに到着します。

ActiveMQ 5.3 と Apache Camel 2.1 を使用しています。

4

3 に答える 3

3

残念ながら、スレーブブローカーが起動すると、CamelContextとルートも起動します。ただし、次のようにすることでこれを実現できます。

スレーブブローカーとともにデプロイされたcamelContextに、次のautoStartup属性を追加して、ルートが開始されないようにします。

<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring" autoStartup="false">

...

</camelContext>

次に、ActiveMQサービスインターフェイスを実装するクラスを作成する必要があります。このサンプルは次のようになります。

package com.fusesource.example;

import org.apache.activemq.Service;
import org.apache.camel.spring.SpringCamelContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* Example used to start and stop the camel context using the ActiveMQ Service interface
*
*/
public class CamelContextService implements Service
{
private final Logger LOG = LoggerFactory.getLogger(CamelContextService.class);
SpringCamelContext camel;

@Override
public void start() throws Exception {
    try {
        camel.start();
    } catch (Exception e) {
        LOG.error("Unable to start camel context: " + camel);
        e.printStackTrace();
    }
}

@Override
public void stop() throws Exception {
    try {
        camel.stop();
    } catch (Exception e) {
        LOG.error("Unable to stop camel context: " + camel);
        e.printStackTrace();
    }
}

public SpringCamelContext getCamel() {
    return camel;
}

public void setCamel(SpringCamelContext camel) {
    this.camel = camel;
}
}

次に、ブローカーの構成ファイルactivemq.xmlに、サービスを登録するために以下を追加します。

<services>
      <bean xmlns="http://www.springframework.org/schema/beans" class="com.fusesource.example.CamelContextService">
          <property name="camel" ref="camel"/>
      </bean>
</services>

これで、スレーブブローカーがマスターとして引き継ぐと、サービスクラスでstartメソッドが呼び出され、ルートが開始されます。

これについてのブログもここに投稿しました:http://jason-sherman.blogspot.com/2012/04/activemq-how-to-startstop-camel-routes.html

于 2012-04-30T21:59:31.910 に答える
1

スレーブの Camel コンテキスト/ルートはマスターになるまで開始されないため (メッセージ ストア ファイルのロックがマスターによって解放されたとき)、これは問題になりません。

于 2010-02-15T21:38:24.577 に答える
0

camel routepolicies を使用すると、独自の条件に基づいて特定のルートを一時停止/再開することができます。 http://camel.apache.org/routepolicy.html

リーダーの選出に使用できる既存の ZookeeperRoutePolicy があります。 http://camel.apache.org/zookeeper.html (ページの下部を参照)

于 2013-01-05T16:43:02.793 に答える