【发布时间】:2017-03-22 23:43:01
【问题描述】:
我遇到了 MassTransit 不使用以下代码发送消息的问题 - 这是来自我们的 Azure 服务总线代码的端口,它工作正常。 GitHub 中的示例填充了 Queue - Starbucks 示例,因此我的基础架构正在运行。
谁能建议为什么这不发送消息?我已经创建了队列和交换,并尝试了没有。
控制台应用打印出预期的结果。
提前致谢。
public class Program
{
static void Main()
{
IBusControl busControl = CreateBus();
TaskUtil.Await(() => busControl.StartAsync());
List<Task> tList = new List<Task>();
for (int i = 0; i < 10; i++)
{
var t = Send(busControl);
tList.Add(t);
}
Task.WaitAll(tList.ToArray());
Console.WriteLine("done!");
}
private static async Task Send(IBusControl busControl)
{
var endpoint = await busControl.GetSendEndpoint(new Uri("rabbitmq://localhost/test"));
Console.WriteLine("Sending");
await endpoint.Send(new SomethingHappenedMessage()
{
What = "Stuff",
When = DateTime.Now
});
Console.WriteLine("Sent");
}
static IBusControl CreateBus()
{
return Bus.Factory.CreateUsingRabbitMq(x => x.Host(new Uri("rabbitmq://localhost"), h =>
{
h.Username("guest");
h.Password("guest");
}));
}
}
public interface SomethingHappened
{
string What { get; }
DateTime When { get; }
}
public class SomethingHappenedMessage : SomethingHappened
{
public string What { get; set; }
public DateTime When { get; set; }
}
【问题讨论】:
-
test交换是否绑定到test队列? -
我会在最后添加停止总线以确保所有打开的管道完成执行。
-
克里斯,绑定队列有效,谢谢 - 我是 RabbitMQ 的新手。这并不能解释为什么星巴克的样品开箱即用——不过我认为这是 MassTransit 2.0。如果你回答,我会标记它是正确的。再次感谢。
-
Starbucks 示例添加了消费者,这会创建队列绑定 - 您上面的发送者不会创建接收端点 - 所以没有消费者。
-
首先,这是给
Send,而不是Publish- 老实说,这应该是你最后的选择。在您的生产者上线之前启动您的 receiveEndpoints。没那么复杂。不要试图让它变得困难。
标签: rabbitmq masstransit