Chinaunix首页 | 论坛 | 博客
  • 博客访问: 310154
  • 博文数量: 42
  • 博客积分: 2718
  • 博客等级: 少校
  • 技术积分: 467
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-19 10:23
个人简介

青 田 酒 店 服 务 小 姐 价 格 186-6531-7773

文章分类

全部博文(42)

文章存档

2011年(36)

2010年(6)

分类: C/C++

2011-03-19 11:47:52

通讯中间件的性能和准确率是很重要的。 
以前的设计都是针对 应用程序 和插件来定义消息队列。而没有考虑消息的目的地。这样造成的后果是 
读出消息发送时,可能才知道,目的主机网络不通,从而导致发送到这个主机的数据不断被读出而没有发送出去,会丢掉。 
即使我们做一个缓存机制,因为读取消息接口并不知道目的主机(消息队列是基于应用而不只基于主机的),因此,不能发送的消息 
还是会源源不断的读出来,这样即便缓存,也会慢慢耗尽。从而丢失消息,而且也不能很快反映到应用程序。 
我在想,应该修改消息队列的定义,让消息队列的定义是基于目的主机的,这样,通讯程序一旦发现目的主机不可达,就在该主机的 
发送队列缓存一个消息体,然后就不会读取发往该主机的消息了。即便应用程序还不停的在写消息,当消息队列慢时,它将会知道,从而停止写 
或者等待,这样的机制,即保证了消息不会丢失,也保证了目的主机不可达时能够及时的反映给应用程序。 

但是缺点是:第一,消息队列的定义不好定义,还得思考。第二:写消息的接口,可能比较难实现,因为会牵扯到多个应用在发消息给同一个 
主机的时候,写同一个消息队列,要做锁机制。至于发送程序,遍历主机的消息队列时,发送失败,就缓存,设置不可达标志位,不再发送消息直到 
该主机可达,先发送缓存的消息,然后发送队列中的消息。 

也可采用原来的消息队列机制,只不过要增加一个分类器,目的是将每个应用的输出消息读出来,然后根据其目的地进行分发到各个目的主机的消息队列。这样省去了写操作的互斥过程,但是要增加额外的分类器程序,并且多拷贝两次消息。
阅读(1936) | 评论(0) | 转发(0) |
0

上一篇:开发记录第一篇

下一篇:CME系统更新方法

给主人留下些什么吧!~~