与MSMQ“如何操作消息”相关的问题

时间:2009-03-10 22:02:03

标签: msmq

我使用MSMQ作为提供异步SOA的方法。请参考下面的代码,因为它很难解释。我试图找出最好的方法。

//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 */ }
}

随着代码变得越来越复杂,管理起来真的很难。欢迎任何建议!

2 个答案:

答案 0 :(得分:1)

查看使用委托。它们允许您将实际的方法调用传递给MSMQ,以便您可以在从队列中检索委托/操作时触发委托/操作。

答案 1 :(得分:0)

使用WCF。微软已经把它包装起来,以便服务(在SOA意义上)作为方法调用呈现,传输是MSMQ。

合同必然是单向的,而且运输恰好是MSMQ的事实对服务及其客户来说是完全偶然的(除非这种选择强制单向合同)。


另一方面,我觉得有必要发表评论:在你能清楚简洁地表达意图和实施策略之前,你没有清楚而完整地了解自己的创造,而你的成功机会至少是微不足道的。

软件开发始于对管理层和销售人员进行模糊处理,并代表他们应用常识,反馈周期,直到一方失去兴趣,预算耗尽,或者您产生项目赞助商认为的清晰简洁地呈现他们在第一次兴奋的手臂挥舞时所说的想法。

如果你无法解释你在做什么,那么你就不会知道你在做什么。是时候停下来思考直到你做了。