Java 驼峰作为JMS到JMS桥-不显示为AMQ使用者

Java 驼峰作为JMS到JMS桥-不显示为AMQ使用者,java,jms,activemq,ibm-mq,bridge,Java,Jms,Activemq,Ibm Mq,Bridge,我对JMS非常陌生,需要在AMQ和WMQ之间架桥,我在Camel文档中看到,他们建议使用Camel,而不是使用JMS到JMS的桥 首先,我试图让我的应用程序从AMQ中删除消息,并简单地记录它正在这样做,但每当我在Jetty中启动我的应用程序时,它不会在ApitopQueue上显示为消费者,因此不会从队列中删除消息 My application-context.xml(加载骆驼上下文) 路由生成器采用Java语言,如下所示 import org.apache.camel.LoggingLevel;

我对JMS非常陌生,需要在AMQ和WMQ之间架桥,我在Camel文档中看到,他们建议使用Camel,而不是使用JMS到JMS的桥

首先,我试图让我的应用程序从AMQ中删除消息,并简单地记录它正在这样做,但每当我在Jetty中启动我的应用程序时,它不会在ApitopQueue上显示为消费者,因此不会从队列中删除消息

My application-context.xml(加载骆驼上下文)

路由生成器采用Java语言,如下所示

import org.apache.camel.LoggingLevel;
import org.apache.camel.builder.RouteBuilder;

public class TopsBridgeRouteBuilder extends RouteBuilder {

    private final String amqToBridgeQueue;
    private final String bridgeToWmqQueue;
    private final String wmqToBridgeQueue;
    private final String bridgeToAmqQueue;

    public TopsBridgeRouteBuilder(String amqToBridgeQueue, String bridgeToWmqQueue, String wmqToBridgeQueue,  String bridgeToAmqQueue) {
        this.amqToBridgeQueue = amqToBridgeQueue;
        this.bridgeToWmqQueue = bridgeToWmqQueue;
        this.wmqToBridgeQueue = wmqToBridgeQueue;
        this.bridgeToAmqQueue = bridgeToAmqQueue;
    }

    @Override
    public void configure() throws Exception {
//        from(amqToBridgeQueue).to(bridgeToWmqQueue).log(LoggingLevel.INFO, "Message moving to " + bridgeToWmqQueue);
//        from(wmqToBridgeQueue).to(bridgeToAmqQueue).log(LoggingLevel.INFO, "Message moving to " + bridgeToAmqQueue);

        from(amqToBridgeQueue).log(LoggingLevel.WARN, "Consuming message from" + amqToBridgeQueue);
    }
}
所以我真的不知道为什么当我开始使用Jetty时,它没有被列为ApitopSqueue的消费者。我的pom包括AMQ/WMQ/camel库的依赖项。依赖项如下(从父pom继承版本/范围)

当我启动Jetty时,我的配置中是否存在错误,这意味着驼峰路由不起作用或正在查看AMQ


谢谢。

原来我的web.xml中没有这个部分。为未来吸取的教训

<listener>
    <listener-class>
        org.springframework.web.context.ContextLoaderListener
    </listener-class>
</listener>

org.springframework.web.context.ContextLoaderListener
application.activemq.url=tcp://localhost:61616

topsBridgeRouteBuilder.route.amqToBridgeRoute=jms:apiToTopsQueue
topsBridgeRouteBuilder.route.bridgeToWmqRoute=mq:toWmq
topsBridgeRouteBuilder.route.wmqToBridgeRoute=mq:fromWmq
topsBridgeRouteBuilder.route.bridgeToAmqRoute=jms:topsToApiQueue
import org.apache.camel.LoggingLevel;
import org.apache.camel.builder.RouteBuilder;

public class TopsBridgeRouteBuilder extends RouteBuilder {

    private final String amqToBridgeQueue;
    private final String bridgeToWmqQueue;
    private final String wmqToBridgeQueue;
    private final String bridgeToAmqQueue;

    public TopsBridgeRouteBuilder(String amqToBridgeQueue, String bridgeToWmqQueue, String wmqToBridgeQueue,  String bridgeToAmqQueue) {
        this.amqToBridgeQueue = amqToBridgeQueue;
        this.bridgeToWmqQueue = bridgeToWmqQueue;
        this.wmqToBridgeQueue = wmqToBridgeQueue;
        this.bridgeToAmqQueue = bridgeToAmqQueue;
    }

    @Override
    public void configure() throws Exception {
//        from(amqToBridgeQueue).to(bridgeToWmqQueue).log(LoggingLevel.INFO, "Message moving to " + bridgeToWmqQueue);
//        from(wmqToBridgeQueue).to(bridgeToAmqQueue).log(LoggingLevel.INFO, "Message moving to " + bridgeToAmqQueue);

        from(amqToBridgeQueue).log(LoggingLevel.WARN, "Consuming message from" + amqToBridgeQueue);
    }
}
<dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-spring</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-jms</artifactId>
        </dependency>
        <dependency>
            <groupId>com.ibm.mq</groupId>
            <artifactId>com.ibm.mq.jmqi</artifactId>
        </dependency>
        <dependency>
            <groupId>com.ibm.mq</groupId>
            <artifactId>com.ibm.mqjms</artifactId>
        </dependency>
        <dependency>
            <groupId>com.ibm.mq</groupId>
            <artifactId>connector</artifactId>
        </dependency>
        <dependency>
            <groupId>com.ibm.mq</groupId>
            <artifactId>dhbcore</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-all</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-pool</artifactId>
        </dependency>
import org.apache.activemq.ActiveMQConnectionFactory;
import org.junit.Test;

import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;

import javax.jms.*;

public class TopsBridgeRouteBuilderTest {

    @Test
    public void testAMessageAddedToAmqCanBeRetrieved() throws JMSException {

        String brokerURL = "tcp://localhost:61616";
        String amqQueue = "apiToTopsQueue";
        String messageToSend = "Test message";

        // Put a message on the AMQ
        ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(brokerURL);
        Connection connection = connectionFactory.createConnection();
        connection.start();
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        Destination destination = session.createQueue(amqQueue);
        MessageProducer producer = session.createProducer(destination);
        producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
        TextMessage tm = session.createTextMessage(messageToSend);
        producer.send(tm);

        // Create read only consumer to take the message off the queue
        ActiveMQConnectionFactory connectionFactoryReadOnly = new ActiveMQConnectionFactory(brokerURL);
        Connection connectionReadOnly = connectionFactoryReadOnly.createConnection();
        connectionReadOnly.start();
        Session sessionReadOnly = connectionReadOnly.createSession(false, Session.AUTO_ACKNOWLEDGE);
        MessageConsumer consumer = sessionReadOnly.createConsumer(destination);
        final TextMessage message = (TextMessage) consumer.receive();

        System.out.println("Message retrieved = " + message.getText());
        assertThat(message.getText(), is(messageToSend));
    }
}
<listener>
    <listener-class>
        org.springframework.web.context.ContextLoaderListener
    </listener-class>
</listener>