Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Spring Integration和RabbitMQ时,如何在用户端处理格式错误的消息_Java_Spring_Rabbitmq_Spring Integration - Fatal编程技术网

Java 使用Spring Integration和RabbitMQ时,如何在用户端处理格式错误的消息

Java 使用Spring Integration和RabbitMQ时,如何在用户端处理格式错误的消息,java,spring,rabbitmq,spring-integration,Java,Spring,Rabbitmq,Spring Integration,我目前正在从事一个项目,涉及使用来自RabbitMQ brocker的消息。然而,我对Spring集成、AMQP和RabbitMQ仍然是新手。 我在使用格式错误的消息时遇到问题。当我的消费者收到一条格式错误的消息时,它会将其返回队列,然后RabbitMQ将其发送回队列,这将创建一个无止境的循环。 在Spring集成文档中,可以实现一些配置,以确保此类消息不会返回队列 然而,我无法理解如何实现这一点。 我想要的是能够配置某种具有如下格式的bean class ExceptionHandler {

我目前正在从事一个项目,涉及使用来自RabbitMQ brocker的消息。然而,我对Spring集成、AMQP和RabbitMQ仍然是新手。 我在使用格式错误的消息时遇到问题。当我的消费者收到一条格式错误的消息时,它会将其返回队列,然后RabbitMQ将其发送回队列,这将创建一个无止境的循环。 在Spring集成文档中,可以实现一些配置,以确保此类消息不会返回队列

然而,我无法理解如何实现这一点。 我想要的是能够配置某种具有如下格式的bean

class ExceptionHandler {

   public void handle(Throwable e ) { 

     Logger.log("Some log ... we don't give a Sh** ... ") ; 

   } 

}
我查过了 及 但不幸的是,我什么都不懂


所以,如果你有一个示例代码或一个链接发送它,我将不胜感激

在多次尝试失败后,我能够处理错误。然而,我现在正努力隐藏异常日志。我不明白为什么要这样实施。我也能处理日志问题。 结果是,有另一种方式可以表示您不想返回消息,因为它具有
acknowledge mode=“NONE”
属性。结帐区。这样你甚至不需要抛出那个丑陋的异常

< bean id="handler" class="MessagesErrorHandler"/>
    < int-amqp:inbound-channel-adapter
            error-handler="handler"
            id="idActivityAdapter"
            channel="channelName"
            queue-names="activityQueue"
            />




import org.springframework.util.ErrorHandler;
import org.springframework.amqp.AmqpRejectAndDontRequeueException;

public class MessagesErrorHandler implements ErrorHandler {


    @Override
    public void handleError(Throwable throwable) {
        System.out.println("YESSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS ERROR IS HANDLED !!!!");
        throw new AmqpRejectAndDontRequeueException(throwable);// this very important
        //so that message don't go back to the queue. 
    }
}

导入org.springframework.util.ErrorHandler;
导入org.springframework.amqp.AmqpRejectAndDontRequeueException;
公共类MessagesErrorHandler实现ErrorHandler{
@凌驾
公共无效句柄错误(可丢弃可丢弃){
System.out.println(“Yessssssss错误已处理!!!!”);
抛出新的AmqpRejectAndDontRequeueException(throwable);//这非常重要
//这样消息就不会返回队列。
}
}

AmqpRejectAndDontRequeueException是向容器发出的一个信号,用于拒绝消息,而不是重新请求消息;默认情况下,它会重新请求任何异常

或者,您可以手动连接
SimpleMessageListenerContainer
bean;将
defaultRequeueRejected
设置为
false
,并使用
container
属性将其添加到适配器中。然后,所有异常都会导致消息被拒绝,而不会重新查询


另外,您可以使用错误通道而不是
错误处理程序,从错误流中抛出
AmqpRejectAndDontRequeueException

是的,这是正确的解决方案之一-当您决定消息不应
重新查询时,抛出
AmqpRejectAndDontRequeueException

SimpleMessageListenerContainer
上还有
defaultRequeueRejected
,默认情况下为
true

您可能应该看看解决方案,以避免丢失这些格式错误的消息

请分享困扰你的StackTrace

SimpleMessageListenerContainer
中有这样一个代码:

catch (AmqpRejectAndDontRequeueException rejectEx) {
                    /*
                     *  These will normally be wrapped by an LEFE if thrown by the
                     *  listener, but we will also honor it if thrown by an
                     *  error handler.
                     */
                }

你能提供如何使用spring?对不起,我没听清楚。“做”什么?您的
MessagesErrorHandler
已经使用
AmqpRejectAndDontRequeueException
执行了这些操作。你还需要什么?