使用:qpid-broker 0.32,qpid-jms-client-0.3.0
您好。 AMQP协议的新用户。我正在尝试通过JNDI创建并绑定队列到已存在的扇出交换,然后通过JMS客户端连接。如果我创建交换,队列,并直接从webPortal绑定它一切正常。如果我通过webPortal创建只是交换,然后使用我的jndi属性文件来创建和绑定队列,它无法解析,我得到一个javax.jms.InvalidDestinationException。我做错了什么?
我在localhost:5672上设置了一个名为TEST_FANOUT_EXCHANGE的自定义扇出交换。虚拟主机都是默认主机。
我的jndi.properties文件是:
java.naming.factory.initial = org.apache.qpid.jms.jndi.JmsInitialContextFactory connectionfactory.qpidConnectionfactory = amqp:// localhost:5672
queue.fanoutQueue = messagequeue destination.fanoutExchange = fanout:// TEST_FANOUT_EXCHANGE // messagequeue?durable ='true'& autodelete ='true'& exclusive ='false'
Java代码如下:
Properties properties = new Properties();
InputStream input = new FileInputStream("conf/jndi.properties");
properties.load(input);
Context context = new InitialContext(properties);
ConnectionFactory connectionFactory
= (ConnectionFactory) context.lookup("qpidConnectionfactory");
Connection connection = connectionFactory.createConnection("guest","guest");
connection.start();
Session session=connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
Queue destination = (Queue) context.lookup("fanoutQueue");
MessageConsumer messageConsumer = session.createConsumer(destination);
根据文档,如果交换或队列不存在,它将自动创建和绑定。那为什么不发生这种情况呢?
谢谢!
丹尼斯