我被指派评估ActiveMQ Artemis用于JMS客户端。我有RabbmitMQ的经验,但没有使用ActiveMQ Artemis和JMS的经验。
我将Artemis安装到我的本地机器上,按照说明创建了一个新代理,并将其设置为Windows服务。Windows服务可以正常启动和停止。我没有对broker.xml
文件进行任何更改。
对于我的第一个测试,我正在尝试从独立的Java程序执行JMS队列生产/消费。我正在使用Artemis用户手册中“使用JMS”部分的代码(不使用JNDI):
TransportConfiguration transportConfiguration = new TransportConfiguration(NettyConnectorFactory.class.getName());
ConnectionFactory cf = ActiveMQJMSClient.createConnectionFactoryWithoutHA(JMSFactoryType.CF,transportConfiguration);
Queue orderQueue = ActiveMQJMSClient.createQueue("OrderQueue");
Connection connection = cf.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer producer = session.createProducer(orderQueue);
MessageConsumer consumer = session.createConsumer(orderQueue);
connection.start();
TextMessage message = session.createTextMessage("This is an order");
producer.send(message);
TextMessage receivedMessage = (TextMessage)consumer.receive();
System.out.println("Got order: " + receivedMessage.getText());
当我运行这段代码时,我会得到以下错误:
WARN: AMQ212054: Destination address=jms.queue.OrderQueue is blocked. If the system is configured to block make sure you consume messages on this configuration.
我的研究还没有得出结论,这是一个服务器端设置还是生产者发送时不阻塞的问题。我找不到具有阻塞布尔值的生产者发送方法,只有持久性。你有什么建议?谢谢。
编辑:在broker.xml
中添加了新的address-setting
元素,专门用于此队列:
<address-setting match="jms.queue.OrderQueue">
<max-size-bytes>104857600</max-size-bytes>
<page-size-bytes>10485760</page-size-bytes>
<address-full-policy>PAGE</address-full-policy>
</address-setting>