RabbitMQ-MassTransit ReceiveEndPoint не может прослушивать очередь в основных веб-API .net - PullRequest
0 голосов
/ 15 января 2019

Я использую RabbitMQ MassTransit для реализации служебной шины в своем базовом решении .Net. Я создал очередь с именем log.service. После многих усилий я наконец-то смог отправить сообщения в очередь и увидеть их в инструменте управления, но когда я слушаю ту же очередь в другом проекте микросервиса, я не могу этого сделать. Я отправил сообщения в шину из службы аутентификации и хочу записать событие в службу регистрации. Пожалуйста помоги! Вот моя аутентификация - StartUp.cs

var buildr = new ContainerBuilder();
        buildr.RegisterType<LoggingCommandConsumer>();
        buildr.Register(c =>
            {
                return Bus.Factory.CreateUsingRabbitMq(sbc =>
                 {
                     var host = sbc.Host(new Uri("rabbitmq://localhost/"), h =>
                      {
                          h.Username("guest");
                          h.Password("guest");
                      });

                     sbc.ExchangeType = ExchangeType.Direct;
                     sbc.ReceiveEndpoint(host, "log.service", e =>
                                   {

                                       e.Consumer<LoggingCommandConsumer>();

                                   });
                 });

            })
            .As<IBusControl>()
            .As<IBus>()
            .As<IPublishEndpoint>()
            .SingleInstance();

        buildr.Populate(services);
        ApplicationContainer = buildr.Build();

        return new AutofacServiceProvider(ApplicationContainer);

Вот мой logging-StartUp.cs:

 var buildr = new ContainerBuilder();
        buildr.RegisterType<LoggingCommandConsumer>();
        buildr.Register(context =>
            {
                var busControl = Bus.Factory.CreateUsingRabbitMq(cfg =>
                 {
                     var host = cfg.Host(new Uri("rabbitmq://localhost/"), h =>
                       {
                           h.Username("guest");
                           h.Password("guest");
                       });

                     cfg.ReceiveEndpoint(host, "log.service", e =>
                                             {


                                                 e.Consumer<LoggingCommandConsumer>();

                                             });

                 });
                return busControl;
            })
           .SingleInstance()
            .As<IBusControl>()
            .As<IBus>();

        buildr.Populate(services);
        ApplicationContainer = buildr.Build();

        return new AutofacServiceProvider(ApplicationContainer);

Здесь я запускаю шину в обоих StartUp.CS

 var bus = ApplicationContainer.Resolve<IBusControl>();
        var busHandle = TaskUtil.Await(() => bus.StartAsync());
        lifetime.ApplicationStopping.Register(() => busHandle.Stop());

Здесь я отправляю сообщение в конечные точки с контроллера аутентификации:

    var sendToUri = new 
  Uri("rabbitmq://localhost/log.servicebind=true&queue=log.service");
        var endPoint = await _bus.GetSendEndpoint(sendToUri);

        await endPoint.Send<ILoggingCommand>(new
        {
            XCorrelationId = "asd",
            M4SId = "M4SId",
            Host = "asdasd",
            Level = "Level",
            Time = "2019-01-02T07:06:43.722Z",
            Message = "Message",
            Other = "Other"
        });

        return Ok();

Когда я пытаюсь получить вышеуказанное сообщение в шине log.service в инструменте управления rabbitMQ, я могу это сделать ... но не могу прослушать его в logging-startup.cs

1 Ответ

0 голосов
/ 15 января 2019

У вашей конечной точки есть очередь, определенная "log.service" + Guid.NewGuid().ToString(), но вы отправляете сообщения в очередь log.service.

Я не вижу смысла добавлять guid к адресу конечной точки, чего вы пытаетесь достичь?

если вы определите свою конечную точку как cfg.ReceiveEndpoint(host, "log.service", ep => <configuration>, она должна работать. Вы должны раскомментировать своего потребителя.

...