本文整理汇总了C#中Amqp.ReceiverLink.Start方法的典型用法代码示例。如果您正苦于以下问题:C# ReceiverLink.Start方法的具体用法?C# ReceiverLink.Start怎么用?C# ReceiverLink.Start使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Amqp.ReceiverLink
的用法示例。
在下文中一共展示了ReceiverLink.Start方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ContainerHostRequestProcessorTest
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]);
}
}
示例2: TestMethod_CloseBusyReceiver
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();
}
示例3: TestMethod_RequestResponse
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();
}
示例4: TestMethod_OnMessage
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.");
}
示例5: LargeMessageOnMessageCallback
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();
}
示例6: Listen
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");
}
}
示例7: RunOnce
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();
}
示例8: RunOnce
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();
}