【发布时间】:2021-07-01 14:50:49
【问题描述】:
我刚开始学习Masstransit,我想问你一个查询on the accepted answer in this post。在这里,我有同样的问题,消费者没有收到消息。 可能是我犯了一些错误或误解了一些基本概念。
我做了什么:
-
在 Azure 服务总线中创建主题
-
为主题创建订阅
-
根据建议here向主题发送消息。我可以从 Azure 门户看到消息已成功添加到主题中。
-
现在我正在尝试使用以下代码来使用该消息:
private static async Task SetupMassTransit() { var services = new ServiceCollection(); services.AddMassTransit(x => { x.AddConsumer<MessageConsumer>(); //Consumer class x.UsingAzureServiceBus((context, cfg) => { cfg.Host(ServiceBusConnectionString); // https://stackoverflow.com/questions/64229653/receiver-not-picking-up-message-with-mass-transit-subscription cfg.SubscriptionEndpoint(TopicName, SubscriptionName, e => { e.PrefetchCount = 100; e.MaxConcurrentCalls = 100; e.LockDuration = TimeSpan.FromMinutes(5); e.MaxAutoRenewDuration = TimeSpan.FromMinutes(30); e.UseMessageRetry(r => r.Intervals(100, 200, 500, 800, 1000)); e.UseInMemoryOutbox(); e.ConfigureConsumer<MessageConsumer>(context); }); }); }); var provider = services.BuildServiceProvider(); IBusControl busControl = provider.GetRequiredService<IBusControl>(); busControl.Start(); } -
我希望在运行消费者项目时应该调用“Consume”函数。但事实并非如此。虽然我无法通过故障消费者阅读它,但它也会创建故障主题。
public class MessageConsumer : IConsumer<SendMessage> { public Task Consume(ConsumeContext<SendMessage> context) { Console.WriteLine($"Message processed: SequenceNumber:{context.Message.customerId} - Text:{context.Message.messages}"); return Task.CompletedTask; } }
请注意:消费者和生产者使用相同的消息对象(即在同一个命名空间内)
你能告诉我我到底在哪里犯了错误吗? 提前谢谢
【问题讨论】:
-
一件有趣的事情,我注意到如果一个新的主题和订阅名称已经被发送,SubscriptionEndpoint 函数会创建新的主题和订阅。
-
什么是主题名?当您发布消息时,它会转到同一个主题吗?默认情况下,主题是根据消息类型命名的。如果您更改它(如链接的问题中指出的那样),它是否与 TopicName 匹配?
-
TopicName 是一个 Const AND Publisher 和 Consumer 使用相同的 TopicName。
标签: azureservicebus masstransit