8 Replies Latest reply on Jan 6, 2010 2:39 PM by Armin Haaf

    standalone consumer for clustered queue did not get all mess

    Armin Haaf Newbie

      we are currently migrating from JBoss AS 4.2.2 with MQ to a clustered JBoss AS 5.1 with messaging

      We have some standalone JMS consumers to connect external systems.

      The problem is that a standalone JMS consumer connects to only one node and so gets the messages from this node only.

      The queue is Clustered:

      <mbean code="org.jboss.jms.server.destination.QueueService"
      name="jboss.messaging.destination:service=Queue,name=TestClusteredQueue"
       xmbean-dd="xmdesc/Queue-xmbean.xml">
       <depends>jboss.messaging:service=PostOffice</depends>
       <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
       <attribute name="Clustered">true</attribute>
       </mbean>
      


      A sample external consumer
      public static void main(String[] args) throws Exception {
       System.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
       System.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");
       System.setProperty("java.naming.provider.url", "node1:1100,node2:1100");
      
      
       final InitialContext tInitialContext = new InitialContext();
       final ConnectionFactory tConnFactory = (ConnectionFactory) tInitialContext.lookup("ClusteredConnectionFactory");
       final Queue tLisaToMfcQueue = (Queue) tInitialContext.lookup("/queue/TestClusteredQueue");
      
       javax.jms.Connection jmsConnection = tConnFactory.createConnection();
      
       Session tSession = jmsConnection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
      
       System.out.println("from browser");
       Enumeration tMessages = tSession.createBrowser(tLisaToMfcQueue).getEnumeration();
       while (tMessages.hasMoreElements()) {
       Message tMessage = (Message) tMessages.nextElement();
       System.out.println(tMessage);
       }
      
       System.out.println("from consumer");
      
       final MessageConsumer tConsumer = tSession.createConsumer(tLisaToMfcQueue);
      
       tConsumer.setMessageListener(new MessageListener() {
       public void onMessage(final Message pMessage) {
       System.out.println(pMessage);
       try {
       pMessage.acknowledge();
       } catch (JMSException e) {
       e.printStackTrace();
       }
       }
       });
      
       jmsConnection.setExceptionListener(new ExceptionListener() {
      
       public void onException(final JMSException e) {
       System.out.println("got exception");
       }
       });
      
       jmsConnection.start();
      
       }
      



      So how can i get a standalone consumer getting all messages from the queue