Когда я добавляю нового пользователя в мой 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
)
Когда я внедряю 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