当前位置: 首页 > 知识库问答 >
问题:

发布者和订阅者是否在同一线程上

云默
2023-03-14

这只是为了澄清发布/订阅线程。

我的疑问是在正常的发布者/订阅者模式中,订阅者和发布者是在同一个线程上运行还是在不同的线程中运行?

还是取决于实现?

到目前为止,我所想的是不同的订阅会有自己的线程,而publisher在其上运行的是自己的线程?

共有2个答案

郭乐意
2023-03-14

在我看来,发布者-订阅者模式与分布式系统和面向消息传递的系统紧密耦合。这种系统的目的是可伸缩,因此它意味着发布者和订阅者应该在不同的线程上运行。

商鸿哲
2023-03-14

在正常的发布者/订阅者模式中,订阅者和发布者是在同一个线程上运行还是在不同的线程中运行?还是取决于实现?

通常,发布者/订阅者在不同的线程中运行。在这里,这些发布者/订阅者线程可以在同一个应用程序中,也可以来自在您的项目之外运行的不同应用程序。例如,您的应用程序可能会发布一些有关产品信息的数据,而另一个应用程序可能会订阅该数据并使用它。

有几种方法可以实现基于生产者/消费者的应用程序,比如使用队列或使用JMS(用更多的特性松散地耦合生产者和消费者)等..通常在这些实现中,消息将由从一个线程(使用/不同的应用程序)产生消息的发布者发布,而消费者从另一端消费消息。

到目前为止,我的想法是不同的:订阅将拥有自己的线程,而发布者在其上运行自己的线程?

是的,你是对的,除此之外,不要以为总是只有一个出版商。在一些现实世界的应用程序中,可能有几个生产者(在不同线程中运行)发布消息,而几个使用者(在不同线程中运行)使用这些消息。

 类似资料:
  • 是否有任何示例代码可以让一个主机发布事件,而另一个主机通过Esper框架接收事件(侦听器或订阅者)。我注意到Esper提供了不同的适配器(套接字、JMS和HTTP),但找不到相应的示例代码。谢谢

  • 目前,我已经开始使用ActiveMQ处理JMS主题。我已经通过JAVA代码(如下所述)创建了发布者和持久订阅者,并且在订阅者端也收到了消息。 Publisher.Java 订阅者.java 我对以下主题有一些疑问, 如何检查有多少订阅者使用 Java JMS 在主题中主动查找消息? 如何从主题中获取活动和持久订阅者列表? 我们是否可以删除主题中发布的消息? 在这些情况下帮助我。 提前致谢。

  • 从这个留档: RxJS为JavaScript引入了一个新的Push系统。可观察对象是多个值的生产者,将它们“推送”给观察者(消费者)。 订阅可观察对象类似于调用函数。 要调用可观察对象,我们应该从可观察对象本身调用函数,并将观察者作为可观察对象提供的数据的使用者传递,如: 本文件还说明: 什么是观察者?观察者是被观察者所传递价值的消费者。观察者只是一组回调,每个回调对应于被观察者发送的每种类型的通

  • 我想用Java实现各种各样的发布者/订阅者模式,但目前已经没有主意了。 有1个发布者和N个订阅者,发布者发布对象,然后每个订阅者需要按照正确的顺序对每个对象进行一次且仅处理一次。发布者和每个订阅者在自己的线程中运行。 在我最初的实现中,每个订阅者都有自己的阻塞队列,发布者将对象放入每个订阅者的队列中。这可以正常工作,但如果任何订阅者的队列已满,发布者将被阻塞。这会导致性能下降,因为每个订阅者处理对

  • 我需要在发布/订阅模式下调用Kafka消费者1000次。据我所知,为了让kafka在发布/订阅模式下工作,我需要给每个消费者一个新的groupId(props . put(" group . id ",String.valueOf(Instant.now())。toEpochMilli()));).但是当我这样做的时候,如果两个消费线程同时访问消费线程,就会出现问题。这个问题应该怎么解决?

  • 我正在创建一个API来发布和使用来自RabbitMQ的消息。在我当前的设计中,发布者将发出一个POST请求。我的API会将POST请求路由到Exchange。这样,发布者在发布时就不必知道服务器地址、exchange名称等。 现在消费者部分是我不确定如何继续的地方。 开始时不会排队。当一个新的消费者想要订阅一个主题时,那么我将创建一个队列并将其绑定到交换。我需要一些问题的答案- 一旦我为使用者创建