在.Net中,我有一个包含2个微服务(API)和一个共享层(共享模型)的解决方案。我想使用MassTransit和RabbitMQ将一些数据从一个微服务发送到另一个微服务。在实现代码后,逻辑工作,消息成功发布,消费者被撤销。
现在我正试图改变我的项目的架构。在这种情况下,我有3个不同的解决方案,每个解决方案都有一个API项目,我还在不同的解决方案中使用了我的共享模型,每个微服务都可以使用程序集访问它。现在我遇到的主要问题是,在这种情况下,消息发布成功,但消费者没有被撤销。NuGet软件包的版本相同。
这是我对消费者微服务的依赖注入:
public static IServiceCollection AddMessageBroker(this IServiceCollection services, ConfigurationManager configuration)
{
MessageBrokerSettings messageBrokerSettings = new();
configuration.Bind(MessageBrokerSettings.SectionName, messageBrokerSettings);
services.AddSingleton(Options.Create(messageBrokerSettings));
services.AddMassTransit(busConfigurator =>
{
busConfigurator.AddConsumer<GetCompanyIdsConsumer>();
busConfigurator.AddBus(provider => Bus.Factory.CreateUsingRabbitMq(cur =>
{
cur.Host(new Uri(messageBrokerSettings.Host), h =>
{
h.Username(messageBrokerSettings.UserName);
h.Password(messageBrokerSettings.Password);
});
cur.ReceiveEndpoint("companyQueue2", oq =>
{
oq.PrefetchCount = 20;
oq.UseMessageRetry(r => r.Interval(2, 100));
oq.ConfigureConsumer<GetCompanyIdsConsumer>(provider);
});
}));
});
services.AddTransient<IEventBus, EventBus>();
return services;
}
这是发布者微服务的依赖注入:
public static IServiceCollection AddMessageBroker(this IServiceCollection services, ConfigurationManager configuration)
{
MessageBrokerSettings messageBrokerSettings = new();
configuration.Bind(MessageBrokerSettings.SectionName, messageBrokerSettings);
services.AddSingleton(Options.Create(messageBrokerSettings));
services.AddMassTransit(busConfigurator =>
{
busConfigurator.AddBus(provider => Bus.Factory.CreateUsingRabbitMq(cur =>
{
cur.Host(new Uri(messageBrokerSettings.Host), h =>
{
h.Username(messageBrokerSettings.UserName);
h.Password(messageBrokerSettings.Password);
});
}));
services.AddMassTransitHostedService();
});
services.AddTransient<IEventBus, EventBus>();
return services;
}
消费者类别:
public class GetCompanyIdsConsumer : IConsumer<Message>
{
public async Task Consume(ConsumeContext<Message> context)
{
await Task.Run(() => { var obj = context.Message; });
}
}
发布者方法:await _eventBus.PublishAsync(message, uri, cancellationToken);
你有什么建议吗?将每个API放在不同的解决方案中是正确的方法吗?
我想使用MassTransit和Rabbit MQ在微服务之间发送消息,对于共享解决方案,它可以工作,但对于不同的解决方案,它不起作用。
1条答案
按热度按时间yzuktlbb1#
与explained very clearly in the documentation一样,消息必须具有相同的命名空间和类型名称。