public void DoTestSynchRecover() { session = connection.CreateSession(AcknowledgementMode.ClientAcknowledge); IMessageConsumer consumer = session.CreateConsumer(destination); connection.Start(); IMessageProducer producer = session.CreateProducer(destination); producer.DeliveryMode = MsgDeliveryMode.NonPersistent; producer.Send(session.CreateTextMessage("First")); producer.Send(session.CreateTextMessage("Second")); ITextMessage message = consumer.Receive(TimeSpan.FromMilliseconds(2000)) as ITextMessage; Assert.AreEqual("First", message.Text); Assert.IsFalse(message.NMSRedelivered); message.Acknowledge(); message = (ITextMessage)consumer.Receive(TimeSpan.FromMilliseconds(2000)); Assert.AreEqual("Second", message.Text); Assert.IsFalse(message.NMSRedelivered); session.Recover(); message = (ITextMessage)consumer.Receive(TimeSpan.FromMilliseconds(3000)); Assert.AreEqual("Second", message.Text); Assert.IsTrue(message.NMSRedelivered); message.Acknowledge(); }
protected void HandleMessage(IMessage receivedMsg) { ITextMessage message = receivedMsg as ITextMessage; if (message == null) { Logger.Warning(string.Format("received JMS message with id {0} which is not a text message", receivedMsg.NMSMessageId)); receivedMsg.Acknowledge(); return; } Logger.Debug(string.Format("received text message with id {0} and text {1}", message.NMSMessageId, message.Text)); try { ICacheEvent cacheEvent = CacheEventSerializer.Deserialize(message.Text); foreach (IObserver <ICacheEvent> observer in observers) { observer.OnNext(cacheEvent); } } catch (Exception e) { Logger.Error("error in invalidation transaction: {0}", e.ToString()); foreach (IObserver <ICacheEvent> observer in observers) { observer.OnError(e); } } finally { message.Acknowledge(); Logger.Debug(string.Format("acknowledged received message with id {0}", message.NMSMessageId)); } }
public T ReceiveMessage <T>(string queueName, out string originMessage) where T : class { originMessage = null; using (ISession session = CreateSession(AcknowledgementMode.ClientAcknowledge)) { var queue = session.GetQueue(queueName); var comsumer = session.CreateConsumer(queue); ITextMessage message = comsumer.Receive(timeOut) as ITextMessage; if (message == null || string.IsNullOrWhiteSpace(message.Text)) { return(default(T)); } originMessage = message.Text; try { T t = Newtonsoft.Json.JsonConvert.DeserializeObject <T>(message.Text); message.Acknowledge(); return(t); } catch (Exception ex) { throw ex; } finally { connection.Stop(); } } }
/// <summary> /// 提交 /// </summary> public void Commit() { if (!isCommitted) { isCommitted = true; message.Acknowledge(); } }
private void OnTestAsynchRecoverMessage(IMessage msg) { counter++; try { ITextMessage message = msg as ITextMessage; switch (counter) { case 1: Tracer.Debug("Got first Message: " + message.Text); Assert.AreEqual("First", message.Text); Assert.IsFalse(message.NMSRedelivered); message.Acknowledge(); break; case 2: Tracer.Debug("Got Second Message: " + message.Text); Assert.AreEqual("Second", message.Text); Assert.IsFalse(message.NMSRedelivered); session.Recover(); break; case 3: Tracer.Debug("Got Third Message: " + message.Text); Assert.AreEqual("Second", message.Text); Assert.IsTrue(message.NMSRedelivered); message.Acknowledge(); doneCountDownLatch.countDown(); break; default: errorMessage = "Got too many messages: " + counter; Tracer.Debug(errorMessage); doneCountDownLatch.countDown(); break; } } catch (Exception e) { errorMessage = "Got exception: " + e.Message; Tracer.Warn("Exception on Message Receive: " + e.Message); doneCountDownLatch.countDown(); } }
public void TestSendWhileClosed(AcknowledgementMode ackMode) { try { using (IConnection connection = CreateConnection(TEST_CLIENT_ID)) { connection.Start(); using (ISession session = connection.CreateSession(ackMode)) { ITopic topic = session.GetTopic(DURABLE_TOPIC); IMessageProducer producer = session.CreateProducer(topic); producer.DeliveryMode = MsgDeliveryMode.Persistent; ISession consumeSession = connection.CreateSession(ackMode); IMessageConsumer consumer = consumeSession.CreateDurableConsumer(topic, CONSUMER_ID, null, false); Thread.Sleep(1000); consumer.Dispose(); consumer = null; ITextMessage message = session.CreateTextMessage("DurableTest-TestSendWhileClosed"); message.Properties.SetString("test", "test"); message.NMSType = "test"; producer.Send(message); if (AcknowledgementMode.Transactional == ackMode) { session.Commit(); } consumer = consumeSession.CreateDurableConsumer(topic, CONSUMER_ID, null, false); ITextMessage msg = consumer.Receive(TimeSpan.FromMilliseconds(1000)) as ITextMessage; msg.Acknowledge(); if (AcknowledgementMode.Transactional == ackMode) { consumeSession.Commit(); } Assert.IsNotNull(msg); Assert.AreEqual(msg.Text, "DurableTest-TestSendWhileClosed"); Assert.AreEqual(msg.NMSType, "test"); Assert.AreEqual(msg.Properties.GetString("test"), "test"); } } } catch (Exception ex) { Assert.Fail(ex.Message); } finally { UnregisterDurableConsumer(TEST_CLIENT_ID, CONSUMER_ID); } }
public void ShouldAcknowledgeMessagesIfValid() { _source = new MessageSource <ITestMessage>(_lazyConnection, new[] { _deserializer }, _destination, AcknowledgementMode.ClientAcknowledge); Mock <IMessageConsumer> mockConsumer = MockConsumerExtensions.Create(_session, _destination); ITextMessage textMessage = A.Fake <ITextMessage>(); _source.Messages.Subscribe(_observer); mockConsumer.RaiseFakeMessage(textMessage); A.CallTo(() => textMessage.Acknowledge()).MustHaveHappened(Repeated.Exactly.Once); }
public void SendReceiveVirtualTopicMessage(AcknowledgementMode ackMode, MsgDeliveryMode deliveryMode) { using (IConnection connection = CreateConnection(TEST_CLIENT_ID)) { connection.Start(); using (ISession session = connection.CreateSession(ackMode)) { using (IMessageConsumer consumerA = session.CreateConsumer(session.GetQueue(CONSUMER_A_DESTINATION_NAME))) using (IMessageConsumer consumerB = session.CreateConsumer(session.GetQueue(CONSUMER_B_DESTINATION_NAME))) using (IMessageProducer producer = session.CreateProducer(session.GetTopic(PRODUCER_DESTINATION_NAME))) { producer.RequestTimeout = receiveTimeout; producer.DeliveryMode = deliveryMode; for (int index = 0; index < totalMsgs; index++) { string msgText = "Message #" + index; Tracer.Info("Sending: " + msgText); producer.Send(session.CreateTextMessage(msgText)); } if (AcknowledgementMode.Transactional == ackMode) { session.Commit(); } for (int index = 0; index < totalMsgs; index++) { string msgText = "Message #" + index; ITextMessage messageA = consumerA.Receive(receiveTimeout) as ITextMessage; Assert.IsNotNull(messageA, "Did not receive message for consumer A."); messageA.Acknowledge(); Tracer.Info("Received A: " + msgText); ITextMessage messageB = consumerB.Receive(receiveTimeout) as ITextMessage; Assert.IsNotNull(messageB, "Did not receive message for consumer B."); messageB.Acknowledge(); Tracer.Info("Received B: " + msgText); Assert.AreEqual(msgText, messageA.Text, "Message text A does not match."); Assert.AreEqual(msgText, messageB.Text, "Message text B does not match."); } if (AcknowledgementMode.Transactional == ackMode) { session.Commit(); } } } } }
public void ShouldNotAcknowledgeMessagesIfInvalid() { _source = new MessageSource <ITestMessage>(_lazyConnection, new[] { _deserializer }, _destination, AcknowledgementMode.ClientAcknowledge); Mock <IMessageConsumer> mockConsumer = MockConsumerExtensions.Create(_session, _destination); ITextMessage textMessage = A.Fake <ITextMessage>(); A.CallTo(() => _deserializer.Deserialize(A <string> .Ignored)).Throws <Exception>(); _source.Messages.Subscribe(_observer); mockConsumer.RaiseFakeMessage(textMessage); A.CallTo(() => textMessage.Acknowledge()).MustNotHaveHappened(); }
public void ShouldAcknowledgeMessagesIfValid() { _source = new MessageSource <ITestMessage>(_lazyConnection, new[] { _deserializer }, _destination, AcknowledgementMode.ClientAcknowledge); var consumer = A.Fake <IMessageConsumer>(); A.CallTo(() => _session.CreateConsumer(_destination, null, false)).Returns(consumer); ITextMessage textMessage = A.Fake <ITextMessage>(); _source.Messages.Subscribe(_observer); consumer.Listener += Raise.FreeForm.With((Apache.NMS.IMessage)textMessage); A.CallTo(() => textMessage.Acknowledge()).MustHaveHappened(Repeated.Exactly.Once); }
public void TestIndividualAcknowledgeMultiMessages_AcknowledgeFirstTest() { ISession session = connection.CreateSession(AcknowledgementMode.IndividualAcknowledge); // Push 2 messages to queue ITemporaryQueue queue = session.CreateTemporaryQueue(); IMessageProducer producer = session.CreateProducer(queue); ITextMessage msg = session.CreateTextMessage("test 1"); producer.Send(msg, MsgDeliveryMode.Persistent, MsgPriority.Normal, TimeSpan.MinValue); msg = session.CreateTextMessage("test 2"); producer.Send(msg, MsgDeliveryMode.Persistent, MsgPriority.Normal, TimeSpan.MinValue); producer.Close(); IMessageConsumer consumer = session.CreateConsumer(queue); // Read the first message ITextMessage fetchedMessage1 = (ITextMessage)consumer.Receive(TimeSpan.FromMilliseconds(2000)); Assert.IsNotNull(fetchedMessage1); Assert.AreEqual("test 1", fetchedMessage1.Text); // Read the second message ITextMessage fetchedMessage2 = (ITextMessage)consumer.Receive(TimeSpan.FromMilliseconds(2000)); Assert.IsNotNull(fetchedMessage2); Assert.AreEqual("test 2", fetchedMessage2.Text); // Acknowledge first message fetchedMessage1.Acknowledge(); consumer.Close(); // Read first message a second time consumer = session.CreateConsumer(queue); fetchedMessage1 = (ITextMessage)consumer.Receive(TimeSpan.FromMilliseconds(2000)); Assert.IsNotNull(fetchedMessage1); Assert.AreEqual("test 2", fetchedMessage1.Text); // Try to read second message a second time fetchedMessage2 = (ITextMessage)consumer.Receive(TimeSpan.FromMilliseconds(2000)); Assert.IsNull(fetchedMessage2); consumer.Close(); }
public void TestLastMessageAcked() { ISession session = connection.CreateSession(AcknowledgementMode.IndividualAcknowledge); ITemporaryQueue queue = session.CreateTemporaryQueue(); IMessageProducer producer = session.CreateProducer(queue); ITextMessage msg1 = session.CreateTextMessage("msg1" + Guid.NewGuid().ToString()); ITextMessage msg2 = session.CreateTextMessage("msg2" + Guid.NewGuid().ToString()); ITextMessage msg3 = session.CreateTextMessage("msg3" + Guid.NewGuid().ToString()); producer.Send(msg1); producer.Send(msg2); producer.Send(msg3); // Consume the message... IMessageConsumer consumer = session.CreateConsumer(queue); ITextMessage ackmsg = consumer.Receive(TimeSpan.FromMilliseconds(1000)) as ITextMessage; Assert.IsNotNull(ackmsg); Assert.AreEqual(msg1.Text, ackmsg.Text); ackmsg = consumer.Receive(TimeSpan.FromMilliseconds(1000)) as ITextMessage; Assert.IsNotNull(ackmsg); Assert.AreEqual(msg2.Text, ackmsg.Text); ackmsg = consumer.Receive(TimeSpan.FromMilliseconds(1000)) as ITextMessage; Assert.IsNotNull(ackmsg); Assert.AreEqual(msg3.Text, ackmsg.Text); ackmsg.Acknowledge(); // Reset the session. session.Close(); session = connection.CreateSession(AcknowledgementMode.IndividualAcknowledge); // Attempt to Consume the message... consumer = session.CreateConsumer(queue); ackmsg = consumer.Receive(TimeSpan.FromMilliseconds(1000)) as ITextMessage; Assert.IsNotNull(ackmsg); Assert.AreEqual(msg1.Text, ackmsg.Text); ackmsg = consumer.Receive(TimeSpan.FromMilliseconds(1000)) as ITextMessage; Assert.IsNotNull(ackmsg); Assert.AreEqual(msg2.Text, ackmsg.Text); IMessage msg = consumer.Receive(TimeSpan.FromMilliseconds(1000)); Assert.IsNull(msg); session.Close(); }
private void OnMessage(IMessageConsumer sender, MessageEventArgs args) { ITextMessage msg = (ITextMessage)args.Message; dynamic rawMetricObject = JsonConvert.DeserializeObject(msg.Text); DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); long dateLong = Convert.ToInt64((rawMetricObject.date.Value - epoch).Millisecond); Atlantis.RawMetrics.DAL.Models.RawMetric modelMetric = new Atlantis.RawMetrics.DAL.Models.RawMetric() { Date = dateLong, DeviceId = (int)rawMetricObject.deviceId.Value, Value = rawMetricObject.value.Value }; RawMetric returnValue; returnValue = dao.Create(modelMetric); msg.Acknowledge(); }
static void Main(string[] args) { Uri connecturi = new Uri("activemq:tcp://activemq:61616"); // NOTE: ensure the nmsprovider-activemq.config file exists in the executable folder. IConnectionFactory factory = new NMSConnectionFactory(connecturi); using (IConnection connection = factory.CreateConnection()) using (ISession session = connection.CreateSession()) { IDestination destination = SessionUtil.GetDestination(session, "queue://FOO.BAR"); // Create a consumer and producer using (IMessageConsumer consumer = session.CreateConsumer(destination)) { // Start the connection so that messages will be processed. connection.Start(); // Consume a message while (true) { ITextMessage message = consumer.Receive() as ITextMessage; if (message == null) { Console.WriteLine("No message received!"); } else { message.Acknowledge(); Console.WriteLine("Received message with ID: " + message.NMSMessageId); Console.WriteLine("Received message with text: " + message.Text); } } } } }
protected void OnInvalidate(IMessage receivedMsg) { IObjectMessage m2 = receivedMsg as IObjectMessage; Debug.WriteLine("message has the following raw content:"); // Debug.WriteLine(m2.) try { object obj = m2.Body; } catch (Exception e) { Debug.WriteLine("caught exception while accessing message body: " + e.Message); } object obj2 = m2.ToObject(); var msg = receivedMsg as IBytesMessage; var result = msg != null ? new UTF8Encoding().GetString(msg.Content) : "bytes message is null"; ITextMessage message = receivedMsg as ITextMessage; if (message == null) { Logger.Debug(string.Format("message with id {0} is not a text message", receivedMsg.NMSMessageId)); Debug.WriteLine(string.Format("message with id {0} is not a text message", receivedMsg.NMSMessageId)); receivedMsg.Acknowledge(); return; } Logger.Debug(string.Format("received text message with id {0} and text {1}", message.NMSMessageId, message.Text)); Debug.WriteLine(string.Format("received text message with id {0} and text {1}", message.NMSMessageId, message.Text)); try { var invalidationInformation = GetInvalidationInformation(message); foreach (string dcpUri in invalidationInformation.InvalidationDcps) { foreach (ICacheAgent cacheAgent in CacheAgents) { Logger.Debug(string.Format("telling cache agent {0} to remove DCP with uri {1}", cacheAgent.GetType().Name, dcpUri)); //cacheAgent.Remove(dcpUri) } } foreach (InvalidationUrl url in invalidationInformation.InvalidationUrls) { foreach (ICacheAgent cacheAgent in CacheAgents) { Logger.Debug(string.Format("telling cache agent {0} to remove page with url {1}", cacheAgent.GetType().Name, url.TcmUri)); //cacheAgent.Remove(url.TcmUri) } } //LoggerService.Debug("<<Received message: finished processing"); } catch (Exception e) { Logger.Error("error in invalidation transaction: {0}", e.ToString()); } finally { message.Acknowledge(); Logger.Debug(string.Format("acknowledged received message with id {0}", message.NMSMessageId)); } }
public void SendReceiveVirtualTopicMessage( [Values(AcknowledgementMode.AutoAcknowledge, AcknowledgementMode.ClientAcknowledge, AcknowledgementMode.DupsOkAcknowledge, AcknowledgementMode.Transactional)] AcknowledgementMode ackMode, [Values(MsgDeliveryMode.NonPersistent, MsgDeliveryMode.Persistent)] MsgDeliveryMode deliveryMode) { using (IConnection connection = CreateConnection(TEST_CLIENT_ID)) { connection.Start(); using (ISession session = connection.CreateSession(ackMode)) { using (IMessageConsumer consumerA = session.CreateConsumer(session.GetQueue(CONSUMER_A_DESTINATION_NAME))) using (IMessageConsumer consumerB = session.CreateConsumer(session.GetQueue(CONSUMER_B_DESTINATION_NAME))) using (IMessageProducer producer = session.CreateProducer(session.GetTopic(PRODUCER_DESTINATION_NAME))) { producer.DeliveryMode = deliveryMode; for (int index = 0; index < totalMsgs; index++) { string msgText = "Message #" + index; Tracer.Info("Sending: " + msgText); producer.Send(session.CreateTextMessage(msgText)); } if (AcknowledgementMode.Transactional == ackMode) { session.Commit(); } for (int index = 0; index < totalMsgs; index++) { string msgText = "Message #" + index; ITextMessage messageA = consumerA.Receive(receiveTimeout) as ITextMessage; Assert.IsNotNull(messageA, "Did not receive message for consumer A."); messageA.Acknowledge(); Tracer.Info("Received A: " + msgText); ITextMessage messageB = consumerB.Receive(receiveTimeout) as ITextMessage; Assert.IsNotNull(messageB, "Did not receive message for consumer B."); messageB.Acknowledge(); Tracer.Info("Received B: " + msgText); Assert.AreEqual(msgText, messageA.Text, "Message text A does not match."); Assert.AreEqual(msgText, messageB.Text, "Message text B does not match."); } if (AcknowledgementMode.Transactional == ackMode) { session.Commit(); } } // Give the Broker some time to remove the subscriptions. Thread.Sleep(2000); try { ((Session)session).DeleteDestination(session.GetQueue(CONSUMER_A_DESTINATION_NAME)); ((Session)session).DeleteDestination(session.GetQueue(CONSUMER_B_DESTINATION_NAME)); } catch { } } } }
public void TestDurableConsumerSelectorChange( [Values(AcknowledgementMode.AutoAcknowledge, AcknowledgementMode.ClientAcknowledge, AcknowledgementMode.DupsOkAcknowledge, AcknowledgementMode.Transactional)] AcknowledgementMode ackMode) { try { using (IConnection connection = CreateConnection(TEST_CLIENT_AND_CONSUMER_ID)) { connection.Start(); using (ISession session = connection.CreateSession(ackMode)) { ITopic topic = (ITopic)CreateDestination(session, DestinationType.Topic); IMessageProducer producer = session.CreateProducer(topic); IMessageConsumer consumer = session.CreateDurableConsumer(topic, TEST_CLIENT_AND_CONSUMER_ID, "color='red'", false); producer.DeliveryMode = MsgDeliveryMode.Persistent; // Send the messages ITextMessage sendMessage = session.CreateTextMessage("1st"); sendMessage.Properties["color"] = "red"; producer.Send(sendMessage); if (AcknowledgementMode.Transactional == ackMode) { session.Commit(); } ITextMessage receiveMsg = consumer.Receive(receiveTimeout) as ITextMessage; Assert.IsNotNull(receiveMsg, "Failed to retrieve 1st durable message."); Assert.AreEqual("1st", receiveMsg.Text); Assert.AreEqual(MsgDeliveryMode.Persistent, receiveMsg.NMSDeliveryMode, "NMSDeliveryMode does not match"); receiveMsg.Acknowledge(); if (AcknowledgementMode.Transactional == ackMode) { session.Commit(); } // Change the subscription, allowing some time for the Broker to purge the // consumers resources. consumer.Dispose(); Thread.Sleep(1000); consumer = session.CreateDurableConsumer(topic, TEST_CLIENT_AND_CONSUMER_ID, "color='blue'", false); sendMessage = session.CreateTextMessage("2nd"); sendMessage.Properties["color"] = "red"; producer.Send(sendMessage); sendMessage = session.CreateTextMessage("3rd"); sendMessage.Properties["color"] = "blue"; producer.Send(sendMessage); if (AcknowledgementMode.Transactional == ackMode) { session.Commit(); } // Selector should skip the 2nd message. receiveMsg = consumer.Receive(receiveTimeout) as ITextMessage; Assert.IsNotNull(receiveMsg, "Failed to retrieve durable message."); Assert.AreEqual("3rd", receiveMsg.Text, "Retrieved the wrong durable message."); Assert.AreEqual(MsgDeliveryMode.Persistent, receiveMsg.NMSDeliveryMode, "NMSDeliveryMode does not match"); receiveMsg.Acknowledge(); if (AcknowledgementMode.Transactional == ackMode) { session.Commit(); } // Make sure there are no pending messages. Assert.IsNull(consumer.ReceiveNoWait(), "Wrong number of messages in durable subscription."); } } } catch (Exception ex) { Assert.Fail(ex.Message); } finally { // Pause to allow Stomp to unregister at the broker. Thread.Sleep(500); UnregisterDurableConsumer(TEST_CLIENT_AND_CONSUMER_ID, TEST_CLIENT_AND_CONSUMER_ID); } }
public void TestSendWhileClosed( [Values(AcknowledgementMode.AutoAcknowledge, AcknowledgementMode.ClientAcknowledge, AcknowledgementMode.DupsOkAcknowledge, AcknowledgementMode.Transactional)] AcknowledgementMode ackMode) { try { using (IConnection connection = CreateConnection(TEST_CLIENT_AND_CONSUMER_ID)) { connection.Start(); using (ISession session = connection.CreateSession(ackMode)) { ITopic topic = (ITopic)CreateDestination(session, DestinationType.Topic); IMessageProducer producer = session.CreateProducer(topic); producer.DeliveryMode = MsgDeliveryMode.Persistent; ISession consumeSession = connection.CreateSession(ackMode); IMessageConsumer consumer = consumeSession.CreateDurableConsumer(topic, TEST_CLIENT_AND_CONSUMER_ID, null, false); Thread.Sleep(1000); consumer.Dispose(); consumer = null; ITextMessage message = session.CreateTextMessage("DurableTest-TestSendWhileClosed"); message.Properties.SetString("test", "test"); message.NMSType = "test"; producer.Send(message); if (AcknowledgementMode.Transactional == ackMode) { session.Commit(); } Thread.Sleep(1000); consumer = consumeSession.CreateDurableConsumer(topic, TEST_CLIENT_AND_CONSUMER_ID, null, false); ITextMessage msg = consumer.Receive(TimeSpan.FromMilliseconds(1000)) as ITextMessage; msg.Acknowledge(); if (AcknowledgementMode.Transactional == ackMode) { consumeSession.Commit(); } Assert.IsNotNull(msg); Assert.AreEqual(msg.Text, "DurableTest-TestSendWhileClosed"); Assert.AreEqual(msg.NMSType, "test"); Assert.AreEqual(msg.Properties.GetString("test"), "test"); } } } catch (Exception ex) { Assert.Fail(ex.Message); } finally { // Pause to allow Stomp to unregister at the broker. Thread.Sleep(500); UnregisterDurableConsumer(TEST_CLIENT_AND_CONSUMER_ID, TEST_CLIENT_AND_CONSUMER_ID); } }
public void ReloadData() { if (_AsyncReadThread != null) { if (_AsyncReadThread.IsAlive) { return; // Already fetching data } } _AsyncReadThread = new Thread(() => { if (isStopping) { return; } try { // Consume a message semaphore.WaitOne((int)receiveTimeout.TotalMilliseconds, true); if (message == null) { //selfReference.UpdateText("No message received!" + "\n"); } else { if (lastMessage != null) { if (lastMessage.NMSMessageId == message.NMSMessageId) { return; //sameMessage } else { this.lastMessage = message; } } else { this.lastMessage = message; } message.Acknowledge(); if (debug) { selfReference.UpdateText("Received message with text: " + message.Text); } GameplayTypes gameTypes = GameplayTypes.NONE; if (message.Properties.Contains("GameType")) { gameTypes = (GameplayTypes)Enum.Parse(typeof(GameplayTypes), message.Properties.GetString("GameType")); } switch (gameTypes) { case GameplayTypes.Connect: HandleConnectionMessage(); break; case GameplayTypes.Disconnect: HandleDisconnectMessage(); break; case GameplayTypes.Initialised: HandleInitialisedMessage(); break; case GameplayTypes.Movement: break; case GameplayTypes.Turn: break; case GameplayTypes.Surrender: break; default: //No Default Handler break; } } } catch (Exception e) { //selfReference.UpdateText(e.Message + " -" + e.GetBaseException().ToString() + "\n"); } }); _AsyncReadThread.Start(); }
public void TestDurableConsumerSelectorChange(AcknowledgementMode ackMode) { try { using (IConnection connection = CreateConnection(TEST_CLIENT_ID)) { connection.Start(); using (ISession session = connection.CreateSession(ackMode)) { ITopic topic = session.GetTopic(DURABLE_TOPIC); IMessageProducer producer = session.CreateProducer(topic); IMessageConsumer consumer = session.CreateDurableConsumer(topic, CONSUMER_ID, "color='red'", false); producer.DeliveryMode = MsgDeliveryMode.Persistent; // Send the messages ITextMessage sendMessage = session.CreateTextMessage("1st"); sendMessage.Properties["color"] = "red"; producer.Send(sendMessage); if (AcknowledgementMode.Transactional == ackMode) { session.Commit(); } ITextMessage receiveMsg = consumer.Receive(receiveTimeout) as ITextMessage; Assert.IsNotNull(receiveMsg, "Failed to retrieve 1st durable message."); Assert.AreEqual("1st", receiveMsg.Text); Assert.AreEqual(MsgDeliveryMode.Persistent, receiveMsg.NMSDeliveryMode, "NMSDeliveryMode does not match"); receiveMsg.Acknowledge(); if (AcknowledgementMode.Transactional == ackMode) { session.Commit(); } // Change the subscription. consumer.Dispose(); consumer = session.CreateDurableConsumer(topic, CONSUMER_ID, "color='blue'", false); sendMessage = session.CreateTextMessage("2nd"); sendMessage.Properties["color"] = "red"; producer.Send(sendMessage); sendMessage = session.CreateTextMessage("3rd"); sendMessage.Properties["color"] = "blue"; producer.Send(sendMessage); if (AcknowledgementMode.Transactional == ackMode) { session.Commit(); } // Selector should skip the 2nd message. receiveMsg = consumer.Receive(receiveTimeout) as ITextMessage; Assert.IsNotNull(receiveMsg, "Failed to retrieve durable message."); Assert.AreEqual("3rd", receiveMsg.Text, "Retrieved the wrong durable message."); Assert.AreEqual(MsgDeliveryMode.Persistent, receiveMsg.NMSDeliveryMode, "NMSDeliveryMode does not match"); receiveMsg.Acknowledge(); if (AcknowledgementMode.Transactional == ackMode) { session.Commit(); } // Make sure there are no pending messages. Assert.IsNull(consumer.ReceiveNoWait(), "Wrong number of messages in durable subscription."); } } } catch (Exception ex) { Assert.Fail(ex.Message); } finally { UnregisterDurableConsumer(TEST_CLIENT_ID, CONSUMER_ID); } }
public void TestDurableConsumerSelectorChange(AcknowledgementMode ackMode) { string CLIENT_ID_AND_SUBSCIPTION = TEST_CLIENT_ID + ":" + new Random().Next(); try { using (IConnection connection = CreateConnection(CLIENT_ID_AND_SUBSCIPTION)) { connection.Start(); using (ISession session = connection.CreateSession(ackMode)) { ITopic topic = session.GetTopic(DURABLE_TOPIC); IMessageProducer producer = session.CreateProducer(topic); IMessageConsumer consumer = session.CreateDurableConsumer(topic, CLIENT_ID_AND_SUBSCIPTION, "color='red'", false); producer.DeliveryMode = MsgDeliveryMode.Persistent; // Send the messages ITextMessage sendMessage = session.CreateTextMessage("1st"); sendMessage.Properties["color"] = "red"; producer.Send(sendMessage); if (AcknowledgementMode.Transactional == ackMode) { session.Commit(); } ITextMessage receiveMsg = consumer.Receive(receiveTimeout) as ITextMessage; Assert.IsNotNull(receiveMsg, "Failed to retrieve 1st durable message."); Assert.AreEqual("1st", receiveMsg.Text); Assert.AreEqual(MsgDeliveryMode.Persistent, receiveMsg.NMSDeliveryMode, "NMSDeliveryMode does not match"); receiveMsg.Acknowledge(); if (AcknowledgementMode.Transactional == ackMode) { session.Commit(); } // Change the subscription. consumer.Dispose(); // Stomp connection at broker needs some time to cleanup. Thread.Sleep(1000); consumer = session.CreateDurableConsumer(topic, CLIENT_ID_AND_SUBSCIPTION, "color='blue'", false); sendMessage = session.CreateTextMessage("2nd"); sendMessage.Properties["color"] = "red"; producer.Send(sendMessage); sendMessage = session.CreateTextMessage("3rd"); sendMessage.Properties["color"] = "blue"; producer.Send(sendMessage); if (AcknowledgementMode.Transactional == ackMode) { session.Commit(); } // Selector should skip the 2nd message. receiveMsg = consumer.Receive(receiveTimeout) as ITextMessage; Assert.IsNotNull(receiveMsg, "Failed to retrieve durable message."); Assert.AreEqual("3rd", receiveMsg.Text, "Retrieved the wrong durable message."); Assert.AreEqual(MsgDeliveryMode.Persistent, receiveMsg.NMSDeliveryMode, "NMSDeliveryMode does not match"); receiveMsg.Acknowledge(); if (AcknowledgementMode.Transactional == ackMode) { session.Commit(); } // Make sure there are no pending messages. Assert.IsNull(consumer.ReceiveNoWait(), "Wrong number of messages in durable subscription."); } } } catch (Exception ex) { Assert.Fail(ex.Message); } finally { // Pause to allow Stomp to unregister at the broker. Thread.Sleep(250); UnregisterDurableConsumer(CLIENT_ID_AND_SUBSCIPTION, CLIENT_ID_AND_SUBSCIPTION); } }