-1

activemq の消費者側にキャメルを統合する必要があります。私はactivemqをセットアップし、消費者言語でキャメルを(Java DSLを使用して)設定しようとしましたが、うまくいきません。コードは次のとおりです。

public class TestConsumer {
    static String url = ActiveMQConnection.DEFAULT_BROKER_URL;
    static String subject = "Test-AMQ";

    public static void main(String[] args) throws Exception {
        CamelContext context = new DefaultCamelContext();
        BrokerService broker = new BrokerService();
        //broker.addConnector(url);
        //broker.setBrokerName("localhost");
        broker.start();

        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("vm://localhost?create=false&waitForStart=10000");
        context.addComponent("jms", JmsComponent.jmsComponentAutoAcknowledge(connectionFactory));
        context.addRoutes(new Routes());
        context.start();
    }
}

class Routes extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        from("jms:"+new TestConsumer().subject).process(new Processor() {
            @Override
            public void process(Exchange arg0) throws Exception {
                System.out.println("Camel Test Message: " + arg0.toString());
            }
        });
    }
}
4

1 に答える 1

4

あなたと同様に機能する例。

import org.apache.activemq.ActiveMQConnection;
//import org.apache.activemq.broker.BrokerService;
import org.apache.activemq.camel.component.ActiveMQComponent;
import org.apache.camel.CamelContext;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;

public class TestConsumer {
  static String url = ActiveMQConnection.DEFAULT_BROKER_URL;
  static String subject = "Test-AMQ";

public static void main(String[] args) throws Exception {
    CamelContext context = new DefaultCamelContext();
  //  BrokerService broker = new BrokerService();

  //  broker.start();

    ActiveMQComponent comp = ActiveMQComponent.activeMQComponent("vm://localhost?broker.persistent=false");
    context.addComponent("jms",comp); 
    context.addRoutes(new Routes());
    context.start();        
}
}

class Routes extends RouteBuilder {
@Override
public void configure() throws Exception {
    from("jms:"+TestConsumer.subject).process(new Processor() {
        @Override
        public void process(Exchange arg0) throws Exception {
            System.out.println("Camel Test Message: " + arg0.toString());
        }
    });

    from("timer://foo?fixedRate=true&period=2000").setBody(simple("Hello, World")).to("jms:"+TestConsumer.subject);
}
}

ただし、セットアップが最終的にどのように機能するかはわかりません。VM トランスポートを使用する場合、実際には専用ブローカーを起動する必要はありませんが、VM インスタンスを使用します。消費される ActiveMQ キューへのいくつかのサンプル メッセージを起動するタイマー ルートを配置するだけです。

于 2012-09-02T07:52:13.750 に答える