Jms HornetQ 2.2.5嵌入式示例异常

Jms HornetQ 2.2.5嵌入式示例异常,jms,hornetq,Jms,Hornetq,我是HornetQ新手,我正在测试HornetQ示例。运行example EmbeddedExample.java(位于:hornetq-2.2.5.Final\examples\core\embedded\src\org\hornetq\core\example)时出现异常。我在那个例子中做了一些改变,得到了例外。我所做的更改是,我将发送过程和消费过程放在一个10万次迭代的for循环中。 代码是: System.out.println("Producer:"); System.out.prin

我是HornetQ新手,我正在测试HornetQ示例。运行example EmbeddedExample.java(位于:hornetq-2.2.5.Final\examples\core\embedded\src\org\hornetq\core\example)时出现异常。我在那个例子中做了一些改变,得到了例外。我所做的更改是,我将发送过程和消费过程放在一个10万次迭代的for循环中。 代码是:

System.out.println("Producer:");
System.out.println("StartDate: "+new Date());
for (int i = 0; i < 100000; i++)
{   
    message.putStringProperty(propName, "Message: " + i);
    producer.send(message);             
}
System.out.println("EndDate: "+new Date());
// Step 7. Create the message consumer and start the connection
ClientConsumer messageConsumer = session.createConsumer(queueName);

session.start();

// Step 8. Receive the message.
System.out.println("Consumer:");
System.out.println("StartDate: "+new Date());

for (int i = 0; i < 100000; i++)            
{   
    ClientMessage messageReceived = messageConsumer.receive();
    System.out.println(messageReceived.getStringProperty(propName));
}
System.out.println("EndDate: "+new Date());            

如何克服此异常?

该示例将启动一个只有5000万条消息的VM,在您的示例中,您发送的是10万条消息,对于5000万条消息,什么可能不够

我这里没有您的更改,但是我可以在build.xml上运行10万条消息来提供更多内存的示例

在中断通信并使会话关闭之前,您可能会遇到一些异常

此外,消息系统是异步的,因此我建议您将发送块更改为:

for (int i = 0; i < 100000; i++)
{ 
    message = sesison.createMessage(true); // move it   
    message.putStringProperty(propName, "Message: " + i);
    producer.send(message);             
}
for(int i=0;i<100000;i++)
{ 
message=sesison.createMessage(true);//移动它
message.putStringProperty(propName,“message:+i”);
生产者。发送(消息);
}
你也应该承认消费。否则,消息仍将保留在内存中

该示例的目的是展示如何嵌入HornetQ。对于其他用途,如包装和生产,还有其他示例

for (int i = 0; i < 100000; i++)            
{   
    ClientMessage messageReceived = messageConsumer.receive();
    messageReceived.acknowledge();
    System.out.println(messageReceived.getStringProperty(propName));
}
for(int i=0;i<100000;i++)
{   
ClientMessageReceived=messageConsumer.receive();
messageReceived.acknowledge();
System.out.println(messageReceived.getStringProperty(propName));
}

谢谢Clebert,当我再次在消费者循环中启动会话时,它会起作用。我试过你的建议,但它不起作用,例外仍然存在。你可以在这里看到代码:我不确定你做错了什么。您需要向我发送生成异常的代码。(我不确定您在另一个问题上发布的代码是否会产生异常)。到目前为止,我怀疑您的内存不足。(从我运行的测试中)我将把你送到哪里?我的邮件id是news。anand11@gmail.com
for (int i = 0; i < 100000; i++)            
{   
    ClientMessage messageReceived = messageConsumer.receive();
    messageReceived.acknowledge();
    System.out.println(messageReceived.getStringProperty(propName));
}