如何修复新的 activemq-artemis 安装阻塞问题?
How can I fix a new activemq-artemis install blocking issue?
我的任务是为 JMS 客户端评估 activemq-artemis。我有 RabbmitMQ 经验,但是 none 和 activemq-artemis/JMS.
我在我的本地机器上安装了 artemis,按照说明创建了一个新代理,并将其设置为 windows 服务。 windows 服务启动和停止都很好。我没有对 broker.xml 文件进行任何更改。
对于我的第一个测试,我试图从一个独立的 java 程序中执行 JMS 队列 produce/consume。我在使用 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());
当我运行这段代码时,我得到以下错误:
警告:AMQ212054:目标地址=jms.queue.OrderQueue 被阻止。如果系统配置为阻止,请确保您在此配置上使用消息。
我的研究尚未确定这是服务器端设置,还是让生产者无阻塞地发送。我一直无法找到具有阻塞布尔值的生产者发送方法,只有持久性。关于重点在哪里的任何想法?谢谢
编辑:添加到 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>
当地址策略设置为 BLOCK 且已达到内存时,会出现此警告消息。检查 broker.xml 中设置的 address policy。如果设置为 BLOCK,请将其更改为 PAGE。或者使用来自 OrderQueue 的待处理消息。
我在用户手册中进一步研究发现了这个:
max-disk-usage The max percentage of data we should use from disks.
The System will block while the disk is full. Default=100
并且在服务启动后的日志中还没有发布消息:
WARN [org.apache.activemq.artemis.core.server] AMQ222210: Storage usage is beyond max-disk-usage. System will start blocking producers.
所以我认为无论我的地址设置如何,它都会开始阻塞。查看 broker.xml 中的 max-disk-usage 设置,它被设置为 90。文档默认值为 100,我设置为那个,没有启动日志警告,我的测试 pub/sub 代码现在可以工作了。
我的任务是为 JMS 客户端评估 activemq-artemis。我有 RabbmitMQ 经验,但是 none 和 activemq-artemis/JMS.
我在我的本地机器上安装了 artemis,按照说明创建了一个新代理,并将其设置为 windows 服务。 windows 服务启动和停止都很好。我没有对 broker.xml 文件进行任何更改。
对于我的第一个测试,我试图从一个独立的 java 程序中执行 JMS 队列 produce/consume。我在使用 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());
当我运行这段代码时,我得到以下错误:
警告:AMQ212054:目标地址=jms.queue.OrderQueue 被阻止。如果系统配置为阻止,请确保您在此配置上使用消息。
我的研究尚未确定这是服务器端设置,还是让生产者无阻塞地发送。我一直无法找到具有阻塞布尔值的生产者发送方法,只有持久性。关于重点在哪里的任何想法?谢谢
编辑:添加到 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>
当地址策略设置为 BLOCK 且已达到内存时,会出现此警告消息。检查 broker.xml 中设置的 address policy。如果设置为 BLOCK,请将其更改为 PAGE。或者使用来自 OrderQueue 的待处理消息。
我在用户手册中进一步研究发现了这个:
max-disk-usage The max percentage of data we should use from disks. The System will block while the disk is full. Default=100
并且在服务启动后的日志中还没有发布消息:
WARN [org.apache.activemq.artemis.core.server] AMQ222210: Storage usage is beyond max-disk-usage. System will start blocking producers.
所以我认为无论我的地址设置如何,它都会开始阻塞。查看 broker.xml 中的 max-disk-usage 设置,它被设置为 90。文档默认值为 100,我设置为那个,没有启动日志警告,我的测试 pub/sub 代码现在可以工作了。