MassTransit 消费者不会触发
MassTransit consumer wont trigger
Startup.cs
static void Main(string[] args)
{
var bus = Bus.Factory.CreateUsingAzureServiceBus(h =>
{
var host = h.Host(serverAddressURI
,
z =>
{
z.TokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider("RootManageSharedAccessKey", key);
});
h.ReceiveEndpoint(host, "orderqueue",
ep =>
{
ep.Consumer<OrderConsumer>();
});
});
bus.Start();
TaskUtil.Await(() => bus.Publish(new Order {Text = "Hi3"}));
bus.Stop();
}
订单消费者
public class OrderConsumer : IConsumer
{
public async Task Consume(ConsumeContext<Order> context)
{
await Console.Out.WriteLineAsync($"Shipping order: {context.Message.Text}");
}
}
我正在尝试使用 masstransit 设置一个简单的测试,不确定是什么问题,消息发送到我的队列,我可以在 azure 门户的 Azure 服务总线仪表板上看到它。但是消费者永远不会被触发,我也没有任何错误。有什么想法吗?
可能是因为您的应用程序在消费者有机会完成消费之前就停止了。尝试在发布后立即添加 TaskUtil.Await(() => Task.Delay(2000))
,让您的消费者有时间在应用程序退出前消费。
当然,这在实际应用中应该不是问题。
题外话,可以使用异步Main方法来避免TaskUtil.Await()
:public static async Task Main(string[] args)
.
Startup.cs
static void Main(string[] args)
{
var bus = Bus.Factory.CreateUsingAzureServiceBus(h =>
{
var host = h.Host(serverAddressURI
,
z =>
{
z.TokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider("RootManageSharedAccessKey", key);
});
h.ReceiveEndpoint(host, "orderqueue",
ep =>
{
ep.Consumer<OrderConsumer>();
});
});
bus.Start();
TaskUtil.Await(() => bus.Publish(new Order {Text = "Hi3"}));
bus.Stop();
}
订单消费者
public class OrderConsumer : IConsumer
{
public async Task Consume(ConsumeContext<Order> context)
{
await Console.Out.WriteLineAsync($"Shipping order: {context.Message.Text}");
}
}
我正在尝试使用 masstransit 设置一个简单的测试,不确定是什么问题,消息发送到我的队列,我可以在 azure 门户的 Azure 服务总线仪表板上看到它。但是消费者永远不会被触发,我也没有任何错误。有什么想法吗?
可能是因为您的应用程序在消费者有机会完成消费之前就停止了。尝试在发布后立即添加 TaskUtil.Await(() => Task.Delay(2000))
,让您的消费者有时间在应用程序退出前消费。
当然,这在实际应用中应该不是问题。
题外话,可以使用异步Main方法来避免TaskUtil.Await()
:public static async Task Main(string[] args)
.