`
dearwolf
  • 浏览: 345119 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

多主题多订阅者的情况怎样处理比较好?

阅读更多
在单主题多订阅者的情况,就是用Observer模式了。

但是对于多主题多订阅者,如果对于每一个主题的更新,模型都要清楚的知道哪些订阅者订阅了这个主题,这样的耦合度是不是太高了?但是如果不这样的话,那么一个主题的更新,就带来所有订阅者的更新——无论这个订阅者是否订阅了这个主题,这又是很大的浪费把?

比如在一个模型中,有主题A,B,C,订阅者有a,b,c,d,其中a,b订阅A,b,c订阅B,a,c,d订阅C,或者主题再多上一些,有几十个的话,这时候怎样设计比较好呢?
分享到:
评论
6 楼 dearwolf 2007-07-27  
晕,模型当然不需要知道具体的订阅者了,它只需要知道有人订阅而已。
5 楼 Morgan0916 2007-07-26  
建议你再看看Observer模式吧

"但是对于多主题多订阅者,如果对于每一个主题的更新,模型都要清楚的知道哪些订阅者订阅了这个主题,这样的耦合度是不是太高了?"

如果模型都不知道订阅者,还叫订阅吗? 肯定需要订阅注册的
4 楼 dearwolf 2007-07-25  
嗯,我想最好还是重新审视一下设计,看看能不能变成单对多
3 楼 dearwolf 2007-07-25  
SunMicro 写道
Observer一般可以配合singleton和Mediator,将Mediator实现为singleton,然后通过mediator注册发布则和订阅者



好的,我去看一下,谢谢!
2 楼 dearwolf 2007-07-25  
ltian 写道
楼主在讨论消息编程吗?pub/sub方式不存在以上你说的耦合情况吧,除非你要做一个JMS提供者,而非JMS客户端。


对于多对多的情况,简单的使用pub/sub当然会存在耦合了
1 楼 SunMicro 2007-07-25  
Observer一般可以配合singleton和Mediator,将Mediator实现为singleton,然后通过mediator注册发布则和订阅者

相关推荐

    MQTT+springboot 订阅/发布 多主题

    主题字符串类似于文件路径,由点分隔的层级组成,允许订阅者订阅感兴趣的部分主题树。例如,一个主题可能为`devices/sensors/temperature`,允许订阅者只接收关于温度传感器的消息,而忽略其他类型的设备数据。 ...

    发布-订阅者模式的一个小例子程序

    1. **主题(Subject)**:主题是发布事件的对象,它可以有多个订阅者。在C++中,这个角色通常由一个类来扮演,该类包含一个或多个订阅者列表,并提供添加、删除订阅者的方法。 2. **订阅者(Subscriber)**:订阅者...

    使用SpringBoot项目对接mqtt实现发布者与订阅者进行消息处理

    它由主题(Topic)、发布者(Publisher)、订阅者(Subscriber)和代理(Broker)四个核心概念组成。发布者向特定主题发布消息,订阅者则订阅感兴趣的 topic 并接收消息,而代理负责消息的路由和存储。 在Spring ...

    js实现的订阅发布者模式简单示例

    它首先检查是否有订阅者关注该主题,如果有,则遍历订阅者数组并调用它们的处理程序。 2. `subscribe`方法:此方法用于订阅消息。它接收两个参数,一个是要订阅的主题,另一个是当消息发布时要调用的处理函数。如果...

    RabbitMQ 发布者订阅者

    发布者订阅者模型是消息队列中的一种通信模式,其中发布者发送消息到一个主题,而多个订阅者可以监听并接收这些消息。这种模式在多对多通信中尤为有用,比如实时数据推送、事件通知等。 **RabbitMQ基本概念:** 1. ...

    JMS--消息持久订阅者测试

    - 创建`TopicSubscriber`订阅主题,并指定订阅者名称。 - **测试步骤**: - 在A机器上启动消息持久订阅者`Durable_Subscriber`。 - 让该订阅者接收并处理一定数量的消息。 - 模拟A机器上的订阅者永久性停止。 ...

    apache MQ 点对点,发布/订阅者,开发流程

    发布/订阅模式基于主题(Topic)进行消息传递,一个主题可以有多个订阅者,所有订阅者都能接收到同一消息。以下是实现该模式的步骤: 1. **创建主题**:与队列类似,首先需要在ActiveMQ服务器上创建一个主题。 2. *...

    发布订阅者模式实现(内含单例模式、缺省适配器模式)

    发布订阅者模式是一种软件设计模式,它允许对象之间进行解耦,使得发送方(发布者)无需知道接收方(订阅者)的具体实现,只需要知道如何发布事件或消息,而订阅者则可以自主选择关注哪些事件并进行处理。...

    MQTT发布/订阅消息机制

    订阅者则订阅感兴趣的“主题”(Topic),这样当有针对这些主题的消息时,Broker就会将消息推送给相应的订阅者。 - **发布者(Publisher)**: 生成消息并将其发送给Broker。 - **订阅者(Subscriber)**: 表达对...

    ROS学习笔记5源码-发布者与订阅者.zip

    你可以将其想象为一种通信管道,一个或多个发布者向Topic发布数据,而一个或多个订阅者则可以接收这些数据。Topic的数据类型由Message定义,Message是ROS中预定义或自定义的数据结构。 2. **发布者(Publisher)**...

    C# RabbitMQ 主题订阅的源码

    它可能包括一个发布者类用于发布消息,以及一个订阅者类用于接收和处理消息。源码分析可以帮助我们更好地理解RabbitMQ在C#中的工作原理。 总结,C#结合RabbitMQ能够实现高效的异步通信和解耦。通过主题订阅模式,...

    Spring boot mqtt 推送主题,订阅主题

    订阅者则通过订阅感兴趣的主题来接收发布的消息。 在Spring Boot中集成MQTT,我们通常会使用Paho MQTT Java Client库,它是Apache Eclipse Paho项目的一部分,为多种语言提供了MQTT连接器。以下是一个简单的步骤来...

    mqtt-简单实现 -动态增加订阅,取消订阅

    发布者并不关心哪些订阅者接收了消息,而订阅者只需指定感兴趣的特定主题(Topics),即可接收到与之匹配的主题消息。 **动态增加订阅** 在MQTT应用中,动态增加订阅意味着客户端可以在运行时根据需要订阅新的主题...

    自定义QT消息订阅发布

    3. **消息中心**:为了实现多订阅者共享同一消息,我们可以创建一个消息中心类,它维护一个信号和多个槽的连接。订阅者向消息中心注册,发布者向消息中心发布: ```cpp class NotificationCenter : public QObject ...

    ActiveMQ消息队列主题订阅Spring整合

    主题则支持多播,多个订阅者可以同时接收同一消息。 Spring与ActiveMQ的整合主要涉及以下步骤: 1. **配置ActiveMQ服务器**:首先,你需要在本地或远程设置一个运行的ActiveMQ服务器。这通常涉及到下载ActiveMQ二...

    在linux开发板上的mqtt代理服务、发布者和订阅者程序的调试.zip

    订阅者程序则会订阅特定主题,接收并处理消息。 调试这些程序时,确保检查以下几点: 1. MQTT连接参数是否正确,包括服务器地址、端口、用户名和密码。 2. 发布者和订阅者使用的主题是否匹配。 3. 确保代理服务正常...

    小而美的pubsub库发布订阅者模式

    发布订阅者模式(Publish-Subscribe,简称Pub/Sub)是一种软件设计模式,它允许发送者(发布者)将消息广播给一组订阅者,而无需知道这些订阅者的具体身份。这种模式在JavaScript开发中尤为常见,特别是在事件驱动...

    ROS发布者publisher和订阅者subscriber编程实现,C++实验代码

    这种一对多的通信模式使得多个订阅者可以同时接收来自一个发布者的数据。 在C++中,实现ROS的发布者和订阅者通常涉及到以下步骤: 1. **头文件和命名空间**:首先,我们需要包含ROS相关的头文件,如`#include ...

    java实现mqtt的发送和订阅

    服务端的主要任务是接收客户端的订阅请求,并将发布的消息分发给对应的订阅者。 在Java中,我们可以创建一个简单的MQTT服务端示例,但请注意,这通常不是开发人员直接处理的部分,因为Broker是独立运行的。你需要...

Global site tag (gtag.js) - Google Analytics