【发布时间】:2017-11-27 07:32:11
【问题描述】:
我的任务是为 JMS 客户端评估 ActiveMQ Artemis。我有 RabbitMQ 经验,但没有使用 ActiveMQ Artemis。
我在本地机器上安装了 Artemis,按照说明创建了一个新代理,并将其设置为 Windows 服务。 Windows 服务可以正常启动和停止。我没有对broker.xml 文件进行任何更改。
对于我的第一个测试,我尝试从一个独立的 Java 程序执行 JMS 队列生产/消费。我在“使用 JMS”部分使用 Artemis 用户手册中的代码(不使用 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.
我的研究尚未确定这是服务器端设置,还是让生产者无阻塞地发送。我一直无法找到具有阻塞布尔值的生产者发送方法,只有持久性。对重点关注的地方有什么想法吗?
编辑:新的address-setting 元素添加到broker.xml 专用于此队列:
<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>
【问题讨论】:
-
即使 AMQ212054 警告消息,消费者是否设法读取了 TextMessage?
标签: jms activemq-artemis