GVKun编程网logo

在RabbitMQ侦听器中隐藏运行时异常(rabbitmq 监听)

13

在本文中,我们将带你了解在RabbitMQ侦听器中隐藏运行时异常在这篇文章中,我们将为您详细介绍在RabbitMQ侦听器中隐藏运行时异常的方方面面,并解答rabbitmq监听常见的疑惑,同时我们还将给

在本文中,我们将带你了解在RabbitMQ侦听器中隐藏运行时异常在这篇文章中,我们将为您详细介绍在RabbitMQ侦听器中隐藏运行时异常的方方面面,并解答rabbitmq 监听常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的C++使用RabbitMQ类库做客户端与RabbitMQ Server通讯,生成C++可调用的rabbimq.*.dll的过程、node.js,Rabbitmq和Docker:使用seneca的服务似乎在rabbitmq之前启动、RabbbitMQ 的配置 以在.NetCore 的 CAP 使用 RabbbitMQ 实现订阅与发布问题、rabbitmq /usr/lib/rabbitmq/bin/rabbitmq-server: line 85: erl: command not found

本文目录一览:

在RabbitMQ侦听器中隐藏运行时异常(rabbitmq 监听)

在RabbitMQ侦听器中隐藏运行时异常(rabbitmq 监听)

在某些情况下,我使用了一些例外情况来拒绝该消息,但是在控制台中却显示了例外情况,乍一看似乎并不正确。

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

我正在使用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

答案1

小编典典

在您的日志记录配置中,为

org.springframework.amqp.rabbit.listener.ConditionalRejectingErrorHandler

到ERROR(该消息记录在WARN级别)。

使用Spring Boot,您只需添加…

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

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

编辑

如果您希望执行其他操作(例如记录某些异常),则可以制作的副本ConditionalRejectingErrorHandler并更改handleError()方法。该代码是在这里。

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

C++使用RabbitMQ类库做客户端与RabbitMQ Server通讯,生成C++可调用的rabbimq.*.dll的过程

C++使用RabbitMQ类库做客户端与RabbitMQ Server通讯,生成C++可调用的rabbimq.*.dll的过程

Step:

  1. download the latest rabbitmq-c via: https://github.com/alanxz/rabbitmq-c
  2. follow the document, download the cmake tool, make sure the right version of cmake. https://cmake.org/
  3. install the C compiler, if developed by VS2012, so set MSVC110=VS2012
  4. convert rabbitmq-c to C++ project via cmake command
    1. create "build" folder to rabbitmq-c root folder, then new bat file with below comman:
      REM -- create and put into /rabbitmq-c-0.9.0/build folder, then run the bat
      REM -- -DENABLE_SSL_SUPPORT=OFF disable SSL feature, otherwise will occur ssl error
      REM -- -G "Visual Studio 11 2012" , set the build environment
      cmake .. -DENABLE_SSL_SUPPORT=OFF -G "Visual Studio 11 2012"
      pause

       

  5. open the C++ project generate in step 4, then build rabbitmq project with Release version
  6. rename the rabbitmq.*.dll to rabbitmq.1.dll, then replace to the target folder

 

Troubleshooting:

  1. "Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the system variable OPENSSL_ROOT_DIR (missing: OPENSSL_CRYPTO_LIBRARY) (found suitable version "0.9.8h", minimum required is "0.9.8")"
    1. Solution1: add OPENSSL_ROOT_DIR command to bat file: -DOPENSSL_ROOT_DIR="C:\Users\zhengs\Downloads\openssl-0.9.8k_WIN32" https://stackoverflow.com/questions/16248775/cmake-not-able-to-find-openssl-library
    2. Solution2: Disable SSL suppport, add  "-DENABLE_SSL_SUPPORT=OFF" to command. https://github.com/conetix/librabbitmq

node.js,Rabbitmq和Docker:使用seneca的服务似乎在rabbitmq之前启动

node.js,Rabbitmq和Docker:使用seneca的服务似乎在rabbitmq之前启动

我使用docker创建多个容器,其中一个包含rabbitmq实例,另一个包含应该响应队列活动的node.js操作.遍历docker-compose日志,我看到很多ECONNREFUSED错误,然后我看到该行开始表明rabbitmq已经在它的容器中启动了.这似乎表明,rabbitmq似乎是在需要它的服务之后开始的.

作为侧边栏,只是为了消除任何其他可能的原因,这是node.js连接到rabbitmq的连接字符串:

amqp://rabbitmq:5672

这里是docker-compose.yaml文件中rabbitmq的条目:

rabbitmq:
container_name: "myapp_rabbitmq"
   tty: true
   image: rabbitmq:management
   ports:
     - 15672:15672
     - 15671:15671
     - 5672:5672
   volumes:
     - /rabbitmq/lib:/var/lib/rabbitmq
     - /rabbitmq/log:/var/log/rabbitmq
     - /rabbitmq/conf:/etc/rabbitmq/
service1:
   container_name: "service1"
   build:
     context: .
     dockerfile: ./service1.dockerfile
   links:
     - mongo
     - rabbitmq
   depends_on:
     - mongo
     - rabbitmq
service2:
   container_name: "service2"
   build:
     context: .
     dockerfile: ./service2/dockerfile
   links:
     - mongo
     - rabbitmq
   depends_on:
     - mongo
     - rabbitmq

这个时间问题的解决方案是什么?

如何在消耗容器启动之前启动rabbitmq?

如果这不是时间问题,请告诉我,但是配置.我列出的docker-compose.yml条目中的问题?

解决方法

您需要控制从属容器的启动过程.下面的文件相同

https://docs.docker.com/compose/startup-order/

我通常使用下面项目中的wait-for-it.sh文件

https://github.com/vishnubob/wait-for-it

所以我的service1中会有一个下面的命令

wait-for-it.sh rabbitmq:5672 -t 90 -- command with args to launch service1

RabbbitMQ 的配置 以在.NetCore 的 CAP 使用 RabbbitMQ 实现订阅与发布问题

RabbbitMQ 的配置 以在.NetCore 的 CAP 使用 RabbbitMQ 实现订阅与发布问题

 最近在研究.netCore+CAP 实现订阅和发布,使用 RabbbitMQ 时候,遇到的一些坑,由于新旧版本不同,需要配置不同,导致容易出现一些误导

我目前使用的是 RabbbitMQ_server-3.7.8,大致的安装网上大把我就不多介绍,以下连接可以实现安装

https://blog.csdn.net/qq_33382113/article/details/78853680 

http://www.cnblogs.com/stulzq/p/7551819.html

安装 Erlang 和 RabbitMQ 之后,接下来需要修改环境变量

自定义环境变量

1.erl 环境变量配置

ERLANG_HOME=D:\Erlang\erl10.1

 

在 Path 中加入:%ERLANG_HOME%\bin;

测试 erl 配置是否正确,开始 - 运行 - cmd,输入 erl,显示如下,证明配置正确

2.RabbitMQ 环境变量配置

 看好 RabbitMQ 的安装位置,以及安装的版本,我的版本为 rabbitmq_server-3.7.8

RABBITMQ_SERVER=D:\RabbitMQ Server\rabbitmq_server-3.7.8

同样在 Path 中加入

%RABBITMQ_SERVER%\sbin;

3. 激活 rabbitmq_management

在 CMD 定位到安装目录然后输入如下命令

rabbitmq-plugins.bat enable rabbitmq_management

说明安装成功

4. 启动 RabbitMQ 服务

直接在命令行界面键入如下命令 

启动 net start RabbitMQ 

停止 net stop RabbitMQ

5.RabbitMQ 测试

 

测试地址 http://localhost:15672/ 
默认的用户名:guest 
默认的密码为:guest

如果直接这样在.NetCore 使用 RabbitMQ 实现订阅发布,会发现无法连接 MQ, 导致无法实现 CAP 的订阅,

最近我网上搜索了一些关这些方面的使用问题得出结论是:因为出于安全问题所以不能使用默认账号进行远程访问,所以必须要创建账号进行远程账号才能进行远程访问:

 http://www.cnblogs.com/xiaohua19920/p/9583986.html 这里会详细指导 创建账户和修改配置

rabbitmq /usr/lib/rabbitmq/bin/rabbitmq-server: line 85: erl: command not found

rabbitmq /usr/lib/rabbitmq/bin/rabbitmq-server: line 85: erl: command not found

问题描述:在使用命令 /sbin/service rabbitmq-server start 启动 Rabbitmq 时,报:

Job for rabbitmq-server.service failed because the control process exited with error code. See "systemctl status rabbitmq-server.service" and "journalctl -xe" for details.

根据以上错误信息,使用 “journalctl -xe” 命令查看启动失败日志:

[root@192 bin]# journalctl -xe
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit rabbitmq-server.service has begun starting up.
1 08 19:12:46 sanyue rabbitmq-server[10306]: /usr/lib/rabbitmq/bin/rabbitmq-server: line 85: erl: command not found
1 08 19:12:46 sanyue systemd[1]: rabbitmq-server.service: main process exited, code=exited, status=127/n/a
1 08 19:12:46 sanyue rabbitmqctl[10473]: /usr/lib/rabbitmq/bin/rabbitmqctl: line 32: exec: escript: not found
1 08 19:12:46 sanyue systemd[1]: rabbitmq-server.service: control process exited, code=exited status=127
1 08 19:12:46 sanyue systemd[1]: Failed to start RabbitMQ broker.
-- Subject: Unit rabbitmq-server.service has failed
-- Defined-By: systemd -- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel -- -- Unit rabbitmq-server.service has failed. -- -- The result is failed. 

通过上面描述中,发现是 rabbitmq-server 文件第 85 没有找到 erlang。

解决方法:在 rabbitmq-server 文件第 85 行处添加 erlang 的环境变量

然后执行启动 Rabbitmq 命令,启动成功。使用 /sbin/service rabbitmq-server status 查看 rabbit 状态

关于在RabbitMQ侦听器中隐藏运行时异常rabbitmq 监听的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于C++使用RabbitMQ类库做客户端与RabbitMQ Server通讯,生成C++可调用的rabbimq.*.dll的过程、node.js,Rabbitmq和Docker:使用seneca的服务似乎在rabbitmq之前启动、RabbbitMQ 的配置 以在.NetCore 的 CAP 使用 RabbbitMQ 实现订阅与发布问题、rabbitmq /usr/lib/rabbitmq/bin/rabbitmq-server: line 85: erl: command not found等相关内容,可以在本站寻找。

本文标签: