传输方案未被识别:[AMQP]

6

我正在尝试使用AMQP与ActiveMQ,但是出现了以下错误:

Transport scheme NOT recognized: [amqp]

这是我的代码

ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
        "amqp://localhost:61616");

Connection connection = null;
try {
    connection = connectionFactory.createConnection();
    connection.start();

    Session session = connection.createSession(false,
            Session.AUTO_ACKNOWLEDGE);

    Queue queue = session.createQueue("somequeue");

    MessageProducer producer = session.createProducer(queue);

    // We will send a small text message saying 'Hello'
    TextMessage message = session.createTextMessage();
    message.setText("Publishing : New Message ");
    producer.send(message);

    connection.close();
} catch (Exception e) {

}
1个回答

12
请注意,ActiveMQ中的AMQP仅在服务器端实现,而不是在JMS客户端中实现。JMS客户端实际上实现了“默认”的OpenWire协议(以及JVM内部传输)。您应该使用其他客户端库来使用AMQP与ActiveMQ通信,例如Apache QPID,这是ActiveMQ推荐的

谢谢!但你可以告诉我怎样使用它吗? 我尝试了这个,但仍然出现相同的错误。 ConnectionFactory connectionFactory = new AMQConnectionFactory("amqp://guest:guest@clientid/test?brokerlist='tcp://localhost:5672'"); - madhairsilence
请查看ActiveMQ trunk中AMQP的单元测试:https://fisheye6.atlassian.com/browse/activemq/trunk/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/JMSClientTest.java?r=1406466&r=1414990它使用qpid客户端库进行设置。 - Petter Nordlander
感谢提供可工作的代码。有一个疑问需要澄清。我发现这里没有提到任何协议,即我在这里没有看到amqp://。而且我看到ConnectionFactoryImpl、QueueImpl来自org.apache.qpid.amqp_1_0.jms.impl。那么这是否意味着它们只会创建ampq连接? - madhairsilence
AMQP是一种通信协议,就像OpenWire一样。QPID客户端使用AMQP,而ActiveMQ客户端使用OpenWire。无需指定要使用哪个协议。在ActiveMQ中,您通常会指定诸如tcp:..之类的内容,实际上是指“OpenWire”,但这是隐含的。 - Petter Nordlander
代码在本地可以运行。但是当我将发布者和接收者移动到不同的机器上时,ActiveMQ会抛出MessageNotReadableException异常。 - madhairsilence

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接