为了账号安全,请及时绑定邮箱和手机立即绑定

RabbitMQ测试用户还活着

RabbitMQ测试用户还活着

慕莱坞森 2021-04-09 21:13:01
我有一个JAVA应用程序,该应用程序创建了可以收听Rabbitmq的使用者。我需要知道启动的使用者仍然可以正常工作,如果没有,那么我需要重新启动使用者。他们有什么办法可以做到这一点。当前,我的主应用程序创建了一个Executor线程池,并在创建新连接时传递了该executor。ExecutorService executor = Executors.newFixedThreadPool(30);Connection connection = factory.newConnection(executor);然后,主要方法通过使用新通道作为参数调用构造函数来创建30个ConsumerApp对象,并调用listen()方法for(int i=0;i<=30;i++) { ConsumerApp consumer = new ConsumerApp(i,connection.createChanell()); consumer.listen() }ConsumerApp中的listen方法侦听队列并启动DefaultConsumer对象,该对象仅打印接收到的消息listen() {   try {  channel.queueDeclare("test-queue-name", false, false, false, null);  }catch {  System.out.println("Exception on creating Queue")  }Consumer consumer = new DefaultConsumer(this.channel) {@Override        public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties,                byte[] body) throws IOException {            String message = new String(body, "UTF-8");            System.out.println(" [x] Received Message in consumer '"+consumerId+" "+  message + "'");        }    }; //Now starting the consumer  try {    channel.basicConsume(QUEUE_NAME, true, consumer);      }    catch (ShutdownSignalException | IOException ex) {        ex.printStackTrace();  } }我想知道他们是否可以通过任何方式检查消费者是否活跃。我的想法是捕获关闭信号异常并重新创建使用者对象并调用listen方法。这是必要的,因为rabbitmq自动恢复并连接回来。?但是我怎么能保证呢?使用传递给rabbitmq连接器的线程池是否可以实现此目的?
查看完整描述

1 回答

?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

Consumer有不同的方法可以帮助您跟踪消费者的状态。你可能感兴趣的handleConsumeOkhandleCancel。 自动连接恢复确实会在连接失败后重新注册使用者,但这不会阻止您手动跟踪其状态,例如,在JMX上公开某些信息。


查看完整回答
反对 回复 2021-04-21
  • 1 回答
  • 0 关注
  • 224 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号