Безопасны ли члены обработчика NServiceBus для хранения данных, связанных с сообщением (и не связанных)?

Используются ли обработчики повторно для обработки другого сообщения?

public abstract class SomeHandler : IHandleMessages<MyEvent>
{
    public IBus Bus { get; set; }
    public String Message { get; set; }

    public void Handle(T message)
    {
        Message = "Test";
        SomeInstanceMethod();
    }

    public void SomeInstanceMethod()
    {
        if (Message = ...) // Can i use Message here?
            return;
    }
}

person Dmitry Schetnikovich    schedule 07.10.2010    source источник


Ответы (1)


По умолчанию обработчики сообщений настроены как ComponentCallModelEnum.Singlecall, что означает, что каждый вызов компонента будет выполняться в новом экземпляре.

Таким образом, два сообщения будут обрабатываться разными экземплярами класса и не могут иметь общего состояния.

Однако здесь вы устанавливаете свойство класса, а затем вызываете другой метод в классе, который извлекает это свойство. Это будет работать нормально. Однако, на мой взгляд, это немного сбивает с толку, и если это то, что вам нужно, вам, вероятно, лучше передать значения другому методу в качестве параметра.

person David Boike    schedule 07.10.2010
comment
Спасибо, Дэвид. Что касается вашей точки зрения на передачу значений в качестве параметров: предоставленный мной код - это просто помощь в моем вопросе. Я согласен, что в реальной жизни этого кода не должно быть. - person Dmitry Schetnikovich; 09.10.2010