为什么消息再次出现在onMessage()函数中?

vik*_*iii 9 java activemq-classic jms listener nullpointerexception

ActiveMQ用来发送消息.

所以当我发送消息时,消息就会收到消息.成功插入后,即可确认.

但我确认后会有代码,可以抛出NullPointerException.

因此,为了故意产生这种异常,我已经抛出了NullPointerException.所以当它这样做时:

消息不是dequeued,并且相同的消息再次出现在该onMessage函数中.

我的代码是:

public void onMessage(Message message) {
    String msg = null;
    try
    {
        msg = receiveMessage(message);

        // Other code to insert message in db

        message.acknowledge();

        if(true)
        {
            throw new NullPointerException("npe"));
        }
            ** // Other code which might produce a null pointer exception **
        }
        catch(Exception ex)
        {
        }
    }
Run Code Online (Sandbox Code Playgroud)

为什么消息会再次onMessage()发挥作用,因为我acknowledge()也有.

因为我已经在db中插入了消息.

队列中的消息是否会被删除acknowledge()

我怎么能做到这一点?

Thi*_*ker 2

您可以创建一个单独的方法来处理消息,我的意思是在onMessage()函数中编写仅将该消息插入数据库的代码。

并创建一个单独的函数来处理该消息。

这样,如果您在处理过程中遇到任何错误,该消息将不会再次出现onMessage()