zoukankan      html  css  js  c++  java
  • activemq 无法消费! consumers are alive when the messages are stuck !

    我的微服务中, activemq 消费 一条消息的时候, 出了错, 结果导致了 那条消息就一直处于pending 状态, 

    queue.user.545c2ed5-fee7-482a-bb59-564bbaa593f8_c5cdc461-4e9c-48c5-8684-6a81571114b8    1    1    0    0
    
    
    点击去是这样的:
    
    Browse queue.user.545c2ed5-...
    Message ID                                      Correlation ID      Persistence      Priority      Redelivered      Reply To      Timestamp                      Type      Operations  
    ID:dce4f74976e7-34120-1531388605944-1:4:1:1:1                        Persistent      4             true                      2018-07-12  09:43:31:554 UTC                   Delete

    可以看到 pending  是1 , dequeue 是0 , 而消费者是1, 明明存在1个消费者, 但是却一直不消费, 不dequeue 是什么意思??  本想直接在那个管理界面上点击 delete 操作的, 但是想想,  哥也好歹是程序员, . 我决定写个程序来消费他..

        /**
         *
         * 队列操作
         */
        public static void consume() throws JMSException {
            Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
            String qu = null;
            qu = "queue.user.545c2ed5-fee7-482a-bb59-564bbaa593f8_c5cdc461-4e9c-48c5-8684-6a81571114b8";
            Queue queue = session.createQueue(qu);
            MessageConsumer consumer = session.createConsumer(queue);
            System.out.println("consumer = " + consumer);
            consumer.setMessageListener(new MessageListener() {
                @Override
                public void onMessage(Message message) {
                    System.out.println("message00 ============ " + message);
                    try {
                        message.acknowledge();
                    } catch (JMSException e) {
                        e.printStackTrace();
                    }
                }
            });
        }

    程序运行没错, 但是, 我的 MessageListener 似乎不起作用,  message00 ============  始终不打印出来.  我也是郁闷了, 这么简单的程序都有错啊, 我写过很多次的好吧,  网上疯狂搜索一把, 好像大家都是这样写的啊..  坑爹了啊.. 

    不同于topic, queue 是可以先生产, 后面再消费的吧,,queue 并没有生产者消费者时间先后顺序的限制, 难道哪里记错了?  各种找资料, 发现并不是这样的..

    难不成activemq 已经报错了? 看下日志吧: 

    2018-04-13 05:11:03,574 CRIT Supervisor running as root (no user in config file)
    2018-04-13 05:11:03,581 WARN Included extra file "/etc/supervisor/conf.d/activemq.conf" during parsing
    2018-04-13 05:11:03,581 WARN Included extra file "/etc/supervisor/conf.d/cron.conf" during parsing
    2018-04-13 05:11:03,744 INFO RPC interface 'supervisor' initialized
    2018-04-13 05:11:03,744 CRIT Server 'unix_http_server' running without any HTTP authentication checking
    2018-04-13 05:11:03,749 INFO supervisord started with pid 1
    2018-04-13 05:11:04,751 INFO spawned: 'cron' with pid 16
    2018-04-13 05:11:04,753 INFO spawned: 'activemq' with pid 17
    2018-04-13 05:11:06,102 INFO success: cron entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
    2018-04-13 05:11:06,102 INFO success: activemq entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
    2018-04-13 07:09:36,530 WARN received SIGTERM indicating exit request
    2018-04-13 07:09:36,530 INFO waiting for cron, activemq to die
    2018-04-13 07:09:37,533 INFO stopped: activemq (terminated by SIGTERM)
    2018-04-13 07:09:37,534 INFO stopped: cron (terminated by SIGTERM)
    2018-04-13 07:11:36,201 CRIT Supervisor running as root (no user in config file)
    2018-04-13 07:11:36,201 WARN Included extra file "/etc/supervisor/conf.d/activemq.conf" during parsing
    2018-04-13 07:11:36,201 WARN Included extra file "/etc/supervisor/conf.d/cron.conf" during parsing
    2018-04-13 07:11:36,258 INFO RPC interface 'supervisor' initialized
    2018-04-13 07:11:36,260 CRIT Server 'unix_http_server' running without any HTTP authentication checking
    2018-04-13 07:11:36,260 INFO supervisord started with pid 1
    2018-04-13 07:11:37,263 INFO spawned: 'cron' with pid 16
    2018-04-13 07:11:37,265 INFO spawned: 'activemq' with pid 17
    2018-04-13 07:11:38,737 INFO success: cron entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
    2018-04-13 07:11:38,738 INFO success: activemq entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
    2018-05-03 03:42:11,945 WARN received SIGTERM indicating exit request
    2018-05-03 03:42:11,959 INFO waiting for cron, activemq to die
    2018-05-03 03:42:12,971 INFO stopped: activemq (terminated by SIGTERM)
    2018-05-03 03:42:12,973 INFO stopped: cron (terminated by SIGTERM)
    2018-05-03 03:44:23,724 CRIT Supervisor running as root (no user in config file)
    2018-05-03 03:44:23,727 WARN Included extra file "/etc/supervisor/conf.d/activemq.conf" during parsing
    2018-05-03 03:44:23,728 WARN Included extra file "/etc/supervisor/conf.d/cron.conf" during parsing
    2018-05-03 03:44:23,824 INFO RPC interface 'supervisor' initialized
    2018-05-03 03:44:23,824 CRIT Server 'unix_http_server' running without any HTTP authentication checking
    2018-05-03 03:44:23,824 INFO supervisord started with pid 1
    2018-05-03 03:44:24,830 INFO spawned: 'cron' with pid 16
    2018-05-03 03:44:24,831 INFO spawned: 'activemq' with pid 17
    2018-05-03 03:44:26,254 INFO success: cron entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
    2018-05-03 03:44:26,254 INFO success: activemq entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
    2018-07-16 09:35:45,450 CRIT Supervisor running as root (no user in config file)
    2018-07-16 09:35:45,458 WARN Included extra file "/etc/supervisor/conf.d/activemq.conf" during parsing
    2018-07-16 09:35:45,458 WARN Included extra file "/etc/supervisor/conf.d/cron.conf" during parsing
    2018-07-16 09:35:45,472 INFO RPC interface 'supervisor' initialized
    2018-07-16 09:35:45,472 CRIT Server 'unix_http_server' running without any HTTP authentication checking
    2018-07-16 09:35:45,472 INFO supervisord started with pid 1
    2018-07-16 09:35:46,474 INFO spawned: 'cron' with pid 16
    2018-07-16 09:35:46,475 INFO spawned: 'activemq' with pid 17
    2018-07-16 09:35:47,773 INFO success: cron entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
    2018-07-16 09:35:47,773 INFO success: activemq entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)

    似乎也并没有上面特别的, CRIT  是什么? 好像很严重的样子, 感觉还是可以忽略的吧..

    http://activemq.2283324.n4.nabble.com/Messages-stuck-in-pending-state-in-queue-td4669239.html  好像是版本问题唉, 难道?

    http://activemq.2283324.n4.nabble.com/Messages-are-kept-in-Pending-queue-for-durable-topic-subscribers-td4690015.html 看的晕晕的

    https://stackoverflow.com/questions/7786086/difference-between-pending-messages-and-enqueue-counter-in-active-mq : 提到

    pending messages = number of messages CURRENTLY waiting for delivery in the destination (the current size of the queue)
    
    enqueued messages = number of messages that where enqueued in the destination since the last statistic reset. This number can only rise.
    
    dequeued messages = messages delivered from the destination to consumers. this number can be higher that the number of enqueued messages if a message was delivered to multiple consumers (topics).

    好像并没什么卵用..

    天啊, 明明两个消费者, 但是却一直不消费, 不dequeue 是几个意思? 

    仔细一看, 此时的消费者是2, 那就是说, 还有其他消费者? 

    queue.user.545c2ed5-fee7-482a-bb59-564bbaa593f8_c5cdc461-4e9c-48c5-8684-6a81571114b8    1    2    0    0

    突然意识到是我的微服务还在运行, 难道它阻塞了其他消费者对当前queue的消费? 赶紧把 微服务 关闭, 再次运行上面程序,  搞定了! 

  • 相关阅读:
    Python:起步
    实战Django:Rango Part8
    实战Django:Rango Part7
    实战Django:Rango Part6
    实战Django:Rango Part5
    实战Django:Rango Part4
    Fitnesse集成TestLink
    oracle存储过程代码覆盖率统计工具
    ant svn
    Jenkins中关于一些插件的使用方法
  • 原文地址:https://www.cnblogs.com/FlyAway2013/p/9346885.html
Copyright © 2011-2022 走看看