首页 新闻 会员 周边

高并发通信服务器中实时消息处理模块该如何设计?

0
悬赏园豆:10 [已解决问题] 解决于 2014-11-16 01:31

本人项目中的场景如下:
由多台服务器组成的通信服务器集群cluster,cluster负责接收客户端的tcp连接及发送的消息,消息是通过内部协议格式化的,现在我想把消息的接收与处理模块进行解耦,让消息处理模块从通信模块中独立出来,请问有什么好的设计方案?

Raysonxin的主页 Raysonxin | 初学一级 | 园豆:13
提问于:2014-11-10 23:33
< >
分享
最佳答案
0

你的意思是 不是实时那种?

那就把消息存起来 放消息队列里

收获园豆:5
南昌炒粉 | 小虾三级 |园豆:760 | 2014-11-11 01:27

还是实时的,只不过是让通信业务与处理业务分离,目前是一起的用的消息队列。

Raysonxin | 园豆:13 (初学一级) | 2014-11-11 09:01

@Raysonxin: 这是伪实时,写和读是异步的。实时是指,收到消息后,不断开连接,客户端等待服务器端处理。用消息队列已经达到解耦的目的了啊。

南昌炒粉 | 园豆:760 (小虾三级) | 2014-11-11 10:58

@南昌炒粉: 我这里的通信连接是一直保持的,消息队列能够解耦,但是在高并发的情况下消息队列的容量是有限制的,我想是否可以通过内存数据库之类的池工具缓存起来,然后处理逻辑一直监听池动态,当有消息到来时立即处理。

Raysonxin | 园豆:13 (初学一级) | 2014-11-11 20:58

@Raysonxin: 消息队列 一般是用来处理异步请求的,发布者发布一个消息,消费者监听消息,然后处理,一般成熟的消息框架都是这样。比如说银行转帐,接到转帐请求,然后入队列,有个转帐的模块专门干这件事情,转帐成功后再通知转帐人。

你是自己实现了一个消息队列?那你考虑过HA,考虑过负载均衡了么?

他们不是存在内存中的,一般是持久化到硬盘里,要保证消息不丢失,不然突然断电,内存里的数据都没了。

好像ZeroMQ是存内存的,但这种的明显不能用于银行业务。

MSMQ RabbitMQ 类似的框架有很多,咱们只需要关心业务代码就行,比如说写个入口,来了请求往集群里写,再写个订阅者读消息。

南昌炒粉 | 园豆:760 (小虾三级) | 2014-11-11 23:44
其他回答(2)
0

代開宁波汽  车  维  修發  票

发送到 | 园豆:202 (菜鸟二级) | 2014-11-11 01:56
0

使用消息队列是不利于及时响应的

收获园豆:2
jello chen | 园豆:7336 (大侠五级) | 2014-11-11 23:18
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册