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)