amqplite可以充当WindowsAzure.ServiceBus客户端的服务器吗?

时间:2016-12-16 10:32:46

标签: c# testing amqp azureservicebus

我想对使用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

  • 运行测试客户端时,会发生以下情况:

    • 客户端抛出异常:您尝试为不支持.Net Framing的服务创建通道。
    • 我在AMQPlite主机端看不到任何活动,即没有“LinkProcessor.Attach!”控制台上的消息。

问题:

  • 我想要完成的是什么?即有没有办法配置AMQPlite主机,以便它可以接受来自WindowsAzure.ServiceBus客户端的连接?

0 个答案:

没有答案