public void TestMethod_BasicSendReceive() { string testName = "BasicSendReceive"; const int nMsgs = 200; Connection connection = new Connection(testTarget.Address); Session session = new Session(connection); SenderLink sender = new SenderLink(session, "sender-" + testName, testTarget.Path); for (int i = 0; i < nMsgs; ++i) { Message message = new Message("msg" + i); message.Properties = new Properties() { GroupId = "abcdefg" }; message.ApplicationProperties = new ApplicationProperties(); message.ApplicationProperties["sn"] = i; sender.Send(message, null, null); } ReceiverLink receiver = new ReceiverLink(session, "receiver-" + testName, testTarget.Path); for (int i = 0; i < nMsgs; ++i) { Message message = receiver.Receive(); Trace.WriteLine(TraceLevel.Verbose, "receive: {0}", message.ApplicationProperties["sn"]); receiver.Accept(message); } sender.Close(); receiver.Close(); session.Close(); connection.Close(); }
static void Main(string[] args) { string brokerUrl = "amqp://localhost:5672"; string address = "my_queue"; Address brokerAddr = new Address(brokerUrl); Connection connection = new Connection(brokerAddr); Session session = new Session(connection); SenderLink sender = new SenderLink(session, "sender", address); ReceiverLink receiver = new ReceiverLink(session, "receiver", address); Message helloOut = new Message("Hello World!"); sender.Send(helloOut); Message helloIn = receiver.Receive(); receiver.Accept(helloIn); Console.WriteLine(helloIn.Body.ToString()); receiver.Close(); sender.Close(); session.Close(); connection.Close(); }
/// <summary> /// Disposes whatever resources that must be disposed /// </summary> public void Dispose() { if (amqpReceiver != null) { amqpReceiver.Close(); } amqpSession.Close(); amqpConnection.Close(); }
// // Sample invocation: Interop.Drain.exe --broker localhost:5672 --timeout 30 --address my-queue // static int Main(string[] args) { const int ERROR_SUCCESS = 0; const int ERROR_NO_MESSAGE = 1; const int ERROR_OTHER = 2; int exitCode = ERROR_SUCCESS; Connection connection = null; try { Options options = new Options(args); Address address = new Address(options.Url); connection = new Connection(address); Session session = new Session(connection); ReceiverLink receiver = new ReceiverLink(session, "receiver-drain", options.Address); int timeout = int.MaxValue; if (!options.Forever) timeout = 1000 * options.Timeout; Message message = new Message(); int nReceived = 0; receiver.SetCredit(options.InitialCredit); while ((message = receiver.Receive(timeout)) != null) { nReceived++; if (!options.Quiet) { Console.WriteLine("Message(Properties={0}, ApplicationProperties={1}, Body={2}", message.Properties, message.ApplicationProperties, message.Body); } receiver.Accept(message); if (options.Count > 0 && nReceived == options.Count) { break; } } if (message == null) { exitCode = ERROR_NO_MESSAGE; } receiver.Close(); session.Close(); connection.Close(); } catch (Exception e) { Console.WriteLine("Exception {0}.", e); if (null != connection) connection.Close(); exitCode = ERROR_OTHER; } return exitCode; }
protected void GetPartitions(Session session) { ReceiverLink receiverLink = null; SenderLink senderLink = null; try { // create a pair of links for request/response Trace.WriteLine(TraceLevel.Information, "Creating a request and a response link..."); string clientNode = "client-temp-node"; senderLink = new SenderLink(session, "mgmt-sender", "$management"); receiverLink = new ReceiverLink( session, "mgmt-receiver", new Attach() { Source = new Source() { Address = "$management" }, Target = new Target() { Address = clientNode } }, null); var request = new Amqp.Message(); request.Properties = new Properties() { MessageId = "request1", ReplyTo = clientNode }; request.ApplicationProperties = new ApplicationProperties(); request.ApplicationProperties["operation"] = "READ"; request.ApplicationProperties["name"] = settings.EventHubName; request.ApplicationProperties["type"] = "com.microsoft:eventhub"; senderLink.Send(request, null, null); var response = receiverLink.Receive(15000); // time out after 15 seconds if (response == null) { throw new Exception("No get partitions response was received."); } receiverLink.Accept(response); Trace.WriteLine(TraceLevel.Information, "Partition info {0}", response.Body.ToString()); var partitionStrings = (string[])((Map)response.Body)["partition_ids"]; Trace.WriteLine(TraceLevel.Information, "Partitions {0}", string.Join(",", partitionStrings)); this.partitions = new List<string>(partitionStrings); } catch (Exception x) { Trace.WriteLine(TraceLevel.Error, "Error retrieving partitions:\r\n{0}", x.ToString()); throw x; } finally { if (receiverLink != null) receiverLink.Close(); if (senderLink != null) senderLink.Close(); } }
static string[] GetPartitions() { Trace.WriteLine(TraceLevel.Information, "Retrieving partitions..."); Trace.WriteLine(TraceLevel.Information, "Establishing a connection..."); Address address = new Address(sbNamespace, 5671, keyName, keyValue); Connection connection = new Connection(address); Trace.WriteLine(TraceLevel.Information, "Creating a session..."); Session session = new Session(connection); // create a pair of links for request/response Trace.WriteLine(TraceLevel.Information, "Creating a request and a response link..."); string clientNode = "client-temp-node"; SenderLink sender = new SenderLink(session, "mgmt-sender", "$management"); ReceiverLink receiver = new ReceiverLink( session, "mgmt-receiver", new Attach() { Source = new Source() { Address = "$management" }, Target = new Target() { Address = clientNode } }, null); Message request = new Message(); request.Properties = new Properties() { MessageId = "request1", ReplyTo = clientNode }; request.ApplicationProperties = new ApplicationProperties(); request.ApplicationProperties["operation"] = "READ"; request.ApplicationProperties["name"] = entity; request.ApplicationProperties["type"] = "com.microsoft:eventhub"; sender.Send(request, null, null); Message response = receiver.Receive(); if (response == null) { throw new Exception("No response was received."); } receiver.Accept(response); receiver.Close(); sender.Close(); connection.Close(); Trace.WriteLine(TraceLevel.Information, "Partition info {0}", response.Body.ToString()); string[] partitions = (string[])((Map)response.Body)["partition_ids"]; Trace.WriteLine(TraceLevel.Information, "Partitions {0}", string.Join(",", partitions)); Trace.WriteLine(TraceLevel.Information, ""); return partitions; }
void ReceiveMessages(int count, string sessionId) { Trace.WriteLine(TraceLevel.Information, "Establishing a connection..."); Connection connection = new Connection(this.GetAddress()); Trace.WriteLine(TraceLevel.Information, "Creating a session..."); Session session = new Session(connection); Trace.WriteLine(TraceLevel.Information, "Accepting a message session '{0}'...", sessionId ?? "<any>"); Map filters = new Map(); filters.Add(new Symbol("com.microsoft:session-filter"), sessionId); ReceiverLink receiver = new ReceiverLink( session, "sessionful-receiver-link", new Source() { Address = this.Entity, FilterSet = filters }, null); for (int i = 0; i < count; i++) { Message message = receiver.Receive(30000); if (message == null) { break; } if (i == 0) { Trace.WriteLine(TraceLevel.Information, "Received message from session '{0}'", message.Properties.GroupId); } receiver.Accept(message); } Trace.WriteLine(TraceLevel.Information, "Finished receiving. Shutting down..."); Trace.WriteLine(TraceLevel.Information, ""); receiver.Close(); session.Close(); connection.Close(); }
string[] GetPartitions() { Address address = new Address(sbNamespace, 5671, ReckeyName, ReckeyValue); Connection connection = new Connection(address); Session session = new Session(connection); // create a pair of links for request/response string clientNode = "client-temp-node"; SenderLink sender = new SenderLink(session, "mgmt-sender", "$management"); ReceiverLink receiver = new ReceiverLink( session, "mgmt-receiver", new Attach() { Source = new Source() { Address = "$management" }, Target = new Target() { Address = clientNode } }, null); Message request = new Message(); request.Properties = new Properties() { MessageId = "request1", ReplyTo = clientNode }; request.ApplicationProperties = new ApplicationProperties(); request.ApplicationProperties["operation"] = "READ"; request.ApplicationProperties["name"] = entity; request.ApplicationProperties["type"] = "com.microsoft:eventhub"; sender.Send(request, null, null); Message response = receiver.Receive(); if (response == null) { throw new Exception("No response was received."); } receiver.Accept(response); receiver.Close(); sender.Close(); connection.Close(); string[] partitions = (string[])((Map)response.Body)["partition_ids"]; return partitions; }
// this function is used to receive the feed back for the message sent private void ReceiveFeedback(ReceivedFeedBackData callback,string filter) { string audience = Fx.Format("{0}/messages/servicebound/feedback", HOST); string resourceUri = Fx.Format("{0}/messages/servicebound/feedback", HOST); string sasToken = GetSharedAccessSignature(SHARED_ACCESS_KEY_NAME, SHARED_ACCESS_KEY, resourceUri, new TimeSpan(1, 0, 0)); bool cbs = PutCbsToken(connection, HOST, sasToken, audience); if (cbs) { string entity = "/messages/servicebound/feedback"; // Form the filter for receiving message based on the time stamp Map filters = new Map(); if (filter != null) { filters.Add(new Amqp.Types.Symbol("apache.org:selector-filter:string"), new DescribedValue(new Amqp.Types.Symbol("apache.org:selector-filter:string"), filter)); } ReceiverLink receiveLink = new ReceiverLink(session, "receive-link", new Source() { Address = entity, FilterSet = filters }, null); Message received = receiveLink.Receive(); if (received != null) { receiveLink.Accept(received); Data data = (Data)received.BodySection; callback(Encoding.UTF8.GetString(data.Binary)); Debug.WriteLine(Encoding.UTF8.GetString(data.Binary)); } receiveLink.Close(); } }
public void TestMethod_ReceiveWithFilter() { string testName = "ReceiveWithFilter"; Connection connection = new Connection(testTarget.Address); Session session = new Session(connection); Message message = new Message("I can match a filter"); message.Properties = new Properties() { GroupId = "abcdefg" }; message.ApplicationProperties = new ApplicationProperties(); message.ApplicationProperties["sn"] = 100; SenderLink sender = new SenderLink(session, "sender-" + testName, testTarget.Path); sender.Send(message, null, null); // update the filter descriptor and expression according to the broker Map filters = new Map(); // JMS selector filter: code = 0x0000468C00000004L, symbol="apache.org:selector-filter:string" filters.Add(new Symbol("f1"), new DescribedValue(new Symbol("apache.org:selector-filter:string"), "sn = 100")); ReceiverLink receiver = new ReceiverLink(session, "receiver-" + testName, new Source() { Address = testTarget.Path, FilterSet = filters }, null); Message message2 = receiver.Receive(); receiver.Accept(message2); sender.Close(); receiver.Close(); session.Close(); connection.Close(); }
public void TestMethod_SendAck() { string testName = "SendAck"; const int nMsgs = 20; Connection connection = new Connection(testTarget.Address); Session session = new Session(connection); SenderLink sender = new SenderLink(session, "sender-" + testName, testTarget.Path); ManualResetEvent done = new ManualResetEvent(false); OutcomeCallback callback = (m, o, s) => { Trace.WriteLine(TraceLevel.Verbose, "send complete: sn {0} outcome {1}", m.ApplicationProperties["sn"], o.Descriptor.Name); if ((int)m.ApplicationProperties["sn"] == (nMsgs - 1)) { done.Set(); } }; for (int i = 0; i < nMsgs; ++i) { Message message = new Message(); message.Properties = new Properties() { MessageId = "msg" + i, GroupId = testName }; message.ApplicationProperties = new ApplicationProperties(); message.ApplicationProperties["sn"] = i; sender.Send(message, callback, null); } done.WaitOne(10000); ReceiverLink receiver = new ReceiverLink(session, "receiver-" + testName, testTarget.Path); for (int i = 0; i < nMsgs; ++i) { Message message = receiver.Receive(); Trace.WriteLine(TraceLevel.Verbose, "receive: {0}", message.ApplicationProperties["sn"]); receiver.Accept(message); } sender.Close(); receiver.Close(); session.Close(); connection.Close(); }
public void TestMethod_ReceiveWaiter() { string testName = "ReceiveWaiter"; Connection connection = new Connection(testTarget.Address); Session session = new Session(connection); ReceiverLink receiver = new ReceiverLink(session, "receiver-" + testName, testTarget.Path); ManualResetEvent gotMessage = new ManualResetEvent(false); Fx.StartThread(() => { Message message = receiver.Receive(); if (message != null) { Trace.WriteLine(TraceLevel.Verbose, "receive: {0}", message.Properties.MessageId); receiver.Accept(message); gotMessage.Set(); } }); SenderLink sender = new SenderLink(session, "sender-" + testName, testTarget.Path); Message msg = new Message() { Properties = new Properties() { MessageId = "123456" } }; sender.Send(msg, null, null); Assert.IsTrue(gotMessage.WaitOne(5000), "No message was received"); sender.Close(); receiver.Close(); session.Close(); connection.Close(); }
public void TestMethod_CloseBusyReceiver() { string testName = "CloseBusyReceiver"; const int nMsgs = 20; Connection connection = new Connection(testTarget.Address); Session session = new Session(connection); SenderLink sender = new SenderLink(session, "sender-" + testName, testTarget.Path); for (int i = 0; i < nMsgs; ++i) { Message message = new Message(); message.Properties = new Properties() { MessageId = "msg" + i }; message.ApplicationProperties = new ApplicationProperties(); message.ApplicationProperties["sn"] = i; sender.Send(message, null, null); } ReceiverLink receiver = new ReceiverLink(session, "receiver-" + testName, testTarget.Path); ManualResetEvent closed = new ManualResetEvent(false); receiver.Closed += (o, e) => closed.Set(); receiver.Start( nMsgs, (r, m) => { if (m.Properties.MessageId == "msg0") r.Close(0); }); Assert.IsTrue(closed.WaitOne(10000)); ReceiverLink receiver2 = new ReceiverLink(session, "receiver2-" + testName, testTarget.Path); for (int i = 0; i < nMsgs; ++i) { Message message = receiver2.Receive(); Trace.WriteLine(TraceLevel.Verbose, "receive: {0}", message.Properties.MessageId); receiver2.Accept(message); } receiver2.Close(); sender.Close(); session.Close(); connection.Close(); }
public void TestMethod_ReleaseMessage() { string testName = "ReleaseMessage"; const int nMsgs = 20; Connection connection = new Connection(testTarget.Address); Session session = new Session(connection); SenderLink sender = new SenderLink(session, "sender-" + testName, testTarget.Path); for (int i = 0; i < nMsgs; ++i) { Message message = new Message(); message.Properties = new Properties() { MessageId = "msg" + i }; message.ApplicationProperties = new ApplicationProperties(); message.ApplicationProperties["sn"] = i; sender.Send(message, null, null); } ReceiverLink receiver = new ReceiverLink(session, "receiver-" + testName, testTarget.Path); for (int i = 0; i < nMsgs; ++i) { Message message = receiver.Receive(); Trace.WriteLine(TraceLevel.Verbose, "receive: {0}", message.Properties.MessageId); if (i % 2 == 0) { receiver.Accept(message); } else { receiver.Release(message); } } receiver.Close(); ReceiverLink receiver2 = new ReceiverLink(session, "receiver2-" + testName, testTarget.Path); for (int i = 0; i < nMsgs / 2; ++i) { Message message = receiver2.Receive(); Trace.WriteLine(TraceLevel.Verbose, "receive: {0}", message.Properties.MessageId); receiver2.Accept(message); } receiver2.Close(); sender.Close(); session.Close(); connection.Close(); }
// This functionis used to query the Management data private Message QueryManagementData() { Address address = new Address(sbNamespace, PORT, keyName, keyValue); Connection connection = new Connection(address); Trace.WriteLine(Amqp.TraceLevel.Information, "Creating a session..."); Session session = new Session(connection); // create a pair of links for request/response Trace.WriteLine(Amqp.TraceLevel.Information, "Creating a request and a response link..."); string clientNode = "client-temp-node"; SenderLink sender = new SenderLink(session, "mgmt-sender", "$management"); ReceiverLink receiver = new ReceiverLink( session, "mgmt-receiver", new Attach() { Source = new Source() { Address = "$management" }, Target = new Target() { Address = clientNode } }, null); Message request = new Message(); request.Properties = new Properties() { MessageId = "request1", ReplyTo = clientNode }; request.ApplicationProperties = new ApplicationProperties(); request.ApplicationProperties["operation"] = "READ"; request.ApplicationProperties["name"] = entity; request.ApplicationProperties["type"] = "com.microsoft:eventhub"; sender.Send(request, null, null); Message response = receiver.Receive(); if (response == null) { throw new Exception("No response was received."); } receiver.Accept(response); receiver.Close(); sender.Close(); connection.Close(); return response; }
private static void ReceiveCommands() { string entity = Fx.Format("/devices/{0}/messages/deviceBound", DEVICE_ID); ReceiverLink receiveLink = new ReceiverLink(session, "receive-link", entity); Message received = receiveLink.Receive(); if (received != null) receiveLink.Accept(received); receiveLink.Close(); }
public void TestMethod_AdvancedLinkFlowControl() { string testName = "AdvancedLinkFlowControl"; int nMsgs = 20; Connection connection = new Connection(testTarget.Address); Session session = new Session(connection); SenderLink sender = new SenderLink(session, "sender-" + testName, testTarget.Path); for (int i = 0; i < nMsgs; ++i) { Message message = new Message(); message.Properties = new Properties() { MessageId = "msg" + i }; sender.Send(message, null, null); } ReceiverLink receiver = new ReceiverLink(session, "receiver-" + testName, testTarget.Path); receiver.SetCredit(2, false); Message m1 = receiver.Receive(); Message m2 = receiver.Receive(); Assert.AreEqual("msg0", m1.Properties.MessageId); Assert.AreEqual("msg1", m2.Properties.MessageId); receiver.Accept(m1); receiver.Accept(m2); ReceiverLink receiver2 = new ReceiverLink(session, "receiver2-" + testName, testTarget.Path); receiver2.SetCredit(2, false); Message m3 = receiver2.Receive(); Message m4 = receiver2.Receive(); Assert.AreEqual("msg2", m3.Properties.MessageId); Assert.AreEqual("msg3", m4.Properties.MessageId); receiver2.Accept(m3); receiver2.Accept(m4); receiver.SetCredit(4); for (int i = 4; i < nMsgs; i++) { Message m = receiver.Receive(); Assert.AreEqual("msg" + i, m.Properties.MessageId); receiver.Accept(m); } sender.Close(); receiver.Close(); receiver2.Close(); session.Close(); connection.Close(); }
public void TestMethod_ConnectionFrameSize() { string testName = "ConnectionFrameSize"; const int nMsgs = 200; int frameSize = 4 * 1024; Connection connection = new Connection(testTarget.Address, null, new Open() { ContainerId = "c1", MaxFrameSize = (uint)frameSize }, null); Session session = new Session(connection); SenderLink sender = new SenderLink(session, "sender-" + testName, testTarget.Path); for (int i = 0; i < nMsgs; ++i) { Message message = new Message(new string('A', frameSize + (i - nMsgs / 2))); sender.Send(message, null, null); } ReceiverLink receiver = new ReceiverLink(session, "receiver-" + testName, testTarget.Path); for (int i = 0; i < nMsgs; ++i) { Message message = receiver.Receive(); string value = (string)message.Body; Trace.WriteLine(TraceLevel.Verbose, "receive: {0}x{1}", value[0], value.Length); receiver.Accept(message); } sender.Close(); receiver.Close(); session.Close(); connection.Close(); }
public void TestMethod_DynamicReceiverLink() { string testName = "DynamicReceiverLink"; Connection connection = new Connection(testTarget.Address); Session session = new Session(connection); string remoteSource = null; ManualResetEvent attached = new ManualResetEvent(false); OnAttached onAttached = (link, attach) => { remoteSource = ((Source)attach.Source).Address; attached.Set(); }; ReceiverLink receiver = new ReceiverLink(session, "receiver-" + testName, new Source() { Dynamic = true }, onAttached); attached.WaitOne(10000); Assert.IsTrue(remoteSource != null, "dynamic source not attached"); SenderLink sender = new SenderLink(session, "sender-" + testName, remoteSource); Message message = new Message("hello"); sender.Send(message, 60000); message = receiver.Receive(); Assert.IsTrue(message != null, "no message was received."); receiver.Accept(message); sender.Close(); receiver.Close(); session.Close(); connection.Close(); }
Tuple<string, DateTime> ReceiveMessages(string scenario, int count, string filter, string partition) { Address address = new Address(sbNamespace, 5671, ReckeyName, ReckeyValue); Connection connection = new Connection(address); Session session = new Session(connection); string partitionAddress = entity + "/ConsumerGroups/$default/Partitions/" + partition; ; Map filters = new Map(); if (filter != null) { filters.Add(new Amqp.Types.Symbol("apache.org:selector-filter:string"), new DescribedValue(new Amqp.Types.Symbol("apache.org:selector-filter:string"), filter)); } string lastOffset = "-1"; long lastSeqNumber = -1; DateTime lastEnqueueTime = DateTime.MinValue; ReceiverLink receiver = new ReceiverLink( session, "receiver-" + partition, new Source() { Address = partitionAddress, FilterSet = filters }, null); int i; for (i = 0; i < count; i++) { Message message = receiver.Receive(30000); if (message == null) { break; } receiver.Accept(message); lastOffset = (string)message.MessageAnnotations[new Amqp.Types.Symbol("x-opt-offset")]; lastSeqNumber = (long)message.MessageAnnotations[new Amqp.Types.Symbol("x-opt-sequence-number")]; lastEnqueueTime = (DateTime)message.MessageAnnotations[new Amqp.Types.Symbol("x-opt-enqueued-time")]; } receiver.Close(); session.Close(); connection.Close(); return Tuple.Create(lastOffset, lastEnqueueTime); }
static void RunRequestClient(string address) { Connection connection = new Connection(new Address(address)); Session session = new Session(connection); string replyTo = "client-reply-to"; Attach recvAttach = new Attach() { Source = new Source() { Address = "request_processor" }, Target = new Target() { Address = replyTo } }; ReceiverLink receiver = new ReceiverLink(session, "request-client-receiver", recvAttach, null); SenderLink sender = new SenderLink(session, "request-client-sender", "request_processor"); Message request = new Message("hello"); request.Properties = new Properties() { MessageId = "request1", ReplyTo = replyTo }; sender.Send(request, null, null); Console.WriteLine("Sent request {0} body {1}", request.Properties, request.Body); Message response = receiver.Receive(); Console.WriteLine("Received response: {0} body {1}", response.Properties, response.Body); receiver.Accept(response); receiver.Close(); sender.Close(); session.Close(); connection.Close(); }
public void TestMethod_SynchronousSend() { string testName = "SynchronousSend"; Connection connection = new Connection(testTarget.Address); Session session = new Session(connection); SenderLink sender = new SenderLink(session, "sender-" + testName, testTarget.Path); Message message = new Message("hello"); sender.Send(message, 60000); ReceiverLink receiver = new ReceiverLink(session, "receiver-" + testName, testTarget.Path); message = receiver.Receive(); Assert.IsTrue(message != null, "no message was received."); receiver.Accept(message); sender.Close(); receiver.Close(); session.Close(); connection.Close(); }
public void TestMethod_OnMessage() { string testName = "OnMessage"; const int nMsgs = 200; Connection connection = new Connection(testTarget.Address); Session session = new Session(connection); ReceiverLink receiver = new ReceiverLink(session, "receiver-" + testName, testTarget.Path); ManualResetEvent done = new ManualResetEvent(false); int received = 0; receiver.Start(10, (link, m) => { Trace.WriteLine(TraceLevel.Verbose, "receive: {0}", m.ApplicationProperties["sn"]); link.Accept(m); received++; if (received == nMsgs) { done.Set(); } }); SenderLink sender = new SenderLink(session, "sender-" + testName, testTarget.Path); for (int i = 0; i < nMsgs; ++i) { Message message = new Message() { BodySection = new Data() { Binary = Encoding.UTF8.GetBytes("msg" + i) } }; message.Properties = new Properties() { MessageId = "msg" + i, GroupId = testName }; message.ApplicationProperties = new ApplicationProperties(); message.ApplicationProperties["sn"] = i; sender.Send(message, null, null); } int last = -1; while (!done.WaitOne(10000) && received > last) { last = received; } sender.Close(); receiver.Close(); session.Close(); connection.Close(); Assert.AreEqual(nMsgs, received, "not all messages are received."); }
public void TestMethod_DynamicSenderLink() { string testName = "DynamicSenderLink"; Connection connection = new Connection(testTarget.Address); Session session = new Session(connection); string targetAddress = null; OnAttached onAttached = (link, attach) => { targetAddress = ((Target)attach.Target).Address; }; SenderLink sender = new SenderLink(session, "sender-" + testName, new Target() { Dynamic = true }, onAttached); Message message = new Message("hello"); sender.Send(message, 60000); Assert.IsTrue(targetAddress != null, "dynamic target not attached"); ReceiverLink receiver = new ReceiverLink(session, "receiver-" + testName, targetAddress); message = receiver.Receive(); Assert.IsTrue(message != null, "no message was received."); receiver.Accept(message); sender.Close(); receiver.Close(); session.Close(); connection.Close(); }
private static bool PutCbsToken(Connection connection, string host, string shareAccessSignature, string audience) { bool result = true; Session session = new Session(connection); string cbsReplyToAddress = "cbs-reply-to"; var cbsSender = new SenderLink(session, "cbs-sender", "$cbs"); var cbsReceiver = new ReceiverLink(session, cbsReplyToAddress, "$cbs"); // construct the put-token message var request = new Message(shareAccessSignature); request.Properties = new Properties(); request.Properties.MessageId = Guid.NewGuid().ToString(); request.Properties.ReplyTo = cbsReplyToAddress; request.ApplicationProperties = new ApplicationProperties(); request.ApplicationProperties["operation"] = "put-token"; request.ApplicationProperties["type"] = "azure-devices.net:sastoken"; request.ApplicationProperties["name"] = audience; cbsSender.Send(request); // receive the response var response = cbsReceiver.Receive(); if (response == null || response.Properties == null || response.ApplicationProperties == null) { result = false; } else { int statusCode = (int)response.ApplicationProperties["status-code"]; string statusCodeDescription = (string)response.ApplicationProperties["status-description"]; if (statusCode != (int)202 && statusCode != (int)200) // !Accepted && !OK { result = false; } } // the sender/receiver may be kept open for refreshing tokens cbsSender.Close(); cbsReceiver.Close(); session.Close(); return result; }
public void TestMethod_RequestResponse() { string testName = "RequestResponse"; Connection connection = new Connection(testTarget.Address); Session session = new Session(connection); // server app: the request handler ReceiverLink requestLink = new ReceiverLink(session, "srv.requester-" + testName, testTarget.Path); requestLink.Start(10, (l, m) => { l.Accept(m); // got a request, send back a reply SenderLink sender = new SenderLink(session, "srv.replier-" + testName, m.Properties.ReplyTo); Message reply = new Message("received"); reply.Properties = new Properties() { CorrelationId = m.Properties.MessageId }; sender.Send(reply, (a, b, c) => ((Link)c).Close(0), sender); }); // client: setup a temp queue and waits for responses OnAttached onAttached = (l, at) => { // client: sends a request to the request queue, specifies the temp queue as the reply queue SenderLink sender = new SenderLink(session, "cli.requester-" + testName, testTarget.Path); Message request = new Message("hello"); request.Properties = new Properties() { MessageId = "request1", ReplyTo = ((Source)at.Source).Address }; sender.Send(request, (a, b, c) => ((Link)c).Close(0), sender); }; ReceiverLink responseLink = new ReceiverLink(session, "cli.responder-" + testName, new Source() { Dynamic = true }, onAttached); Message response = responseLink.Receive(); Assert.IsTrue(response != null, "no response was received"); responseLink.Accept(response); requestLink.Close(); responseLink.Close(); session.Close(); connection.Close(); }
public void TestMethod_ConnectionWithIPAddress() { string testName = "ConnectionWithIPAddress"; const int nMsgs = 20; Address address = new Address("127.0.0.1", 5672, "guest", "guest", "/", "amqp"); Connection connection = new Connection(address); Session session = new Session(connection); SenderLink sender = new SenderLink(session, "sender-" + testName, "q1"); for (int i = 0; i < nMsgs; ++i) { Message message = new Message("msg" + i); message.Properties = new Properties() { GroupId = "abcdefg" }; message.ApplicationProperties = new ApplicationProperties(); message.ApplicationProperties["sn"] = i; sender.Send(message, null, null); } ReceiverLink receiver = new ReceiverLink(session, "receiver-" + testName, "q1"); for (int i = 0; i < nMsgs; ++i) { Message message = receiver.Receive(); Trace.WriteLine(TraceLevel.Verbose, "receive: {0}", message.ApplicationProperties["sn"]); receiver.Accept(message); } sender.Close(); receiver.Close(); session.Close(); connection.Close(); }
public void TestMethod_LinkCreateClose() { Connection connection = new Connection(testTarget.Address); Session session = new Session(connection); SenderLink sender = new SenderLink(session, "sender", testTarget.Path); ReceiverLink receiver = new ReceiverLink(session, "receiver", testTarget.Path); sender.Close(0); receiver.Close(0); session.Close(0); connection.Close(); Assert.IsTrue(connection.Error == null, "connection has error!"); }
public void TestMethod_ReceiveWaiter() { string testName = "ReceiveWaiter"; Connection connection = new Connection(address); Session session = new Session(connection); ReceiverLink receiver = new ReceiverLink(session, "receiver-" + testName, "q1"); #if NETFX || NETFX_CORE Task t = Task.Run(() => { Message message = receiver.Receive(); Trace.WriteLine(TraceLevel.Verbose, "receive: {0}", message.Properties.MessageId); receiver.Accept(message); }); #else Thread t = new Thread(() => { Message message = receiver.Receive(); Trace.WriteLine(TraceLevel.Verbose, "receive: {0}", message.Properties.MessageId); receiver.Accept(message); }); t.Start(); #endif SenderLink sender = new SenderLink(session, "sender-" + testName, "q1"); Message msg = new Message() { Properties = new Properties() { MessageId = "123456" } }; sender.Send(msg, null, null); #if NETFX || NETFX_CORE t.Wait(10000); #else t.Join(10000); #endif sender.Close(); receiver.Close(); session.Close(); connection.Close(); }
public void ContainerHostRequestProcessorTest() { string name = MethodInfo.GetCurrentMethod().Name; var processor = new TestRequestProcessor(); this.host.RegisterRequestProcessor(name, processor); int count = 500; var connection = new Connection(Address); var session = new Session(connection); string replyTo = "client-reply-to"; Attach recvAttach = new Attach() { Source = new Source() { Address = name }, Target = new Target() { Address = replyTo } }; var doneEvent = new ManualResetEvent(false); List<string> responses = new List<string>(); ReceiverLink receiver = new ReceiverLink(session, "request-client-receiver", recvAttach, null); receiver.Start( 20, (link, message) => { responses.Add(message.GetBody<string>()); link.Accept(message); if (responses.Count == count) { doneEvent.Set(); } }); SenderLink sender = new SenderLink(session, "request-client-sender", name); for (int i = 0; i < count; i++) { Message request = new Message("Hello"); request.Properties = new Properties() { MessageId = "request" + i, ReplyTo = replyTo }; sender.Send(request, SendTimeout); } Assert.IsTrue(doneEvent.WaitOne(10000), "Not completed in time"); receiver.Close(); sender.Close(); session.Close(); connection.Close(); Assert.AreEqual(count, processor.TotalCount); Assert.AreEqual(count, responses.Count); for (int i = 1; i <= count; i++) { Assert.AreEqual("OK" + i, responses[i - 1]); } }
public void TestMethod_ConnectionWithIPAddress() { string testName = "ConnectionWithIPAddress"; const int nMsgs = 20; // If the test target is 'localhost' then verify that '127.0.0.1' also works. if (testTarget.Address.Host != "localhost") { Trace.WriteLine(TraceLevel.Verbose, "Test {0} skipped. Test target '{1}' is not 'localhost'.", testName, testTarget.Address.Host); return; } Address address2 = new Address("127.0.0.1", testTarget.Address.Port, testTarget.Address.User, testTarget.Address.Password, testTarget.Address.Path, testTarget.Address.Scheme); Connection connection = new Connection(address2); Session session = new Session(connection); SenderLink sender = new SenderLink(session, "sender-" + testName, testTarget.Path); for (int i = 0; i < nMsgs; ++i) { Message message = new Message("msg" + i); message.Properties = new Properties() { GroupId = "abcdefg" }; message.ApplicationProperties = new ApplicationProperties(); message.ApplicationProperties["sn"] = i; sender.Send(message, null, null); } ReceiverLink receiver = new ReceiverLink(session, "receiver-" + testName, testTarget.Path); for (int i = 0; i < nMsgs; ++i) { Message message = receiver.Receive(); Trace.WriteLine(TraceLevel.Verbose, "receive: {0}", message.ApplicationProperties["sn"]); receiver.Accept(message); } sender.Close(); receiver.Close(); session.Close(); connection.Close(); }