学习发布/订阅机制

发布/订阅机制主要用于构建即时通信应用,比如网络聊天室。

简介

在软件结构中,发布订阅是一种消息模式(一种面向网络结构的模式,描述了两种不同部分的消息怎么去互相连接和沟通),其中包括非直接传递信息的publisher叫publish,和接收信息的subscriber叫subscribe。subscriber把不同的消息进行分类,同时不需要知道subscriber是谁。subscriber订阅感兴趣的分类,并只接收订阅的分类中信息,同时也不需要知道publisher是谁。
发布订阅机制通常和消息队列机制一样,也是一种典型的大型的面相信息中间件系统的一部分。

消息过滤

在订阅发布模型中,subscriber只接收所有发布的信息中的一部分。选择接收的信息的过程叫过滤。有两种过滤机制:
基于主题:
publisher发布不同主题的消息,subscriber接收选择已订阅的主题的消息。不同subscriber订阅相同主题的话接收的信息相同。publisher定义不同subscriber可以订阅的信息的类别。
基于内容
只有当发送的消息的属性或者内容符合subscriber制定的规则,消息才会发送给subscribes。

一些系统支持两种过滤机制的混合使用,即publisher发布一个消息到一个主题,同时subscriber制定了基于内容的限制的订阅在这个主题上。

应用

在很多订阅发布系统中,publisher发布信息到一个信息中介或者是事件公交车,同时subscriber注册订阅信息到这个信息中介,同时信息中介担当着过滤的作用。信息中介一般扮演着暂存和继续发送从publisher按照路线发送到subscriber的消息的角色。另外,信息中介可能会在按路线运送消息前在消息队列中对消息的优先级进行处理。

subscriber可能会注册特定的消息在构建时,初始化时或者运行时。GUI系统在系统构建的时候就会进行用户点击等消息的订阅。一些框架和软件产品用XML在初始化注册订阅信息。许多复杂的别的系统则在运行时进行订阅处理 ,例如RSS。

优点

1.低耦合
publisher和subscriber时低耦合的,他们可以继续运行而不用管对方的状态。在传统的客服端-服务器范例中,服务器不运行,客户端就不能发送消息到服务器。客户端不运行,服务器就接收不到消息。
2.可扩展型
通过平行的运行机制,消息缓存机制,基于一定规则的消息发送机,相比通常的客户端-服务端模式,订阅发布模式有更好的扩展性。但是在高耦合大容量的企业级环境中,不适合订阅发布机制。

缺点

低耦合
为什么这么说呢?publisher的消息数据结构必须定义的很合理,有相当的伸缩性。为了更改要发布的消息数据结构,publisher可能要知道所有的subscriber,同时也要修改他们或者与旧版本保持兼容。这使得重构publisher变的很困难。因为随着时间推移可能会更改需求,publisher数据结构的不变性会成为负担。
However, this is a common issue with any client/server architecture and is best served by versioning content payloads or topics and/or changing URL end points for backward compatibility.



作者:stone_yao
链接:http://www.jianshu.com/p/ddb12216745f
來源:简书

你可能感兴趣的:(杂项)