Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.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
RabbitMQ Java客户机:当在使用者';s handleDelivery()方法?_Java_Rabbitmq_Client - Fatal编程技术网

RabbitMQ Java客户机:当在使用者';s handleDelivery()方法?

RabbitMQ Java客户机:当在使用者';s handleDelivery()方法?,java,rabbitmq,client,Java,Rabbitmq,Client,RabbitMQ Java客户端的使用者接口似乎没有任何类似于handleException()的方法 那么,在使用者.handleDelivery()中抛出运行时异常的后果是什么呢 我们可以预期异常会以某种方式记录下来,消费者会继续为将来的交付工作,但我不确定。如果您不处理异常,您的频道将关闭 使用autoAck=false消息将重新排队 在消费过程中处理错误始终是一个很好的做法 顺便说一句,它存在一个可以使用的异常处理程序: ConnectionFactory factory = new C

RabbitMQ Java客户端的
使用者
接口似乎没有任何类似于
handleException()的方法

那么,在
使用者.handleDelivery()中抛出
运行时异常的后果是什么呢


我们可以预期异常会以某种方式记录下来,消费者会继续为将来的交付工作,但我不确定。

如果您不处理异常,您的
频道将关闭

使用
autoAck=false
消息将重新排队

在消费过程中处理错误始终是一个很好的做法

顺便说一句,它存在一个可以使用的异常处理程序:

ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
factory.setPort(5672);
final ExceptionHandler eh = new DefaultExceptionHandler() {
    @Override
    public void handleConsumerException(Channel channel, Throwable exception, Consumer consumer, String consumerTag, String methodName) {
        System.out.println(" - Error raised by: " + channel.getChannelNumber());
    }
};
factory.setExceptionHandler(eh);

final Connection connection = factory.newConnection();
final Channel channel = connection.createChannel();


channel.queueDeclare("my_queue",true,false,false,null);
channel.basicConsume("my_queue", true, new DefaultConsumer(channel) {
    @Override
    public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {

        System.out.println("Received...");
        System.out.println("error:"+ Integer.parseInt("RAISE_AN_ERROR"));
错误将重定向到处理程序,通道将不会关闭


就我而言,您应该始终处理事件内部的错误。

我们可以设置一个
宽恕例外处理程序,而不是实现另一个来避免关闭通道