나는 꽤 바닐라 웹 서비스 (구시대 asmx)를 가지고있다. 메소드 중 하나는 클라이언트에 반환 된 결과와 아무런 관련이없는 비동기 처리를 시작합니다. ThreadPool.QueueUserWorkItem의 DoAsyncStuffHere 방법을 만들어 사용C# 웹 서비스에서 프로듀서/소비자 대기열 구현
[System.Web.Services.WebMethod]
public List<Foo> SampleWebMethod(string id)
{
// sample db query
var foo = db.Query<Foo>("WHERE [email protected]",id);
// kick of async stuff here - for example firing off emails
// dont wait to send result
DoAsyncStuffHere();
return foo;
}
내 초기 구현 : 희망, 작은 조각은 아래의 의미가 있습니다. 그래서, 그것은 다음과 같이 보입니다 :
public void DoAsyncStuffHere()
{
ThreadPool.QueueUserWorkItem(delegate
{
// DO WORK HERE
});
}
이 접근법은 저 부하 조건에서 잘 작동합니다. 그러나, 나는 꽤 높은 부하를 처리 할 수있는 무언가가 필요하다. 따라서 생산자/소비자 패턴이 가장 좋은 방법 인 것 같습니다. 내가 혼란 스러워요
모든 일이 모든 인스턴스 웹 서비스의에 걸쳐 단일 스레드 큐에 의해 수행되는 것을 제한하는 방법이다. 웹 서비스의 모든 인스턴스에서 액세스 할 단일 대기열을 설정하는 것이 가장 좋은 방법은 무엇입니까?
"웹 서비스의 모든 인스턴스에서"라고 말하면, 여러 요청 처리 스레드가있는 프로세스 하나를 의미합니까, 아니면 부하 분산 설정과 같이 별도로 실행되는이 ASP.NET 프로젝트의 여러 복사본을 의미합니까? – mbeckish
여러 요청 처리 스레드가있는 하나의 프로세스. – user163757