Микросервис не получает сообщение RabbitMq - PullRequest
0 голосов
/ 10 июня 2019

Когда я добавляю нового пользователя в мой IdentiyServerService, вызывается следующий код MassTransit:

        var newUserCreated = new UserCreated
        {
            UserId = userId.ToString(),
            Name = user.Name
        };
        await _bus.Publish(newUserCreated);

Мое предназначение состоит в том, чтобы мои ProfileService получили это событие на RabbitMq.

Моя RabbitMq конфигурация в моей Startup.cs (IdentiyServerService)

private static void ConfigureBus(ContainerBuilder builder)
    {
        builder.Register(context =>
        {
            return Bus.Factory.CreateUsingRabbitMq(config =>
            {
                var host = config.Host(new Uri("rabbitmq://localhost"), h =>
                {
                    h.Username("guest");
                    h.Password("guest");
                });
            });
        }).As<IBus, IBusControl, IPublishEndpoint>().SingleInstance();
    }

Я запускаю автобус вот так

//Startup.cs IdentityServerService
var container = containerBuilder.Build();
var busControl = container.Resolve<IBusControl>();
busControl.Start();

Конфигурация в моем ProfileService выглядит почти одинаково. Разница в том, что я добавляю потребителя в свой Startup.cs (ProfileService)

                config.ReceiveEndpoint(host, "user_queue", ep =>
                {
                    ep.Consumer<UserCreatedConsumer>(); // The consumer is registered explicitly this time.
                });

Я также добавляю IConsumer

public class UserCreatedConsumer : IConsumer<UserCreated>
{
    public Task Consume(ConsumeContext<UserCreated> context)
    {
        var user = context.Message;
        Debug.WriteLine("My debug string here");
        return TaskUtil.Completed;
    }
}

Когда я создаю нового пользователя, сообщения получают RabbitMq (скорость публикации увеличивается). Но тогда ничего не происходит. Общее количество сообщений в Queued messages не изменяется.

У меня два соединения (я ожидал IdentityServerService и ProfileService), и у меня разные очереди (я ожидал только одно: user_queue)

enter image description here

Когда я внедряю IConsumer внутри моего IdentityServerService, я получаю сообщение.

У меня нет журнала ошибок, предупреждений или чего-то еще.

В любом случае ... 1) Почему ProfileService не получает сообщение? 2) А почему у меня так много очередей?

Если вам нужна дополнительная информация ... пожалуйста, скажите

Редактировать

Когда я отправляю сообщение в rabbitMq-management, мой ProfileService получает сообщение, но теперь я получаю следующую ошибку

MassTransit.Messages Error: 0 : R-FAULT 
rabbitmq://localhost/user_queue_new  Value cannot be null.
Parameter name: source, 
System.Runtime.Serialization.SerializationException: An exception occurred while deserializing the message envelope ---> System.ArgumentNullException: Value cannot be null.
Parameter name: source
...