Nano Hash - криптовалюты, майнинг, программирование

NServiceBus, не удалось найти сагу для типа сообщения

Моя сага ниже не обрабатывает команды ValidateRegistration и ValidateRegistration. Я вижу сообщение «Не удалось найти эпопею для типа сообщения Registrations.Messages.ValidateRegistration with id…».

Моя конфигурация для поиска саги неверна? Пожалуйста помоги!

Спасибо

PS: я использую общий хост в процессе регистрации и использую профиль NServiceBus.Lite.

public class EndpointConfig : IConfigureThisEndpoint, AsA_Publisher, IWantCustomInitialization
{
    #region Implementation of IWantCustomInitialization

    public void Init()
    {
        var kernel = new StandardKernel();
        kernel.Load(new BackendModule());

        //Configure.Instance.Configurer.ConfigureProperty<RegistrationSaga>(x => x.Factory, kernel.Get<IAggregateRootFactory>());
        Configure.With().NinjectBuilder(kernel);
    }

    #endregion
}

public class RegistrationSagaData : IContainSagaData
{
    #region Implementation of ISagaEntity

    public virtual Guid Id { get; set; }
    public virtual string Originator { get; set; }
    public virtual string OriginalMessageId { get; set; }

    public virtual RegistrationID RegistrationID { get; set; }
    public virtual bool IsValidated { get; set; }
    public virtual string RegistrationType { get; set; }

    #endregion
}

public class RegistrationSaga : Saga<RegistrationSagaData>,
                                IAmStartedByMessages<StartRegistration>,
                                IHandleMessages<ValidateRegistration>,
                                IHandleMessages<CancelRegistration>
{
    public RegistrationFactory Factory { get; set; }

    public override void ConfigureHowToFindSaga()
    {
        ConfigureMapping<StartRegistration>(data => data.RegistrationID, registration => registration.ID);
        ConfigureMapping<ValidateRegistration>(data => data.RegistrationID, registration => registration.ID);
        ConfigureMapping<CancelRegistration>(data => data.RegistrationID, registration => registration.ID);
    }

    #region Implementation of IMessageHandler<StartRegistration>

    public void Handle(StartRegistration message)
    {
        Data.IsValidated = false;
        Data.RegistrationType = message.RegistrationType;

        Bus.SendLocal(new CreateRegistration
        {
            RegistrationType = message.RegistrationType,
            ID = message.ID
        });

        Console.WriteLine("======> handled StartRegistration");
    }

    #endregion

    #region Implementation of IMessageHandler<ValidateRegistration>

    public void Handle(ValidateRegistration message)
    {
        MarkAsComplete();

        Console.WriteLine("======> handled ValidateRegistration");
    }

    #endregion

    #region Implementation of IMessageHandler<CancelRegistration>

    public void Handle(CancelRegistration message)
    {
        Console.WriteLine("======> handled CancelRegistration");

        MarkAsComplete();
    }

    #endregion
}
17.04.2012

Ответы:


1

Ваш обработчик StartRegistration не добавляет RegistrationID в данные Saga. Таким образом, ваше переопределение ConfigureHowToFindSaga сопоставляется со свойством, которое не имеет значения при обработке других команд.

19.04.2012
  • Ты прав. Я понял, что пропустил это, но это все равно не сработало. Проблема заключалась в типе свойства RegistrationID. Это был тип RegistrationID. Вместо этого я использовал Guid, и это сработало. Я приму ваш ответ, хотя. Спасибо. 20.04.2012
  • Я подозреваю, что это сработало бы, если бы ваш класс RegistrationID правильно реализовал равенство. 07.01.2015

  • 2

    Только сегодня я услышал, что Ninject не обрабатывает внедрение сеттера из коробки — попробуйте переключить его на внедрение конструктора и посмотрите, сработает ли это.

    17.04.2012
  • Привет, Уди, я только что попробовал это, но я получаю InvalidOperationException: Sagas, которые реализуют IConfigurable, хотя... должен иметь конструктор по умолчанию. 18.04.2012
  • Еще раз привет, Уди, я думаю, что ваш ответ относится к моему другому вопросу здесь: stackoverflow.com/questions/10158739/ :) 19.04.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..