一个C++实现消息分发功能架构设计的问题

javagang 2016-06-27 10:51:56
加精
有一个系统,主要是消息分发,然后根据接收到的不同消息类型,构造响应报文,然后回报文。通常实现,我们做个消息分发器,根据收到的不同消息,写不同消息的处理回调函数,在回调函数里返回回报。
这个系统能否做成插件式的?整个消息的类型可能以后还会扩展,有更多新的类型加进来,并且消息回报的处理方式也可能不相同,这样可否我提供消息分发器,然后回报处理让使用者(客户)自己实现?
弄一个回调函数Map,根据请求消息不同的ID,调用不同的回掉函数指针;另一头,客户将回调函数数组进行赋值,赋值成自己实现的回调处理函数,编译成DLL,和整个消息分发器结合使用?

另一方面,还有种做法,做一个通用的消息处理函数负责消息的回报。不同的回报消息利用配置文件配置,配置的主要内容是告诉这个通用的处理函数,回报消息体里各个字段分别取自哪里(请求消息、数据库、Or另行计算得到等等)。

我个人觉得如果第一种方式能够实现的话,后续可以将该系统的开发交与客户,进行后续的多次开发,可以根据自己的需求定制,我们只需要将主程序(消息分发器)实现好并提供即可。第二种方式看似对于客户省事了,客户只需要配置新的消息配置文件即可,但是由于新业务的不确定性,想做通用的消息回报函数很困难,新的业务加进来,难免会调整或增加新的处理,修改现有函数。并且通过配置文件来做这个事,也增加了异常处理的工作量,引入各种异常导致程序崩溃的可能性大增。

大家有什么好的建议?多谢!
...全文
2449 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
cxyOOOO 2016-07-01
  • 打赏
  • 举报
回复
引用 9 楼 yjz1409276 的回复:
为了从一个源头控制和统一消息的分发和处理.例如MFC的消息映射.
MFC的消息驱动来自系统,不是用户。 俺比较怀疑楼主的描述里概念有混乱。 “用户”或许指代了两个角色,一个位于系统外,一个位于系统内。
红色代码 2016-06-30
  • 打赏
  • 举报
回复
引用 5 楼 cxyOOOO 的回复:
俺有些地方没明白,用户一方面请求消息,系统一边根据请求消息进行回调(用户设置的)。 为啥用户不直接调用,而是跑到系统里绕一圈? 系统里有什么动作,还是“请求”是指通知消息(如果是通知,怎么触发通知)? 还有请求消息,本身是否是复杂、多变的? 响应(回复)消息呢?好象响应消息有点复杂的样子。 随便说说哈。
为了从一个源头控制和统一消息的分发和处理.例如MFC的消息映射.
红色代码 2016-06-30
  • 打赏
  • 举报
回复
还要考虑消息是同步还是异步的,优先级等等
Heart09 2016-06-28
  • 打赏
  • 举报
回复
我也没看太懂,多态不能实现吗?
  • 打赏
  • 举报
回复
Windows下面以前做过,其实就是个sdk包,里面有自己的消息循环,最后打包成dll,提供给其他人调用
ztenv 版主 2016-06-27
  • 打赏
  • 举报
回复
引用 2 楼 javagang 的回复:
[quote=引用 1 楼 lianshaohua 的回复:] 个人感觉:可以做成插件式的,不同消息类型可以分发给不同的目标,不过个人认为还有比插件式更好的方法,就是让你的消息中间件增加“topic”功能,这样不同的客户订阅了不同的topic后,就可以收到此类topic的所有的消息了,是不是会更好?同时也免去了增加消息类型而开发插件的麻烦。
感谢回复! 系统目前主要是想在客户新增业务类型(新的请求消息)的情况下,基于我们提供的平台能够不做或者仅作简单的开发就能够实现消息回报的方法。这个消息可能是现在已有的,也可能是未来会扩展的。topic的方式是不是适用于都是已知的情况?[/quote] 可以是现有的,也可以是未知的,
javagang 2016-06-27
  • 打赏
  • 举报
回复
引用 1 楼 lianshaohua 的回复:
个人感觉:可以做成插件式的,不同消息类型可以分发给不同的目标,不过个人认为还有比插件式更好的方法,就是让你的消息中间件增加“topic”功能,这样不同的客户订阅了不同的topic后,就可以收到此类topic的所有的消息了,是不是会更好?同时也免去了增加消息类型而开发插件的麻烦。
感谢回复! 系统目前主要是想在客户新增业务类型(新的请求消息)的情况下,基于我们提供的平台能够不做或者仅作简单的开发就能够实现消息回报的方法。这个消息可能是现在已有的,也可能是未来会扩展的。topic的方式是不是适用于都是已知的情况?
cxyOOOO 2016-06-27
  • 打赏
  • 举报
回复
俺有些地方没明白,用户一方面请求消息,系统一边根据请求消息进行回调(用户设置的)。 为啥用户不直接调用,而是跑到系统里绕一圈? 系统里有什么动作,还是“请求”是指通知消息(如果是通知,怎么触发通知)? 还有请求消息,本身是否是复杂、多变的? 响应(回复)消息呢?好象响应消息有点复杂的样子。 随便说说哈。
ztenv 版主 2016-06-27
  • 打赏
  • 举报
回复
个人感觉:可以做成插件式的,不同消息类型可以分发给不同的目标,不过个人认为还有比插件式更好的方法,就是让你的消息中间件增加“topic”功能,这样不同的客户订阅了不同的topic后,就可以收到此类topic的所有的消息了,是不是会更好?同时也免去了增加消息类型而开发插件的麻烦。
lee_鹿游原 2016-06-27
  • 打赏
  • 举报
回复
不太清楚整个逻辑 ,只能相比较你说的两种方法,选择第一种 第一种耦合度很低,而且使用者,需要response,自己赋值即可。动态改变实现简单,尽量避免提供者与使用者的复杂交互。

64,647

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧