RabbitMQ Java客户机:当在使用者';s handleDelivery()方法?
RabbitMQ Java客户端的RabbitMQ Java客户机:当在使用者';s handleDelivery()方法?,java,rabbitmq,client,Java,Rabbitmq,Client,RabbitMQ Java客户端的使用者接口似乎没有任何类似于handleException()的方法 那么,在使用者.handleDelivery()中抛出运行时异常的后果是什么呢 我们可以预期异常会以某种方式记录下来,消费者会继续为将来的交付工作,但我不确定。如果您不处理异常,您的频道将关闭 使用autoAck=false消息将重新排队 在消费过程中处理错误始终是一个很好的做法 顺便说一句,它存在一个可以使用的异常处理程序: ConnectionFactory factory = new C
使用者
接口似乎没有任何类似于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"));
错误将重定向到处理程序,通道将不会关闭
就我而言,您应该始终处理事件内部的错误。我们可以设置一个宽恕例外处理程序,而不是实现另一个来避免关闭通道