消息服务的组成划分
对于消息通知的处理,我们设计的是发布-订阅者模式,消息中心在消息的生产者和消费者之间充当经纪人角色,负责二者的解耦,对于生产者来说,不需要知道会被哪些消费者消费,对于消费者来说,也不需要知道消息是怎么产生的,由消息中心进行逻辑处理和调度,包括消息的解析、复制、转发等。
消息服务实际是一个独立的系统,性质上又分为两类,一类是消息服务端,我们称之为消息服务中心;另外一类是消息客户端,并且这个消息客户端,有可能是消息的生产者,也可能是消息的消费者,甚至是两种角色兼而有之。
注意,实际应用中,客户端和服务端分属于不同系统,独立部署的。
甚至于,只要约定好通信协议和消息格式,我们用java技术栈实现消息服务端,而客户端可以自由使用任意技术栈,如.net。
这里我们假设客户端也是采用java技术栈实现的,并且希望将其封装为sdk,内部技术细节如心跳、重发、去重、自动重连等内置实现,将来把SDK提供给对接系统,便于他们直接进行业务逻辑开发。
服务端与客户端通过消息进行数据交换,都使用netty组件,因此不可避免的会有较多的公用类,如消息和事件的实体类、枚举类型、公共消息处理器、工具类等,因此提取公共部分,形成一个单独工程,来实现复用的目的。
最终,我们的消息服务组成如下:
platform-cip-common:公共基础
platform-cip-message:基于netty的web socket服务端提供消息服务
cip-client:消息