.net core MassTransit请求/响应是否需要common.dll';微服务架构中的什么?

.net core MassTransit请求/响应是否需要common.dll';微服务架构中的什么?,.net-core,rabbitmq,masstransit,.net Core,Rabbitmq,Masstransit,我将在.NETCore中实现我的应用程序,在请求/响应模式中使用RabbitMQ和MassTransit 以下是receiver的代码(它接收用户名和密码,然后将用户名和提供者密钥发送给客户端): 下面是我的客户端的代码(发送用户创建请求): var-bus=BusConfigurator.ConfigureBus((cfg,主机)=> { ReceiveEndpoint(主机,“profile.test.service”,e=> { }); }); TaskUtil.Await(()=>bus

我将在.NETCore中实现我的应用程序,在请求/响应模式中使用RabbitMQ和MassTransit

以下是receiver的代码(它接收用户名和密码,然后将用户名和提供者密钥发送给客户端):

下面是我的客户端的代码(发送用户创建请求):

var-bus=BusConfigurator.ConfigureBus((cfg,主机)=>
{
ReceiveEndpoint(主机,“profile.test.service”,e=>
{
});
});
TaskUtil.Await(()=>bus.StartAsync());
尝试
{
IRequestClient=CreateRequestClient(总线);
var userName=“userName”;
var password=“password”;
Task.Run(异步()=>
{
var response=await client.Request(new CreateUserCommand())
{
用户名=用户名,
密码=密码
});
WriteLine(“用户提供程序密钥:{0}”,response.ProviderKey);
WriteLine(“用户用户名:{0}”,response.Username);
}).Wait();
}
捕获(例外情况除外)
{
WriteLine(“异常!!!OMG!!!{0}”,ex);
}
最后
{
公共汽车站();
}
}
静态IRequestClient CreateRequestClient(IBusControl总线控制)
{
var serviceAddress=新Uri(RabbitMqConstants.RabbitMqUri+RabbitMqConstants.OAuth2ServiceQueue);
var客户端=
CreateRequestClient(服务地址,TimeSpan.FromSeconds(60),TimeSpan.FromSeconds(60));
返回客户;
}
关键是双方(请求端和响应端)是不同的项目,没有共同的.ddl。换句话说,它们不共享IUserCreatedEvent和ICreateUserCommand接口。当运行服务器代码(应答器)时,它会创建一个名为“WebHost.My.ServiceBus.Messages:ICreateUserCommand”的交换,它是名称空间和接口名称的组合。因为我的客户端代码中没有这样的名称空间,所以当响应者发送提供者密钥和用户名时,消息会发送到一个跳过的交换,我无法得到响应

据我搜索和理解,命令和事件接口必须在两个项目(请求者和响应者)之间共享,但由于我正在基于项目API编写代码,我不希望它们共享名称空间! 如何克服大众运输中的这种限制


非常感谢

使用相同的名称空间/接口名称,只要消息定义兼容,它就可以工作。只要NS+接口名称匹配,那么它是否是相同的DLL并不重要。
//BusConfiguration.cs

public static IBusControl ConfigureBus(
        Action<IRabbitMqBusFactoryConfigurator, IRabbitMqHost> registrationAction = null)
    {
        return Bus.Factory.CreateUsingRabbitMq(cfg =>
        {
            var host = cfg.Host(new Uri(RabbitMqConstants.RabbitMqUri), hst =>
            {
                hst.Username(RabbitMqConstants.UserName);
                hst.Password(RabbitMqConstants.Password);
            });

            registrationAction?.Invoke(cfg, host);
        });
    }

public void ConfigureBus()
    {
        bus = BusConfigurator.ConfigureBus((cfg, host) =>
        {
            cfg.ReceiveEndpoint(host, RabbitMqConstants.OAuth2ServiceQueue, e =>
            {
                e.Consumer<CreateUserCommandConsumer>();
            });
        });

        TaskUtil.Await(() => bus.StartAsync());
    }


//CreateUserCommandConsumer.cs
public class CreateUserCommandConsumer : IConsumer<ICreateUserCommand>
{
    public async Task Consume(ConsumeContext<ICreateUserCommand> context)
    {
        await context.RespondAsync<IUserCreatedEvent>(new
        {
            UserName = context.Message.UserName,
            ProviderKey = "q1w2e3d3r"

        });
    }
}
 //ICreateUserCommand.cs
namespace WebHost.My.ServiceBus.Messages
{
    public interface ICreateUserCommand
    {
        string UserName { get; set; }
        string Password { get; set; }
    }
}

//IUserCreatedEvent.cs
namespace WebHost.My.ServiceBus.Messages.CreateUser
{
    public interface IUserCreatedEvent
    {
        string UserName { get; set; }
        string ProviderKey { get; set; }
    }
}
        var bus = BusConfigurator.ConfigureBus((cfg, host) =>
        {
            cfg.ReceiveEndpoint(host, "profile.test.service", e =>
            {
            });
        });

        TaskUtil.Await(() => bus.StartAsync());

        try
        {
            IRequestClient<ICreateUserCommand, IUserCreatedEvent> client = CreateRequestClient(bus);

            var userName = "username";
            var password = "password";

            Task.Run(async () =>
            {
                var response = await client.Request(new CreateUserCommand()
                {
                    UserName = userName,
                    Password = password
                });

                Console.WriteLine("User Provider key: {0}", response.ProviderKey);
                Console.WriteLine("User Username: {0}", response.UserName);
            }).Wait();
        }
        catch (Exception ex)
        {
            Console.WriteLine("Exception!!! OMG!!! {0}", ex);
        }
        finally
        {
            bus.Stop();
        }
    }
    static IRequestClient<ICreateUserCommand, IUserCreatedEvent> CreateRequestClient(IBusControl busControl)
    {
        var serviceAddress = new Uri(RabbitMqConstants.RabbitMqUri + RabbitMqConstants.OAuth2ServiceQueue);
        var client =
            busControl.CreateRequestClient<ICreateUserCommand, IUserCreatedEvent>(serviceAddress, TimeSpan.FromSeconds(60), TimeSpan.FromSeconds(60));

        return client;
    }