RabbitMQ Java客户端:当在使用者的handleDelivery()方法中抛出RuntimeException时会发生什么情况?

皮奥韦赞

RabbitMQ Java客户端的Consumer界面似乎没有诸如handleException()方法之类的东西

那么RuntimeException被扔进去的后果是什么Consumer.handleDelivery()呢?

有人可能希望以某种方式记录该异常,并且消费者可以继续为将来的交付工作,但是我不确定。

加布里埃莱·圣托马乔(Gabriele Santomaggio)

如果您不处理例外情况,您channel将被关闭。

随着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"));

错误将被重定向到处理程序,并且通道不会关闭。

对我来说,您应该始终在事件内部处理错误。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档