2009-03-10 4 views
1

비동기 SOA를 제공하기 위해 MSMQ를 사용하고 있습니다. 설명하기가 어렵 기 때문에 아래 코드를 참조하십시오. 나는 그것을하는 가장 좋은 방법을 찾아 내려고 노력하고있다.MSMQ 관련 질문 "메시지 처리 방법"

//another method reads off MSMQ and passes the Message into this method 
public void ReadMSMQAndAction(Message m) 
{ 
    var e = m.Entity; 

    /* this is really bad, but i some how still need some 
    * kind of traffic cop to direct action */ 
    switch typeof(m.Entity) 
    case Order.GetType() 
     switch e.Action 
     case "SAVE" 
      //todo OrderRepo Save 
} 

//Message gets searlized and put into MSMQ 
public class Message<T> 
{ 
    public T Entity { get;set; } 

    /* should this be string? 
    * or some kind of rule i.e. "ClassName:MethodName" etc? */ 
    public string Action { get;set; } 
} 

public class OrderRepo 
{ 
    public void Save(Order o) { /* todo */ } 
    public void Delete(Order o) { /* todo */ } 
    public void Update(Order o) { /* todo */ } 
} 

코드가 복잡 해짐에 따라 관리하기가 어려울 수 있습니다. 어떤 제안이라도 환영합니다!

답변

1

대리인을 사용해보십시오. 이를 통해 실제 메서드 호출을 MSMQ로 전달할 수 있으므로 큐에서 해당 메서드를 가져올 때 대리자/동작을 시작할 수 있습니다.

+0

감사합니다. 왜 내가 대의원을 생각하지 않았어. – Jeff

+0

하지만 실제로 내가 생각했던 것은 백엔드가 클라이언트에 투명하게되기를 원했기 때문입니다. 즉, OrderRepo가 클라이언트에 노출되지 않을 수도 있고, 클라이언트에 대한 메커니즘을 가지고 있고 지시를 교환하기를 원합니다. – Jeff

+0

논리가 DLL에 있다면 앞/뒤 모두를 공유 할 수 있습니다. – cjk

0

WCF를 사용하십시오. Microsoft는 SOA (Service of Service)라는 의미의 서비스가 메서드 호출로 제공되도록이 코드를 마무리했습니다. 전송은 MSMQ입니다.

계약은 반드시 한 가지 방법이며, 전송이 MSMQ가된다는 사실은 서비스와 클라이언트에게 완전히 부수적입니다 (이 선택이 단방향 계약을 강요하는 경우를 제외하고). 다른 주에


, 나는 의견을 강요 느낌 : 당신이 명확하고 간결하게 할 수있는 의도와 구현 전략을 표현 할 때까지, 당신은 당신이 만드는 어떤 명확하고 완전한 생각을 가지고 있지 않으며, 성공의 기회 기껏해야 날씬하다.

소프트웨어 개발은 ​​사람들이 관심을 잃거나 예산이 소진되거나 프로젝트 스폰서가 생각하는 것을 생산할 때까지 피드백과 함께 경영진과 영업 직원의 모호한 말을 듣고 자신을 대신하여 상식을 적용하는 것으로 시작됩니다 처음으로 흥분한 팔을 흔들면서 그들이 말한 것을 분명하고 간결하게 묘사합니다.

당신이 무엇을하고 있는지 설명 할 수 없다면 하고 계십시오. 당신이 할 때까지 멈추고 생각할 시간.