Working fine in java but switched a client over to C#, producer worked,
consumer works, just dies after 1 message:
##############################
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using Apache.NMS;
using Apache.NMS.ActiveMQ;
using Apache.NMS.Util;
namespace QuoteProvider
{
public class JMSQuoteProvider : IJMSQuoteSource
{
protected static AutoResetEvent semaphore = new
AutoResetEvent(false);
protected static ITextMessage message = null;
protected static TimeSpan receiveTimeout = TimeSpan.FromSeconds(10);
public event Action<IncomingQuote> QuoteArrived;
public JMSQuoteProvider()
{
Thread JMSQuotes = new Thread(new ThreadStart(run));
JMSQuotes.IsBackground = true;
JMSQuotes.Priority = ThreadPriority.Normal;
JMSQuotes.Start();
}
private void run()
{
Uri connecturi = new
Uri("activemq:tcp://127.0.0.1:61616?consumer.dispatchAsync=true");
IConnectionFactory factory = new
NMSConnectionFactory(connecturi);
using (IConnection connection = factory.CreateConnection())
using (ISession session = connection.CreateSession())
{
IDestination destination = session.GetTopic("PX.UPDATE");
using (IMessageConsumer consumer =
session.CreateConsumer(destination))
{
connection.Start();
consumer.Listener += new MessageListener(OnMessage);
semaphore.WaitOne();
if (message != null)
{
crack(message.Text.ToString());
}
}
}
}
private void crack(String msg)
{
// crack logic //
IncomingQuote tempQuote = new IncomingQuote(symbol, bid, ask,
stamp);
QuoteArrived(tempQuote);
}
protected static void OnMessage(IMessage receivedMsg)
{
message = receivedMsg as ITextMessage;
semaphore.Set();
}
#region IJMSQuoteSource Members
protected virtual void OnQuoteArrived(IncomingQuote quote)
{
if (QuoteArrived != null)
QuoteArrived(quote);
}
#endregion
}
}
--
View this message in context:
http://old.nabble.com/My-NMS-topic-consumer-dies-after-1-message-tp27349478p27349478.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.