科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件消息与.Net Remoting的分布式处理架构

消息与.Net Remoting的分布式处理架构

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

分布式处理在大型企业应用系统中,最大的优势是将负载分布

作者:wayfarer 来源:博客堂 2007年11月4日

关键字: 消息 分布式 处理架构

  • 评论
  • 分享微博
  • 分享邮件
分布式处理在大型企业应用系统中,最大的优势是将负载分布。通过多台服务器处理多个任务,以优化整个系统的处理能力和运行效率。分布式处理的技术核心是完成服务与服务之间、服务端与客户端之间的通信。在.Net 1.1中,可以利用Web Service或者.Net Remoting来实现服务进程之间的通信。本文将介绍一种基于消息的分布式处理架构,利用了.Net Remoting技术,并参考了CORBA Naming Service的处理方式,且定义了一套消息体制,来实现分布式处理。 

   一、消息的定义

      要实现进程间的通信,则通信内容的载体——消息,就必须在服务两端具有统一的消息标准定义。从通信的角度来看,消息可以分为两类:Request Messge和Reply Message。为简便起见,这两类消息可以采用同样的结构。

      消息的主体包括ID,Name和Body,我们可以定义如下的接口方法,来获得消息主体的相关属性:

public interface IMessage:ICloneable { IMessageItemSequence GetMessageBody(); string GetMessageID(); string GetMessageName(); void SetMessageBody(IMessageItemSequence aMessageBody); void SetMessageID(string aID); void SetMessageName(string aName); }
  消息主体类Message实现了IMessage接口。在该类中,消息体Body为IMessageItemSequence类型。这个类型用于Get和Set消息的内容:Value和Item:
public interface IMessageItemSequence:ICloneable { IMessageItem GetItem(string aName); void SetItem(string aName,IMessageItem aMessageItem); string GetValue(string aName); void SetValue(string aName,string aValue); }

  Value为string类型,并利用HashTable来存储Key和Value的键值对。而Item则为IMessageItem类型,同样的在IMessageItemSequence的实现类中,利用HashTable存储了Key和Item的键值对。

      IMessageItem支持了消息体的嵌套。它包含了两部分:SubValue和SubItem。实现的方式和IMessageItemSequence相似。定义这样的嵌套结构,使得消息的扩展成为可能。一般的结构如下:

      IMessage——Name
                     ——ID
                     ——Body(IMessageItemSequence)
                            ——Value
                            ——Item(IMessageItem)
                                   ——SubValue
                                   ——SubItem(IMessageItem)
                                          ——……

      各个消息对象之间的关系如下:

Distribute1.gif
      在实现服务进程通信之前,我们必须定义好各个服务或各个业务的消息格式。通过消息体的方法在服务的一端设置消息的值,然后发送,并在服务的另一端获得这些值。例如发送消息端定义如下的消息体:

IMessageFactory factory = new MessageFactory(); IMessageItemSequence body = factory.CreateMessageItemSequence(); body.SetValue("name1","value1"); body.SetValue("name2","value2"); IMessageItem item = factory.CreateMessageItem(); item.SetSubValue("subname1","subvalue1"); item.SetSubValue("subname2","subvalue2");
IMessageItem subItem1
= factory.CreateMessageItem(); subItem1.SetSubValue("subsubname11","subsubvalue11"); subItem1.SetSubValue("subsubname12","subsubvalue12"); IMessageItem subItem2 = factory.CreateMessageItem(); subItem1.SetSubValue("subsubname21","subsubvalue21"); subItem1.SetSubValue("subsubname22","subsubvalue22"); item.SetSubItem("subitem1",subItem1); item.SetSubItem("subitem2",subItem2); body.SetItem("item",item); //Send Request Message MyServiceClient service = new MyServiceClient("Client"); IMessageItemSequence reply = service.SendRequest("TestService","Test1",body);

      在接收消息端就可以通过获得body的消息体内容,进行相关业务的处理。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章