sachin joshi created ARTEMIS-940:
------------------------------------

             Summary: Queue browser doesnot return any messages when a NMS 
active MQ consumer is listening to the queue
                 Key: ARTEMIS-940
                 URL: https://issues.apache.org/jira/browse/ARTEMIS-940
             Project: ActiveMQ Artemis
          Issue Type: Bug
          Components: Broker, OpenWire
    Affects Versions: 1.5.1
         Environment: Wildfly 10.1.0 with activeMQ Artemis 1.5.1.
.net consumer consuming the Active MQ server queue on wildfly using NMS

            Reporter: sachin joshi


We have an Active MQ server integrated with wildfly 10.1.0.
An EJB application produces messages and puts in the Queue which is then 
consumed by a .net application using apache NMS.
We also have a seperate java client which browses the Queue.
When the .net client is not connected the java client is able to list all the 
pending messages that are present in the queue. But with .net client connected 
even if there are messages in the queue, the queue browser is not able to list 
them down.

The C# consumer code is given below
{code:title=TestcaseConsumer.cs|borderStyle=solid}
using Apache.NMS;
using Apache.NMS.Util;
using AutoBoltClient.Commons;
using AutoBoltClient.Utils;
using log4net;
using System;
using System.Collections;
using System.Linq;
using System.Text;
using System.Threading;
using Newtonsoft.Json;
using System.Collections.Generic;

namespace AutoBoltClient.QueueConsumers
{
    public class TestcaseConsumer
    {
        private static readonly ILog logger = 
LogManager.GetLogger(typeof(TestcaseConsumer));
        private ManualResetEvent doneEvent;
        private string filter;

        public TestcaseConsumer(ManualResetEvent resetEvent, string filter)
        {
            logger.Info("Starting Testcase Consumer");
            doneEvent = resetEvent;
            this.filter = filter;
            logger.Info("Filter Set for Testcase Consumer::" + filter);

        }

        [STAThread]
        public void CreateTestcaseListener()
        {
            logger.Info("Starting Testcase Listener");
            Uri connecturi = new 
Uri("activemq:tcp://windflyServerIP:61616?keepAlive=true");
            IConnectionFactory connectionFactory = new 
NMSConnectionFactory(connecturi);

            try
            {
                using (IConnection connection = 
connectionFactory.CreateConnection(ClientConstants.USERNAME, 
ClientConstants.PASSWORD))
                using (ISession session = connection.CreateSession())
                {
                    IDestination destination = 
session.GetDestination(ClientConstants.TestCaseQueue);
                    using (IMessageConsumer msgConsumer = 
session.CreateConsumer(destination, filter))
                    {
                        connection.Start();
                        while (!ClientConstants.ShutdownAutoBolt && 
!ClientConstants.RestartAutoBoltClient)
                        {
                            if (!connection.IsStarted)
                                connection.Start();
                            IMessage message = msgConsumer.Receive(new 
TimeSpan(1000));
                            //Process Message
                            if (message != null)
                            {
                                message.Acknowledge();
                                connection.Stop();
                                MessageType msgType = 
(MessageType)Enum.Parse(typeof(MessageType), 
(string)message.Properties[QueueMessageUtil.MESSAGETYPESTRING]);
                                logger.Info("MessageType::" + msgType);

                                // String 
msgtype=(string)message.Properties[QueueMessageUtil.MESSAGETYPESTRING];
                                switch (msgType)
                                {
                                    case MessageType.TESTCASEEXECUTIONMESSAGE:
                                        //Message Processing
                                        break;

                                    case MessageType.TERMINALINFO:
                                        //Message Processing
                                        break;

                                    case 
MessageType.TERMINALPROJECTDOWNLOADMESSAGE:
                                        //Message Processing
                                        break;

                                    default:
                                        logger.Info("Unknown Message found::" + 
msgType);
                                        break;
                                }
                            }
                        }
                    }
                }
            }
            catch (NMSException error)
            {
                logger.Error("Error in NMS, testcase message Handling", error);
            }
            finally
            {
                logger.Info("Exit finally");
            }
            doneEvent.Set();
        }
    }
}
{code}

Also the sample piece to browse Queue is given below

{code:title=TestClass.java|borderStyle=solid}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Enumeration;
import java.util.Properties;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Queue;
import javax.jms.QueueBrowser;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;

public class TestClass {
        public static void main(String[] args) throws JMSException {
                QueueConnection con = null;
                try {
                        final Properties env = new Properties();
                        env.put(Context.INITIAL_CONTEXT_FACTORY, 
"org.jboss.naming.remote.client.InitialContextFactory");
                        env.put(Context.PROVIDER_URL, 
"http-remoting://WildflyServerIp:8080");
                        env.put(Context.SECURITY_PRINCIPAL, "Username");
                        env.put(Context.SECURITY_CREDENTIALS, "Password");
                        InitialContext ctx = new InitialContext(env);
                        QueueConnectionFactory f = (QueueConnectionFactory) 
ctx.lookup("java:jms/RemoteConnectionFactory");
                        con = f.createQueueConnection("Username", "Password");
                        con.start();
                        QueueSession ses = con.createQueueSession(false, 
Session.AUTO_ACKNOWLEDGE);
                        Queue t = (Queue) 
ctx.lookup("java:jms/queue/TestcaseExecutionQ");
                        browseQueue(ses, t);
                } catch (Exception e) {
                        System.out.println(e);
                }finally{
                        con.stop();
                        con.close();
                }
        }

        private static void browseQueue(QueueSession ses, Queue t) throws 
JMSException {
                QueueBrowser browser = ses.createBrowser(t);
                try {
                        Enumeration msgEnum = browser.getEnumeration();
                        while (msgEnum.hasMoreElements()) {
                                Message message = (Message) 
msgEnum.nextElement();
                                System.out.println(message);
                        }
                } catch(Throwable trow){
                        trow.printStackTrace();
                }finally {
                        if (browser != null) {
                                browser.close();
                        }
                }
        }
}
{code}

Subsystem for wildfly 10.0.1 for JMS configuration is given below
{code:xml}
<subsystem xmlns="urn:jboss:domain:messaging-activemq:1.0">
            <server name="default">
                <security-setting name="#">
                    <role name="guest" send="true" consume="true" 
create-non-durable-queue="true" delete-non-durable-queue="true"/>
                </security-setting>
                <address-setting name="#" dead-letter-address="jms.queue.DLQ" 
expiry-address="jms.queue.ExpiryQueue" max-size-bytes="10485760" 
page-size-bytes="2097152" message-counter-history-day-limit="10"/>
                <http-connector name="http-connector" socket-binding="http" 
endpoint="http-acceptor"/>
                <http-connector name="http-connector-throughput" 
socket-binding="http" endpoint="http-acceptor-throughput">
                    <param name="batch-delay" value="50"/>
                </http-connector>
                <in-vm-connector name="in-vm" server-id="0"/>
                <http-acceptor name="http-acceptor" http-listener="default"/>
                <http-acceptor name="http-acceptor-throughput" 
http-listener="default">
                    <param name="batch-delay" value="50"/>
                    <param name="direct-deliver" value="false"/>
                </http-acceptor>
                <remote-acceptor name="OpenWire" 
socket-binding="messaging-openwire">
                    <param name="protocols" value="OPENWIRE"/>
                </remote-acceptor>
                <in-vm-acceptor name="in-vm" server-id="0"/>
                <jms-queue name="ExpiryQueue" 
entries="java:/jms/queue/ExpiryQueue"/>
                <jms-queue name="DLQ" entries="java:/jms/queue/DLQ"/>
                <jms-queue name="HeartBeatQ" 
entries="java:/jms/queue/HeartBeatQ java:/jboss/exported/jms/queue/HeartBeatQ"/>
                <jms-queue name="testsuiteQ" 
entries="java:/jms/queue/testSuiteQ java:/jboss/exported/jms/queue/TestSuiteQ"/>
                <jms-queue name="testcaseExecutionQ" 
entries="java:/jms/queue/testcaseExecutionQ 
java:/jboss/exported/jms/queue/TestcaseExecutionQ"/>
                <jms-queue name="testcaseResultQ" 
entries="java:/jms/queue/testcaseResultQ 
java:/jboss/exported/jms/queue/TestcaseResultQ"/>
                <jms-queue name="trackingQ" entries="java:/jms/queue/trackingQ 
java:/jboss/exported/jms/queue/TrackingQ"/>
                <jms-queue name="PowerQ" entries="java:/jms/queue/PowerQ 
java:/jboss/exported/jms/queue/PowerQ"/>
                <connection-factory name="InVmConnectionFactory" 
entries="java:/ConnectionFactory" connectors="in-vm"/>
                <connection-factory name="RemoteConnectionFactory" 
entries="java:jboss/exported/jms/RemoteConnectionFactory" 
connectors="http-connector"/>
                <pooled-connection-factory name="activemq-ra" 
entries="java:/JmsXA java:jboss/DefaultJMSConnectionFactory" connectors="in-vm" 
transaction="xa"/>
            </server>
        </subsystem>
{code}




--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to