gpt4 book ai didi

c# - 具有 azure 服务总线的公共(public)交通 : Why Messages go to the queue_skipped?

转载 作者:行者123 更新时间:2023-12-03 00:56:23 28 4
gpt4 key购买 nike

我正在使用 Masstransit 和 Azure 服务 .net5。

我有两个应用程序:

网络 API。启动:

services.AddMassTransit(x =>
{
x.UsingAzureServiceBus((context,cfg) =>
{
cfg.Host("Endpoint");

cfg.ReceiveEndpoint("mytopic", e =>
{
e.PrefetchCount = 100;
e.MaxConcurrentCalls = 100;
});
cfg.ConfigureEndpoints(context);
});
});
services.AddMassTransitHostedService();

网络 API。事件发布 Controller :

[HttpGet]
public async Task<bool> Get()
{
await _bus.Publish(new Message()
{
Name = "Test Name",
Description = "Test Description",
Order = 1
});

return true;
}

worker 服务。程序:

services.AddMassTransit(x =>
{
x.AddConsumer<MessageConsumer>();
x.UsingAzureServiceBus((context,cfg) =>
{
cfg.Host("Endpoint");
cfg.UseServiceBusMessageScheduler();

cfg.ReceiveEndpoint("mytopic", e =>
{
e.PrefetchCount = 100;
e.MaxConcurrentCalls = 100;
e.ConfigureConsumer<MessageConsumer>(context);
});
cfg.ConfigureEndpoints(context);
});
});
services.AddMassTransitHostedService(true);

worker 服务。消费者:

public class MessageConsumer : IConsumer<Message>
{
readonly ILogger<MessageConsumer> _logger;

public MessageConsumer(ILogger<MessageConsumer> logger)
{
_logger = logger;
}

public async Task Consume(ConsumeContext<Message> context)
{
_logger.LogInformation("Received Text: {Text}", context.Message.Name);
}
}

两个应用程序都有位于同一命名空间中的事件类(代码中的消息类)。

namespace EventBusMessages
{
public class Message
{
public string Name { get; set; }

public string Description { get; set; }

public int Order { get; set; }
}
}

成功发送并处理一条消息后,下一条消息被放入队列***_skipped中。然后下一条消息再次成功处理,但又再次***_skipped。

发布控制台示例:

[05:26:19 DBG] SEND sb://test.servicebus.windows.net/EventBusMessages/Message c7710000-e64a-00ff-df61-08d92e12a05d EventBusMessages.
Message
[05:26:20 DBG] SEND sb://test.servicebus.windows.net/EventBusMessages/Message c7710000-e64a-00ff-216c-08d92e12a182 EventBusMessages.
Message
[05:26:20 DBG] SKIP sb://test.servicebus.windows.net/mytopic c7710000-e64a-00ff-216c-08d92e12a182
[05:26:21 INF] MOVE sb://test.servicebus.windows.net/mytopic c7710000-e64a-00ff-216c-08d92e12a182 mytopic_skipped dead-letter
[05:26:22 DBG] SEND sb://test.servicebus.windows.net/EventBusMessages/Message c7710000-e64a-00ff-fc4d-08d92e12a27a EventBusMessages.
Message
[05:26:23 DBG] SEND sb://test.servicebus.windows.net/EventBusMessages/Message c7710000-e64a-00ff-d1a8-08d92e12a30b EventBusMessages.
Message
[05:26:23 DBG] SKIP sb://test.servicebus.windows.net/mytopic c7710000-e64a-00ff-d1a8-08d92e12a30b
[05:26:23 INF] MOVE sb://test.servicebus.windows.net/mytopic c7710000-e64a-00ff-d1a8-08d92e12a30b mytopic_skipped dead-letter

05:26:19 和 05:26:22 已被消费者成功处理,但 05:26:20 和 05:26:23已被跳过并移至 ***_skipped 队列

消费者控制台示例:

[05:26:19 DBG] RECEIVE sb://test.servicebus.windows.net/mytopic c7710000-e64a-00ff-df61-08d92e12a05d EventBusMessages.Message EventB
usSubscriber.MessageConsumer(00:00:00.0126036)
[05:26:22 INF] Received Text: Test Name
[05:26:22 DBG] RECEIVE sb://test.servicebus.windows.net/mytopic c7710000-e64a-00ff-fc4d-08d92e12a27a EventBusMessages.Message EventB
usSubscriber.MessageConsumer(00:00:00.0042202)

同样,我每次都发送相同的消息

感谢您的回答

最佳答案

Web API 项目不应有接收端点 - 它没有配置使用者。因此,该接收端点将跳过每条消息。仅当您有消费者时才配置接收端点。

并且您只需在添加消费者后调用 ConfigureEndpoints 即可。

关于c# - 具有 azure 服务总线的公共(public)交通 : Why Messages go to the queue_skipped?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67954374/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com