【问题标题】:Consumer not consuming message Service Bus Queue消费者不消费消息服务总线队列
【发布时间】:2021-11-14 17:11:09
【问题描述】:

我最近在 ASP.NET Core 5.0 中尝试服务总线队列,我在其中创建了生产者 webapi 和消费者 web API 并使用了 masstransite。但由于某种原因,我无法使用该消息。

消息生产者代码控制器:

        [HttpGet]
        [Route("sender")]
        public async Task SendUsingAzureServiceBusQeue()
        {
            try
            {
                var sendEndpoint =
                await _serviceEndPointProvider.GetSendEndpoint(
                    new Uri("myservicebusurl/test"));
                await sendEndpoint.Send<Test>(new Test { message = "Hi This message from sender" });
            }
            catch(Exception ex)
            {

            }
        }

生产者启动类设置:

     public void ConfigureServices(IServiceCollection services)
        {
            services.AddMassTransit(x =>
            {
                x.UsingAzureServiceBus((context, cfg) =>
                {
                    cfg.Host("Endpoint=myservicebusconnectionstring");
                });
            });

            services.AddMassTransitHostedService();

            services.AddControllers();
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo { Title = "AKS Example", Version = "v1" });
            });
        }

消费者代码启动类:

     public void ConfigureServices(IServiceCollection services)
        {
           
            services.AddMassTransit(x =>
                {
                    
                    x.UsingAzureServiceBus((context, cfg) =>
                    {
                        cfg.Host("Endpoint=myservicebusconnectionstring");
                        cfg.ReceiveEndpoint("test", endpoint =>
                        {
                            endpoint.ConfigureConsumer<MessageConsumer>(context);
                        });
                    });
                    x.AddConsumer<MessageConsumer>();
                });
            services.AddMassTransitHostedService(true);
            services.AddControllers();
        }

消费者代码消费者类:

     public class MessageConsumer : IConsumer<Test>
    {
        public Task Consume(ConsumeContext<Test> context)
        {
            Console.WriteLine($"Message processed: Message:{context.Message.message}");
            return Task.CompletedTask;
        }
    }

我可以看到消息正在被推送,但在消费者端没有收到。 我还注意到虽然我使用队列名称“test”进行发布和订阅,但正在创建一个主题。

【问题讨论】:

    标签: asp.net-core asp.net-web-api azureservicebus masstransit azure-servicebus-queues


    【解决方案1】:

    确保两个项目具有相同的消息类型,包括命名空间as pointed out in the documentation

    【讨论】:

    • 它在 x.UsingAzureServiceBus((context, cfg) 之后。我在两者之前和之后都进行了测试,但没有工作
    • 同一命名空间中的消息?检查日志?
    • 之前我的模型在两个不同的命名空间中。我对其进行了修改,创建了一个在生产者和消费者之间共享的通用模型项目并开始工作。感谢您的快速输入。请更新答案,我会接受的
    猜你喜欢
    • 1970-01-01
    • 2013-08-08
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 2018-03-08
    • 2022-01-04
    相关资源
    最近更新 更多