activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From vishva <vishva2...@gmail.com>
Subject activemq consumer does not return data even when queue not empty
Date Sat, 27 Feb 2016 04:22:25 GMT
I wrote a sample code to add elements to activemq, and then retrieve them. I
was successfully able to add around 1000 elements, but while retrieving the
elements, somehow code gets stuck after retrieving around 50 - 200 elements,
even when the queue has a lot of elements.

Following is the code i used for adding elements to the queue

@POST
@Path("/addelementtoqueue")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public void addElementToQeueue(@FormParam("count") int count) throws
Exception {
    IntStream.range(0, count)
        .forEach(e -> {
            try {
                addElement(e);
            }catch(Exception e1) {
                throw new RuntimeException(e1);
            }
        });
}

private void addElement(int i) throws Exception {
    Connection conn =
GlobalConfiguration.getJMSConnectionFactory().createConnection();
    conn.start();
    Session session = conn.createSession(false, Session.CLIENT_ACKNOWLEDGE);
    MessageProducer prod = session.createProducer(queue);
    prod.send(queue, session.createTextMessage("message "+ i),
DeliveryMode.PERSISTENT, 4, 0);
    prod.close();
    session.close();
    conn.close();
}
and this is the snippet i am using for retrieving elements from the queue

@POST
@Path("/removeelementfromqueue")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public void removeElementToQeueue(@FormParam("count") int count) throws
Exception {
    IntStream.range(0, count)
        .forEach(e -> {
            try {
                extractElement();
            }catch(Exception e1) {
                throw new RuntimeException(e1);
            }
        });
}

private void extractElement() throws Exception {
    Connection conn =
GlobalConfiguration.getJMSConnectionFactory().createConnection();
    conn.start();
    Session session = conn.createSession(false, Session.CLIENT_ACKNOWLEDGE);
    queue = session.createQueue("walkin.testing");
    MessageConsumer consumer = session.createConsumer(queue);
    TextMessage msg = (TextMessage)consumer.receive();
    System.out.println(msg.getText());
    msg.acknowledge();
    consumer.close();
    session.close();
    conn.close();
}
I am getting the connection factory via resource.xml, the snippet for the
same is

<resources>    
<Resource id="MyJmsResourceAdapter" type="ActiveMQResourceAdapter">
    BrokerXmlConfig = jdbcBroker:(tcp://0.0.0.0:61616)
    ServerUrl       = tcp://0.0.0.0:61616?jms.prefetchPolicy.queuePrefetch=0
</Resource>

<Resource id="MyJmsConnectionFactory" type="javax.jms.ConnectionFactory">
    ResourceAdapter = MyJmsResourceAdapter
</Resource></resources>
I am using activeMQ 5.13.1, with apache-tomee-plus-1.7.2 and Java 8, jdbc
store as mysql. I have configured activemq-jdbc-performance.xml as the
configuration file for apache activemq.

I have tried to a lot of research on this one, but i am unable to identify
the root cause of this issue. It would be highly helpful, if any one can
suggest me what i am doing wrong




--
View this message in context: http://activemq.2283324.n4.nabble.com/activemq-consumer-does-not-return-data-even-when-queue-not-empty-tp4708474.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.

Mime
View raw message