.net - MassTransit 消费者不会触发
问题描述
启动.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)
。
推荐阅读
- c# - 如何将高斯高通内核显示为位图?
- linux-kernel - 在 Linux 中监视对 mtd (ubi) 的读/写
- node.js - 节点部署到 heroku 失败
- c# - 如何在 C# 中使用存储过程和数据读取器返回记录列表
- java - 我很难打印 java json 数据
- php - Laravel Mailables 将几个变量传递给 __construct() 和 Controller
- javascript - javascript-尝试添加产品数量时,添加到购物车功能不起作用
- frameworks - 在消息控制器外部以编程方式调用 LUIS
- mysql - 我应该使用网站表单还是 diy 表单程序作为 MySQL 前端?
- java - 在调用控制器之前,如何在 Spring 中将一个请求参数转换为多个请求参数?