You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by huailong song <so...@gmail.com> on 2014/04/08 07:45:49 UTC

client system has problems on receiving message!!!

i use activemq to route  message  !

the broker is setted as message queue.

the broker received  message  ,and the web console show "Messages
Enqueued<http://113.105.65.86:8161/admin/queues.jsp#>
 " inceased; and client system consume message , the same time "Messages
Dequeued <http://113.105.65.86:8161/admin/queues.jsp#> " number is
decreased.

today i found that client system consumed message , the same time "Messages
Dequeued <http://113.105.65.86:8161/admin/queues.jsp#> " number is
decreased; but the client system really can't receive any message!
the client  system  log write as follow:

2014-04-08 08:00:00,044 [ActiveMQ InactivityMonitor ReadCheckTimer] DEBUG
[org.apache.activemq.transport.AbstractInactivityMonitor] - 30000ms elapsed
since last read check.
2014-04-08 08:00:05,533 [ActiveMQ InactivityMonitor WriteCheckTimer] DEBUG
[org.apache.activemq.transport.AbstractInactivityMonitor] - WriteChecker:
10000ms elapsed since last write check.
2014-04-08 08:00:15,533 [ActiveMQ InactivityMonitor WriteCheckTimer] DEBUG
[org.apache.activemq.transport.AbstractInactivityMonitor] - WriteChecker:
10000ms elapsed since last write check.
2014-04-08 08:00:25,534 [ActiveMQ InactivityMonitor WriteCheckTimer] DEBUG
[org.apache.activemq.transport.AbstractInactivityMonitor] - WriteChecker:
10001ms elapsed since last write check.
2014-04-08 08:00:30,044 [ActiveMQ InactivityMonitor ReadCheckTimer] DEBUG
[org.apache.activemq.transport.AbstractInactivityMonitor] - 30000ms elapsed
since last read check.
2014-04-08 08:00:35,534 [ActiveMQ InactivityMonitor WriteCheckTimer] DEBUG
[org.apache.activemq.transport.AbstractInactivityMonitor] - WriteChecker:
10000ms elapsed since last write check.
2014-04-08 08:00:45,534 [ActiveMQ InactivityMonitor WriteCheckTimer] DEBUG
[org.apache.activemq.transport.AbstractInactivityMonitor] - WriteChecker:
10000ms elapsed since last write check.
2014-04-08 08:00:55,534 [ActiveMQ InactivityMonitor WriteCheckTimer] DEBUG
[org.apache.activemq.transport.AbstractInactivityMonitor] - WriteChecker:
10000ms elapsed since last write check.

when i restart the client system ,the client system received message
again,it works again.

the client system is long *connection *to the broker ,here is the code:

public abstract class ActiveMQMessageConsumer implements MessageListener  {

private static Logger logger =
Logger.getLogger(ActiveMQMessageConsumer.class);
 protected String destName;
private boolean isQueue;
private static ConnectionFactory connectionFactory;
private Connection connection;
private Queue queue;
private Destination destination;
private MessageConsumer consumer;
private Session session;

protected MQConfig mqconfig;

 public void init(MQConfig mqconfig){
this.mqconfig = mqconfig;
this.isQueue = true;
 if(mqconfig !=null){
connectionFactory = new
ActiveMQConnectionFactory(mqconfig.getBrokerUser(),mqconfig.getBrokerPwd(),mqconfig.getBrokerURL());
reconnect();
 }
}
 public void close(){

try {
if(consumer != null){
consumer.close();
}
 if(session != null){
session.close();
}
 if (connection != null) {
connection.close();
}
} catch (JMSException e) {
e.printStackTrace();
logger.error(e.getMessage(), e);
}
}

private Connection reconnect(){

close();
 if(connectionFactory != null){
try {
connection = connectionFactory.createConnection();
connection.start();
session = connection.createSession(Boolean.FALSE,Session.AUTO_ACKNOWLEDGE);
queue = new ActiveMQQueue(destName);
consumer = session.createConsumer(queue);
consumer.setMessageListener(this);
 } catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
logger.error(e.getMessage(), e);
}
return connection;
}else {
logger.error("create connectionFactory error , reboot connect !");
}
return null;
}
 public abstract void work(Message message);
 @Override
public void onMessage(Message message) {
            if (message != null && message instanceof TextMessage) {
            work(message);
            }

    }

}