使用MassTransit和Rabbitmq实现微服务之间的通信

6qfn3psc  于 2023-05-17  发布在  RabbitMQ
关注(0)|答案(1)|浏览(254)

在.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在微服务之间发送消息,对于共享解决方案,它可以工作,但对于不同的解决方案,它不起作用。

相关问题