Когда отладчик дошёл до этой точки, он переходит в thenAsync и после этого не возвращается к основному контроллеру (BurgerController), происходит долгая загрузка, что приводит к таймауту запроса. Я думаю, что-то не так или не возвращается из SagaCompletionNotification.
During(FinishedCooking,
When(BurgerCookerFinishedCookingEvent)
.ThenAsync(async x =>
{
//should final response back to Main controller
await x.Publish(new SagaCompletionNotification
{
CorrelationId = x.Saga.CorrelationId
});
})
.TransitionTo(Completed)
.Finalize()
);
Завершить SagaStateMachine
public class BurgerCookStateMachine : MassTransitStateMachine
{
public State Ordered { get; private set; }
public State BeginCooking { get; private set; }
public State FinishedCooking { get; private set; }
public State Completed { get; private set; }
public Event BurgerCookerOrderedEvent { get; private set; }
public Event BurgerCookerBeginCookingEvent { get; private set; }
public Event BurgerCookerFinishedCookingEvent { get; private set; }
public BurgerCookStateMachine()
{
InstanceState(x => x.CurrentState);
Event(() => BurgerCookerOrderedEvent, x => x.CorrelateById(context => context.Message.CorrelationId));
Event(() => BurgerCookerBeginCookingEvent, x => x.CorrelateById(context => context.Message.CorrelationId));
Event(() => BurgerCookerFinishedCookingEvent, x => x.CorrelateById(context => context.Message.CorrelationId));
Initially(
When(BurgerCookerOrderedEvent)
.ThenAsync(async x =>
{
x.Saga.CustomerName = x.Message.CustomerName;
})
.PublishAsync(async x => new BurgerCookerBeginCookingEvent()
{
CorrelationId = x.Saga.CorrelationId,
CookTemp = x.Saga.CookTemp, //check x.message.cookTemp
})
.TransitionTo(BeginCooking)
);
During(BeginCooking,
When(BurgerCookerBeginCookingEvent)
.ThenAsync(async x =>
{
//make more functionality
})
.PublishAsync(async x=>new CookBurger
{
CookTemp = "90Degree",
CorrelationId = x.Saga.CorrelationId
})
.TransitionTo(FinishedCooking));
During(FinishedCooking,
When(BurgerCookerFinishedCookingEvent)
.ThenAsync(async x =>
{
//should final response back to Main controller
await x.Publish(new SagaCompletionNotification
{
CorrelationId = x.Saga.CorrelationId
});
})
.TransitionTo(Completed)
.Finalize()
);
SetCompletedWhenFinalized();
}
}
потребители
public class CookBurgerConsumer : IConsumer
{
public async Task Consume(ConsumeContext context)
{
if (context.Message.CookTemp.Equals("90Degree"))
{
await Task.Delay(2000);
}
await context.Publish(new BurgerCookerFinishedCookingEvent()
{
CorrelationId = context.Message.CorrelationId
});
}
}
Контроллер
public class BurgerController : ControllerBase
{
private readonly IRequestClient _requestClient;
public BurgerController(IRequestClient requestClient)
{
_requestClient = requestClient;
}
[HttpPost("burgerOrder")]
public async Task PlaceBurgerOrder()
{
var order = new BurgerCookerOrderedEvent()
{
CorrelationId = Guid.NewGuid(),
CustomerName = "JOHN-BOB",
CookTemp = "MED"
};
var response = await _requestClient.GetResponse(order);
if (response.Message != null)
{
return Ok("Burger Cooked Successfully");
}
return StatusCode(500, "Burger cooking process failed");
}
}
СОБЫТИЯ
namespace Order.Application.Saga.BurgerSaga
{
public class BurgerCookerState : SagaStateMachineInstance
{
public Guid CorrelationId { get; set; }
public int CurrentState { get; set; }
public string CustomerName { get; set; }
public string CookTemp { get; set; }
}
public record BurgerCookerOrderedEvent
{
public Guid CorrelationId { get; set; }
public string CustomerName { get; set; }
public string CookTemp { get; set; }
}
public record BurgerCookerBeginCookingEvent
{
public Guid CorrelationId { get; set; }
public string CustomerName { get; set; }
public string CookTemp { get; set; }
}
public record BurgerCookerFinishedCookingEvent
{
public Guid CorrelationId { get; set; }
}
public class SagaCompletionNotification
{
public Guid CorrelationId { get; set; }
}
public class CookBurger
{
public string CookTemp { get; set; }
public Guid CorrelationId { get; set; }
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... g-resulted
Событие SAGA не возвращается на главный контроллер, его длительная загрузка привела к тайм-ауту запроса. Возможно, ошибк ⇐ C#
Место общения программистов C#
1727421334
Anonymous
Когда отладчик дошёл до этой точки, он переходит в thenAsync и после этого не возвращается к основному контроллеру ([b]BurgerController[/b]), происходит долгая загрузка, что приводит к таймауту запроса. Я думаю, что-то не так или не возвращается из [b]SagaCompletionNotification[/b].
During(FinishedCooking,
When(BurgerCookerFinishedCookingEvent)
.ThenAsync(async x =>
{
//should final response back to Main controller
await x.Publish(new SagaCompletionNotification
{
CorrelationId = x.Saga.CorrelationId
});
})
.TransitionTo(Completed)
.Finalize()
);
Завершить [b]SagaStateMachine[/b]
public class BurgerCookStateMachine : MassTransitStateMachine
{
public State Ordered { get; private set; }
public State BeginCooking { get; private set; }
public State FinishedCooking { get; private set; }
public State Completed { get; private set; }
public Event BurgerCookerOrderedEvent { get; private set; }
public Event BurgerCookerBeginCookingEvent { get; private set; }
public Event BurgerCookerFinishedCookingEvent { get; private set; }
public BurgerCookStateMachine()
{
InstanceState(x => x.CurrentState);
Event(() => BurgerCookerOrderedEvent, x => x.CorrelateById(context => context.Message.CorrelationId));
Event(() => BurgerCookerBeginCookingEvent, x => x.CorrelateById(context => context.Message.CorrelationId));
Event(() => BurgerCookerFinishedCookingEvent, x => x.CorrelateById(context => context.Message.CorrelationId));
Initially(
When(BurgerCookerOrderedEvent)
.ThenAsync(async x =>
{
x.Saga.CustomerName = x.Message.CustomerName;
})
.PublishAsync(async x => new BurgerCookerBeginCookingEvent()
{
CorrelationId = x.Saga.CorrelationId,
CookTemp = x.Saga.CookTemp, //check x.message.cookTemp
})
.TransitionTo(BeginCooking)
);
During(BeginCooking,
When(BurgerCookerBeginCookingEvent)
.ThenAsync(async x =>
{
//make more functionality
})
.PublishAsync(async x=>new CookBurger
{
CookTemp = "90Degree",
CorrelationId = x.Saga.CorrelationId
})
.TransitionTo(FinishedCooking));
During(FinishedCooking,
When(BurgerCookerFinishedCookingEvent)
.ThenAsync(async x =>
{
//should final response back to Main controller
await x.Publish(new SagaCompletionNotification
{
CorrelationId = x.Saga.CorrelationId
});
})
.TransitionTo(Completed)
.Finalize()
);
SetCompletedWhenFinalized();
}
}
[b]потребители[/b]
public class CookBurgerConsumer : IConsumer
{
public async Task Consume(ConsumeContext context)
{
if (context.Message.CookTemp.Equals("90Degree"))
{
await Task.Delay(2000);
}
await context.Publish(new BurgerCookerFinishedCookingEvent()
{
CorrelationId = context.Message.CorrelationId
});
}
}
[b]Контроллер[/b]
public class BurgerController : ControllerBase
{
private readonly IRequestClient _requestClient;
public BurgerController(IRequestClient requestClient)
{
_requestClient = requestClient;
}
[HttpPost("burgerOrder")]
public async Task PlaceBurgerOrder()
{
var order = new BurgerCookerOrderedEvent()
{
CorrelationId = Guid.NewGuid(),
CustomerName = "JOHN-BOB",
CookTemp = "MED"
};
var response = await _requestClient.GetResponse(order);
if (response.Message != null)
{
return Ok("Burger Cooked Successfully");
}
return StatusCode(500, "Burger cooking process failed");
}
}
[b]СОБЫТИЯ[/b]
namespace Order.Application.Saga.BurgerSaga
{
public class BurgerCookerState : SagaStateMachineInstance
{
public Guid CorrelationId { get; set; }
public int CurrentState { get; set; }
public string CustomerName { get; set; }
public string CookTemp { get; set; }
}
public record BurgerCookerOrderedEvent
{
public Guid CorrelationId { get; set; }
public string CustomerName { get; set; }
public string CookTemp { get; set; }
}
public record BurgerCookerBeginCookingEvent
{
public Guid CorrelationId { get; set; }
public string CustomerName { get; set; }
public string CookTemp { get; set; }
}
public record BurgerCookerFinishedCookingEvent
{
public Guid CorrelationId { get; set; }
}
public class SagaCompletionNotification
{
public Guid CorrelationId { get; set; }
}
public class CookBurger
{
public string CookTemp { get; set; }
public Guid CorrelationId { get; set; }
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79030255/saga-event-not-returning-to-main-controller-its-going-for-long-loading-resulted[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия