【发布时间】:2021-08-08 21:02:08
【问题描述】:
我有一个没有预配置队列的嵌入式 ActiveMQ Artemis 2.17.0 代理。我希望客户端连接到代理并在它不存在时自动创建它的队列。这在我第一次运行客户端时工作得很好,但在第二次我再次连接到代理时,客户端会抛出一个错误:
errorType=QUEUE_EXISTS message=AMQ229019: Queue hornetq already exists on address router
是否可以将客户端或服务器配置为,如果队列已经存在,则不应尝试再次重新创建它?
以下是我正在运行的程序:
服务器
try {
ActiveMQServer server = new ActiveMQServerImpl(new ConfigurationImpl()
.setPersistenceEnabled(true)
.setBindingsDirectory("./router/data/bindings")
.setLargeMessagesDirectory("./router/data/large")
.setPagingDirectory("./router/data/paging")
.setJournalDirectory("./router/data/journal")
.setSecurityEnabled(false)
.addAcceptorConfiguration("tcp", "tcp://0.0.0.0:61617?protocols=CORE,AMQP"));
server.start();
} catch (Exception ex) {
System.err.println(ex);
}
客户
ServerLocator serverLocator = ActiveMQClient.createServerLocator("tcp://127.0.0.1.3:61617");
ClientSessionFactory factory = serverLocator.createSessionFactory();
ClientSession session = factory.createSession();
session.createQueue(new QueueConfiguration("router::hornetq")
.setAutoCreateAddress(Boolean.FALSE)
.setAutoCreated(Boolean.FALSE)
.setRoutingType(RoutingType.ANYCAST));
ClientProducer producer = session.createProducer("router::hornetq");
ClientMessage message = session.createMessage(true);
message.getBodyBuffer().writeString("Core Queue Message");
producer.send(message);
session.start();
ClientConsumer consumer = session.createConsumer("router::hornetq");
ClientMessage msgReceived = consumer.receive();
System.out.println("message = " + msgReceived.getBodyBuffer().readString());
session.close();
我在这里使用完全限定的队列名称(即router::hornetq),因为router 地址上有多个队列。
【问题讨论】:
标签: activemq-artemis