servicestack 如何修复失败的ServerStack RabbitMQ扇出交换测试,而不重写整个测试
我正在运行RabbitMQ的所有ServiceStack测试,在我的一生中,我无法通过“发布消息到所有队列”。经过一番挖掘和阅读,我发现:
servicestack 如何修复失败的ServerStack RabbitMQ扇出交换测试,而不重写整个测试,
servicestack,rabbitmq,
servicestack,Rabbitmq,我正在运行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,尽管这是第一次拉取的绝佳机会请求:)