消息队列(MSMQ)实现多服务器应用程序之间消息实时交互

 

我所介绍的例子是利用微软的消息队列(msmq)实现多个服务器之间消息实时传递。

应用程序:基于dotnet平台采用WinForm+Webservice开发的应用程序。

每个地区都有自己的数据库和Webservice服务器。

Webservice服务器有很多台,这样多个服务器上用户互相交流就成了问题。思前想后采用了msmq,设计思想如下:

例子:A服务器用户user1发送消息给B服务器上的user2

1、首先是数据库结构是一样的使用sql2005同步用户信息表。
2、在每台Webservice服务器上安装msmq。
3、当user1发送消息给user2时,判断user2所在服务器,如果user2和发送者不在同一个服务器就使用msmq传递消息给B服务器。
4、每个Webservice服务器都有一个消息接收服务程序,用来侦测本服务器消息队列里的消息,反序列化消息内容,写入数据库。
5、user2直接读取数据库就可以了。
6、实际上就是通过msmq在多个数据库服务器之间消息传递。
下面是消息接收服务程序的源代码:

 


using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.Threading;
using System.Messaging;
using wzh.Db;//数据库操作类

///<summary>
///名称:消息服务程序
///用途:实时侦测远程机器发送到本机的消息队列的消息,写入本机数据库。
///作者:wzh
///编写日期:2008-9-28
///修改日期:wzh于2008-10-10修改了部分BUG
///</summary>
namespace wzh_MsgService
{
    
public class MsgService : System.ServiceProcess.ServiceBase
    {
        
/// <summary> 
        
/// 必需的设计器变量。
        
/// </summary>
        private System.ComponentModel.Container components = null;
        
private bool servicePaused;
        
private string mPath = null;// = @"./Private$/MsgQueue
        public MsgService()
        {
            
// 该调用是 Windows.Forms 组件设计器所必需的。
            InitializeComponent();

            
// TODO: 在 InitComponent 调用后添加任何初始化
        }

        
// 进程的主入口点
        static void Main()
        {
            System.ServiceProcess.ServiceBase[] ServicesToRun;
    
            
// 同一进程中可以运行多个用户服务。若要将
            
//另一个服务添加到此进程,请更改下行
            
// 以创建另一个服务对象。例如,
            
//
            
//   ServicesToRun = New System.ServiceProcess.ServiceBase[] {new Service1(), new MySecondUserService()};
            
//
            ServicesToRun = new System.ServiceProcess.ServiceBase[] { new MsgService() };

            System.ServiceProcess.ServiceBase.Run(ServicesToRun);
        }

        
/// <summary>
        
/// 调试用在项目属性里,将输出类型(Output Type)改成Console Application,将Startup Object改成Namespace.ServiceName
        
/// </summary>
        
/// <param name="args&
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值