servicestack 如何修复失败的ServerStack RabbitMQ扇出交换测试,而不重写整个测试,servicestack,rabbitmq,servicestack,Rabbitmq" /> servicestack 如何修复失败的ServerStack RabbitMQ扇出交换测试,而不重写整个测试,servicestack,rabbitmq,servicestack,Rabbitmq" />

servicestack 如何修复失败的ServerStack RabbitMQ扇出交换测试,而不重写整个测试

servicestack 如何修复失败的ServerStack RabbitMQ扇出交换测试,而不重写整个测试,servicestack,rabbitmq,servicestack,Rabbitmq,我正在运行RabbitMQ的所有ServiceStack测试,在我的一生中,我无法通过“发布消息到所有队列”。经过一番挖掘和阅读,我发现: 测试的名称应该改为Topic,而不是fanout(ServiceStack框架内置功能不提供它) 测试文件中不需要RegisterQueue、RegisterTopic和RegisterDlq静态方法,您应该使用RabbitMqExtensions 下面这两条语句实际上做了相同的事情,将队列绑定到一个交换(主题)并提供一个路由密钥,但路由密钥不同,因此只有一

我正在运行RabbitMQ的所有ServiceStack测试,在我的一生中,我无法通过“发布消息到所有队列”。经过一番挖掘和阅读,我发现:

  • 测试的名称应该改为Topic,而不是fanout(ServiceStack框架内置功能不提供它)
  • 测试文件中不需要RegisterQueue、RegisterTopic和RegisterDlq静态方法,您应该使用RabbitMqExtensions
  • 下面这两条语句实际上做了相同的事情,将队列绑定到一个交换(主题)并提供一个路由密钥,但路由密钥不同,因此只有一个队列获得发布到它的消息,因此测试总是失败

    RegisterTopic(channel, QueueNames<HelloRabbit>.Out);
    
    RegisterQueue(channel, QueueNames<HelloRabbit>.In, exchange: ExchangeTopic); 
    
    RegisterTopic(通道,QueueNames.Out);
    RegisterQueue(通道,QueueNames.In,exchange:ExchangeTopic);
    
  • 我希望有人能告诉我这个测试是否通过了


    谢谢你,Stephen

    这个测试重构不正确,它以前使用了一个
    扇出
    交换,如中所示

    我必须使用扇出交换,如中所示:

    [Test]
    public void Publishing_message_to_fanout_exchange_publishes_to_all_queues()
    {
        using (IConnection connection = mqFactory.CreateConnection())
        using (IModel channel = connection.CreateModel())
        {
            channel.RegisterFanoutExchange(ExchangeFanout);
    
            RegisterQueue(channel, QueueNames<HelloRabbit>.In, exchange: ExchangeFanout);
            RegisterQueue(channel, QueueNames<HelloRabbit>.Priority, exchange: ExchangeFanout);
    
            byte[] payload = new HelloRabbit { Name = "World!" }.ToJson().ToUtf8Bytes();
            var props = channel.CreateBasicProperties();
            props.SetPersistent(true);
    
            channel.BasicPublish(ExchangeFanout, QueueNames<HelloRabbit>.In, props, payload);
    
            var basicGetMsg = channel.BasicGet(QueueNames<HelloRabbit>.In, noAck: true);
            Assert.That(basicGetMsg, Is.Not.Null);
    
            basicGetMsg = channel.BasicGet(QueueNames<HelloRabbit>.Priority, noAck: true);
            Assert.That(basicGetMsg, Is.Not.Null);
        }
    }
    
    [测试]
    public void Publishing_message_to_fanout_exchange_Publishing_to_all_queue()
    {
    使用(IConnection connection=mqFactory.CreateConnection())
    使用(IModel channel=connection.CreateModel())
    {
    通道.寄存器FanoutExchange(ExchangeFanout);
    RegisterQueue(通道,QueueNames.In,exchange:ExchangeFanout);
    RegisterQueue(通道,QueueNames.Priority,exchange:ExchangeFanout);
    byte[]payload=new HelloRabbit{Name=“World!”}.ToJson().ToUtf8Bytes();
    var props=channel.CreateBasicProperties();
    props.SetPersistent(true);
    channel.BasicPublish(ExchangeFanout、QueueNames.In、道具、有效载荷);
    var basicGetMsg=channel.BasicGet(QueueNames.In,noAck:true);
    Assert.That(basicGetMsg,Is.Not.Null);
    basicGetMsg=channel.BasicGet(QueueNames.Priority,noAck:true);
    Assert.That(basicGetMsg,Is.Not.Null);
    }
    }
    
    在GitHub上打开一个问题比这篇文章更可取,但我似乎找不到问题对话框。仅供参考,ServiceStack问题位于:事后看来,我应该要求进行一个新的测试,该测试包含与此相同参数的主题交换。请将扇出交换添加到字符串数组中的这一行@StephenPatten good call,尽管这是第一次拉取的绝佳机会请求:)