在 RabbitMQ 监听器中隐藏运行时异常

2024-03-27

在某些故意发生的情况下,我使用了一些异常来拒绝消息,但在控制台中显示了乍一看似乎不太正常的异常。

如何在登录控制台/文件时隐藏该特定异常

我正在使用 spring-boot 和默认记录器!

public static class UndispatchException extends 
       AmqpRejectAndDontRequeueException{

    public UndispatchException() {
        super("Dispatch still looking for a driver");
    }

}

这里是听者

@RabbitListener(queues = TEST_QUEUE)
public void handle(Dispatch in) {
    if(in.isRequeue()){
        log.debug("will reject the message");
        throw new UndispatchException();
    }
    log.debug("won't reject the message");

}

这是我想隐藏它的日志!在某些情况下必须重新排队消息!

2018-05-15 18:41:11.494  WARN 2709 --- [cTaskExecutor-1] s.a.r.l.ConditionalRejectingErrorHandler : Execution of Rabbit message listener failed.

org.springframework.amqp.rabbit.listener.exception.ListenerExecutionFailedException: Listener method 'public void com.amqp.handleException.demo.DemoApplication.handle(com.amqp.handleException.demo.DemoApplication$Dispatch)' threw exception
    at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:140) ~[spring-rabbit-1.7.7.RELEASE.jar:na]
    at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.onMessage(MessagingMessageListenerAdapter.java:106) ~[spring-rabbit-1.7.7.RELEASE.jar:na]
    at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:856) ~[spring-rabbit-1.7.7.RELEASE.jar:na]
    at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:779) ~[spring-rabbit-1.7.7.RELEASE.jar:na]
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access$001(SimpleMessageListenerContainer.java:105) [spring-rabbit-1.7.7.RELEASE.jar:na]
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$1.invokeListener(SimpleMessageListenerContainer.java:208) ~[spring-rabbit-1.7.7.RELEASE.jar:na]
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.invokeListener(SimpleMessageListenerContainer.java:1349) [spring-rabbit-1.7.7.RELEASE.jar:na]
    at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.executeListener(AbstractMessageListenerContainer.java:760) ~[spring-rabbit-1.7.7.RELEASE.jar:na]
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.doReceiveAndExecute(SimpleMessageListenerContainer.java:1292) [spring-rabbit-1.7.7.RELEASE.jar:na]
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.receiveAndExecute(SimpleMessageListenerContainer.java:1262) [spring-rabbit-1.7.7.RELEASE.jar:na]
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access$1800(SimpleMessageListenerContainer.java:105) [spring-rabbit-1.7.7.RELEASE.jar:na]
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1518) [spring-rabbit-1.7.7.RELEASE.jar:na]
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_111]
Caused by: com.amqp.handleException.demo.DemoApplication$UndispatchException: Dispatch still looking for a driver
    at com.amqp.handleException.demo.DemoApplication.handle(DemoApplication.java:47) ~[classes/:na]
    at sun.reflect.GeneratedMethodAccessor38.invoke(Unknown Source) ~[na:na]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_111]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_111]
    at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:180) ~[spring-messaging-4.3.15.RELEASE.jar:4.3.15.RELEASE]
    at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:112) ~[spring-messaging-4.3.15.RELEASE.jar:4.3.15.RELEASE]
    at org.springframework.amqp.rabbit.listener.adapter.HandlerAdapter.invoke(HandlerAdapter.java:49) ~[spring-rabbit-1.7.7.RELEASE.jar:na]
    at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:126) ~[spring-rabbit-1.7.7.RELEASE.jar:na]
    ... 12 common frames omitted

在日志记录配置中,设置日志级别

org.springframework.amqp.rabbit.listener.ConditionalRejectingErrorHandler

错误(该消息记录在警告级别)。

使用 Spring Boot,您只需添加...

logging.level.org.springframework.amqp.rabbit.listener.ConditionalRejectingErrorHandler=ERROR

...到您的 application.properties (或 .yml)文件。

EDIT

如果您希望做一些不同的事情(例如记录某些异常),您可以复制ConditionalRejectingErrorHandler并进行更改handleError()方法。这代码在这里 https://github.com/spring-projects/spring-amqp/blob/master/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/listener/ConditionalRejectingErrorHandler.java#L74.

然后,您可以使用自定义错误处理程序配置侦听器容器(或侦听器容器工厂)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 RabbitMQ 监听器中隐藏运行时异常 的相关文章

随机推荐

  • 在 IntelliJ Idea 13 中创建/配置 Derby JDBC 客户端

    很抱歉这个 也许 愚蠢的问题 我需要在我的 java 项目中创建一些本地数据库 因此我决定使用 Apache Derby Client 我正在与IntelliJ IDEA 13 旗舰版我的问题是我不知道如何创建本地数据库 Jetbrains
  • 将 XML 数据保存到 SQL Server 的最佳方法是什么?

    有没有一条非常直接的直接路线 即SQL Server可以读取XML 或者 最好解析 XML 并通过 ADO Net 以通常的方式将其作为单独的行或批量更新进行传输 我意识到可能有一些解决方案涉及大型复杂的存储过程 虽然我并不完全反对这一点
  • 如何授予 cron 作业文件权限?

    我已经为我的网站设置了 cron 选项卡 但我的邮件 ID 中收到了类似于脚本 权限被拒绝 的消息 谁能帮我告诉我可能是什么问题 谢谢 您在设置 crontab 时遇到此错误吗 或者从 cron 运行的脚本 如果在设置 crontab 时
  • 在“资源”参数中多次指定该项目。 “资源”参数不支持重复项目

    编译我的 Visual Studio C 项目时 出现以下错误 The item obj Debug SampleProject Forms MDIMain resources was specified more than once in
  • 单击/聚焦时更改 Select 组件的 InputLabel 颜色

    如果您查看此处的组件 https material ui com components selects https material ui com components selects 您会看到单击时 标签向上移动并最小化 但也会更改颜色
  • Bitbucket API 2 - 在团队项目中创建存储库

    我的 bitbucket 帐户上有一个团队 myteam 其中包含一个名为mainproject 每当我想在其中创建存储库时 我只需要执行以下命令行 curl X POST v u myaccount passwd https api bi
  • 访问数组中的对象

    我有以下输出 Array 0 gt stdClass Object id gt 20 news title gt Startup finance docs in GitHub news url gt http venturebeat com
  • 如何判断一个字符是否是元音

    我正在尝试使用vector substr 但我不知道这是否可能 有谁知道另一种方法可以做到这一点 我的目标是取出一个向量中的单词并将其与第一个元音分开 任何帮助表示赞赏 我的代码如下所示 include
  • 从日志文件解析 Log4j 布局 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有可以读取所有内容的开源工具布局实现 http logging apache org log4j
  • 如何学习 SQL Server 索引调优? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 在编写 tsql 查询时学习索引调优的最佳实用方法是什么 我有 VS2008 SQL Express 有
  • 如何以编程方式验证 Play 商店上的应用程序版本?

    我在 Play 商店中有一个应用程序 我想执行以下操作 当用户启动应用程序时 它应该验证 Play 商店中的应用程序版本是否与安装的版本相同 如果不是 我将显示一个对话框来警告这种情况 并提供重定向到 Play 商店进行更新的选项 我知道游
  • 接受用户输入

    我目前正在 Malbolge 中编写一款文字冒险类型游戏 谁能告诉我如何在 Malbolge 中接受用户输入 我能够将文本输出到屏幕上 但是 我似乎不知道如何接受输入 GHJUYGHJKLKUJHM MJ 6AG9F5D8V A8 gt 7
  • PHP 正则表达式中的 [\S\s]* 是什么意思?

    是什么意思 s S 在 PHP 的正则表达式中 做 s S 实际上匹配每个字符串相同 默认情况下 与新行不匹配 s S 是解决这个问题的一个技巧 这在 JavaScript 中很常见 但在 PHP 中你可以使用 s标记 to 以使点匹配所有
  • Kendo Ui 数据源添加功能无法正常工作

    我定义了一个 Kendo 数据源 如下所示 它正在填充 ListView 中的值 var datasourceAppList new kendo data DataSource transport create function optio
  • .NET Framework 中的“AssemblyTitle”属性

    实际用途是什么AssemblyTitle属性 MSDN 表示它指定了程序集的描述 并且程序集标题是一个可以包含空格的友好名称 Visual Studio 要求在项目的属性窗口中提供程序集名称以及默认命名空间 有一个AssemblyName属
  • 如何在SQLite中获取ROWID?

    考虑这个简单的表 tbl1 A first letter B second letter C third letter 第一列是letter第二列是desc 我可以毫无问题地执行此查询 select from tbl1 where lett
  • 从数组创建 mpf

    我正在尝试使用fsolve结合mpmath包裹 但是 我收到错误cannot create mpf from array mpf 1 0 dtype object 这是重现错误的最小示例 对于这个例子 技术上我不需要mpmath包 但我的实
  • 如何 rbind 与其列名称匹配的向量?

    rbind 在将向量绑定在一起时不检查列名 l list row1 c 10 20 row2 c 20 10 names l row1 c A B names l row2 c B A l row1 A B 10 20 row2 B A 2
  • 水豚与 :js => true 导致测试失败

    我对 Capybara 和 Rails 测试都很陌生 所以如果这是一个简单的答案 请原谅我 我有这个测试 it should be able to edit an assignment do visit dashboard path sel
  • 在 RabbitMQ 监听器中隐藏运行时异常

    在某些故意发生的情况下 我使用了一些异常来拒绝消息 但在控制台中显示了乍一看似乎不太正常的异常 如何在登录控制台 文件时隐藏该特定异常 我正在使用 spring boot 和默认记录器 public static class Undispa