MassTransit Отправить на существующую биржу - PullRequest
0 голосов
/ 18 октября 2019

Итак, я добавляю MassTransit в существующий проект, который раньше уже использовал клиент RMQ.

Я пытаюсь создать шину только для отправки, которая привязывается к существующему обмену. Однако, когда я пытаюсь отправить сообщение, я получаю сообщение об ошибке типа «fanout», но существующий тип - «topic», и я не уверен, как указать, должно ли оно быть «topic» или что оно не должновообще не пытайтесь создать обмен и просто использовать то, что есть.

Топология: «импорт» (обмен) -> «импорт» (очередь)

Настройка:

    Bus.Factory.CreateUsingRabbitMq(
                    cfg =>
                    {
                        cfg.UseNLog();

                        var host = cfg.Host(serverName, vhost,
                            options =>
                            {
                                options.Username(userName);
                                options.Password(password);
                            });                    
                    });

Выполнение:

    var ep = bus.GetSendEndpoint(new Uri($"rabbitmq://{userName}:{password}@{serverName}/{vhost}/{queue}")).Result;

                    ep.Send<ImportMessage>(CastMessage<ImportMessage>(message),
                        cfg =>
                        {

                            cfg.SetRoutingKey("import");
                        }).Wait();

Команда:

    public class ImportMessage 
    {
        public ImportMessage()
        {
            Parameters = new List<KeyValuePair<string, string>>();
        }

        public List<KeyValuePair<string, string>> Parameters { get; set; }
        public string Endpoint { get; set; }

        public Guid Id { get; set; }
        public string Type { get; set; }
        public DateTime Expiration { get; set; }
    }

1 Ответ

1 голос
/ 18 октября 2019

Вы можете настроить топологию публикации для контракта сообщений, используя:

Bus.Factory.CreateUsingXxx(cfg =>
{
    cfg.Publish<YourMessageType>(x => x.ExchangeType = ExchangeType.Topic);
});

Затем, когда вы публикуете ваше сообщение, он будет использовать этот тип обмена. Вы также можете изменить имя объекта, используя топологию сообщения:

cfg.Message<YourMessageType>(x => x.SetEntityName("your-exchange"));

Это будет указывать имя обмена для типа.

Существует образец , которыйпоказывает прямую поддержку обмена, обмены темами похожи на стороне клиента.

...