我想对使用WindowsAzure.ServiceBus nuget package nuget包(docs)的消息传递客户端库进行黑盒测试,以发送和接收来自Microsoft ServiceBus队列的消息。
我的目标是为邮件客户端库创建集成测试,但不与实际的Microsoft Service Bus服务器通信。
查看amqplite库,我希望可以使用amqplite创建AMQP主机,并配置消息传递客户端库以与此主机通信,而不是实际的Microsoft Service Bus。
这是我的自定义AMQP主机,使用amqplite:
public class LinkProcessor : ILinkProcessor
{
public void Process(AttachContext attachContext)
{
Console.WriteLine("LinkProcessor.Attach!");
}
}
var containerHost = new ContainerHost(new Uri("amqp://localhost:9876/"));
containerHost.RegisterLinkProcessor(new LinkProcessor());
containerHost.Open();
我在containerHost上注册一个ILinkProcessor,所以我可以在控制台上看到任何连接尝试(基于我对AMQP / AMQPlite的有限理解,这是我认为ILinkProcessor的作用)。
下面的AMQP客户端可以连接,服务器进程输出“LinkProcessor.Attach!”在控制台上。
async Task Main()
{
await SendMessage("q2", "hello world");
}
async Task SendMessage(string queue, string message)
{
var connection = await Connection.Factory.CreateAsync(new Address("amqp://localhost:9876/"));
var session = new Session(connection);
var msg = new Message(message);
var sender = new SenderLink(session, "sender-link", queue);
await sender.SendAsync(msg);
await sender.CloseAsync();
await session.CloseAsync();
await connection.CloseAsync();
}
返回我要测试的消息传递客户端库:
使用连接字符串配置库,工作连接字符串如下所示(我假设连接字符串格式是由WindowsAzure.ServiceBus定义的格式):
Endpoint=sb://xxx/yyy;StsEndpoint=https://nnn:NNNN/xxx;RuntimePort=NNNN;ManagementPort=NNNN;OAuthUsername=xxx;OAuthPassword=yyy
我将配置字符串更改为以下内容:
Endpoint=amqp://localhost:9876/q2
运行测试客户端时,会发生以下情况:
问题: