public Start ( int credit, MessageCallback onMessage = null ) : void | ||
credit | int | The link credit to issue. |
onMessage | MessageCallback | If specified, the callback to invoke when messages are received. If not specified, call Receive method to get the messages. |
Результат | void |
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_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_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_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 async Task LargeMessageOnMessageCallback() { string testName = "LargeMessageOnMessageCallback"; int nMsgs = 50; Connection connection = await Connection.Factory.CreateAsync( this.testTarget.Address, new Open() { ContainerId = "c1", MaxFrameSize = 4096 }, null); Session session = new Session(connection); SenderLink sender = new SenderLink(session, "sender-" + testName, testTarget.Path); int messageSize = 10 * 1024; for (int i = 0; i < nMsgs; ++i) { Message message = new Message(new string('D', messageSize)); message.Properties = new Properties() { MessageId = "msg" + i, GroupId = testName }; message.ApplicationProperties = new ApplicationProperties(); message.ApplicationProperties["sn"] = i; sender.Send(message, null, null); } ReceiverLink receiver = new ReceiverLink(session, "receiver-" + testName, testTarget.Path); ManualResetEvent done = new ManualResetEvent(false); int count = 0; receiver.Start(30, (link, message) => { string value = message.GetBody<string>(); Trace.WriteLine(TraceLevel.Information, "receive: {0} body {1}x{2}", message.ApplicationProperties["sn"], value[0], value.Length); receiver.Accept(message); if (++count == nMsgs) done.Set(); }); Assert.IsTrue(done.WaitOne(120000)); connection.Close(); }
private void Listen() { // real applicaiton needs to implement error handling and recovery Connection connection = new Connection(new Address(this.address)); Session session = new Session(connection); SenderLink sender = new SenderLink(session, "send-link", "data"); ReceiverLink receiver = new ReceiverLink(session, "receive-link", "control"); receiver.Start(100, this.OnMessage); while (true) { this.changed.WaitOne(); Message message = new Message(); message.ApplicationProperties = new Amqp.Framing.ApplicationProperties(); message.ApplicationProperties["temperature"] = this.temperature; sender.Send(message, null, null); AmqpTrace.WriteLine(TraceLevel.Information, "sent data to monitor"); } }
void RunOnce(int id) { Connection connection = this.CreateConnection(new Address(this.Args.Address)); connection.Closed += (o, e) => this.SetComplete(); Session session = new Session(connection); Attach attach = new Attach() { Source = new Source() { Address = this.Args.Node }, Target = new Target(), SndSettleMode = this.Args.SenderMode, RcvSettleMode = this.Args.ReceiverMode }; ReceiverLink receiver = new ReceiverLink(session, "perf-test-receiver" + id, attach, null); receiver.Start( this.Args.Queue, (r, m) => { r.Accept(m); m.Dispose(); this.OnComplete(); }); this.Wait(); receiver.Close(); session.Close(); connection.Close(); }
void RunOnce(int id) { Connection connection = this.CreateConnection(new Address(this.Args.Address)); connection.Closed += (o, e) => this.SetComplete(); Session session = new Session(connection); string clientId = "request-" + Guid.NewGuid().ToString().Substring(0, 6); Attach sendAttach = new Attach() { Source = new Source(), Target = new Target() { Address = this.Args.Node }, SndSettleMode = SenderSettleMode.Settled }; Attach recvAttach = new Attach() { Source = new Source() { Address = this.Args.Node }, Target = new Target() { Address = clientId }, SndSettleMode = SenderSettleMode.Settled }; SenderLink sender = new SenderLink(session, "s-" + clientId, sendAttach, null); ReceiverLink receiver = new ReceiverLink(session, "r-" + clientId, recvAttach, null); receiver.Start( 50000, (r, m) => { r.Accept(m); m.Dispose(); if (this.OnComplete()) { this.SendRequest(sender, clientId); } }); for (int i = 1; i <= this.Args.Queue; i++) { if (this.OnStart()) { this.SendRequest(sender, clientId); } } this.Wait(); connection.Close(); }