JBoss Community

Using JMS Topic with Jboss Messaging 1.4.2.GA-SP1 seems unreliable.

created by Vijay Bhakta in JBoss Messaging - View the full discussion

Hi,

Does anyone have experienced this and has a suggestion?
I am using JBoss 4.2.3.GA with JBoss-Messaging 1.4.2.GA-SP1


In my real application, I have now and then observed a JMS Message not received at one or the other client.
To reproduce and analyze the same, I have made simple program closer to my scenario and focus on JMS.
Let me brief you the scenario:
1. A stateless Bean deployed with a method that generates 100 JMS messages to JMS Topic. Its more frequent when message size is ~1k.
2. An external client 'API-Caller' that invokes the bean and calls the method, once every second for duration of 1-min. I launch typically more than 40 such clients.
3. I stamped each Message with EventNumber, an incremental number to uniquely identify it.
4. A Client 'Event-Listener' which subscribes to the JMS Topic and waits/receives messages. I launch 4 instances of this client on two different systems with 2 on each. Each 'Event-Listener' notes that the EventNumber if JMS Message skips a number.

I am running JBoss on Windows7 64-bit and Debian-Linux(Squeeze)
And Clients 'API-Caller' and 'Event-Listener' on WindowsXP machine.

Running this test, I see that some JMS Messages are not received by one or the other client. Also, a Message received by one client is not recieved by other running on same system.


A code outline of my stateless Bean :-------------------------------------->

public class MyBean
    implements IMyBean
{

    private static synchronized int getEventNumber ()
    {
        return ++mEventNumber;
    }


    public int produce100Messages (int PayloadInBytes)
    {
        Connection connection = null;
        Session session = null;
        MessageProducer publisher = null;
        Integer num = 0;

        String payload = "";
        for(int i=0; i<PayloadInBytes; i++)
        {
            payload += "Z";           
        }
       
        try
        {
            InitialContext ic = new InitialContext();

            ConnectionFactory cf = (ConnectionFactory) ic.lookup("java:/JmsXA");
            Topic topic = (Topic) ic.lookup("topic/MyTopic");

            connection = cf.createConnection();
            session = connection.createSession(true, Session.SESSION_TRANSACTED);
            publisher = session.createProducer(topic);

            connection.start();

            num = getEventNumber();
            num = num * 100;
            for (int i = 0; i < 100; i++)
            {
                Message msg = session.createTextMessage(num.toString() + ";" + payload);
               
                publisher.send(msg);
                num++;
            }
            num--;
        }
        catch (Exception anException)
        {
            anException.printStackTrace();
        }
        finally
        {
               ...
               //Close producer, session, and connection
           
        }
        return num;
    }
}


The code outline at subscriber end :------------------------------------------->
public class MYMsgListener
    implements MessageListener
{
   ...

   public void onMessage (Message anArg0)
    {
     ...
     ...

            String[] arrStr = ((TextMessage) anArg0).getText().split(";");           

            Integer eventNumber = Integer.parseInt(arrStr[0]);
            mEventQ.add(eventNumber);
     ...
    }
    ...

Reply to this message by going to Community

Start a new discussion in JBoss Messaging at Community