首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java - Vertx -Publish-Subscribe模式:在自己的消费者内部发布消息。这是个坏主意吗?

在Java - Vertx中使用Publish-Subscribe模式在消费者内部发布消息是一个不太理想的做法。Publish-Subscribe模式通常用于实现消息的广播和订阅,其中发布者将消息发送到一个或多个主题,而订阅者可以选择订阅感兴趣的主题并接收相应的消息。

在自己的消费者内部发布消息可能会导致以下问题:

  1. 低效性:如果消费者内部发布消息,其他消费者无法直接订阅到这些消息,而需要通过消费者之间的通信来获取消息。这样会增加消息传递的复杂性和延迟。
  2. 可维护性差:当发布者和订阅者之间的关系变得复杂时,如果每个消费者都在内部发布消息,会导致代码的可维护性变差。因为发布者和订阅者之间的依赖关系被隐藏在消费者内部,难以清晰地理解和管理。
  3. 扩展性差:如果需要增加新的订阅者,或者发布者需要发送消息给其他消费者,就需要修改消费者的代码。这样会导致代码的脆弱性和扩展性差。

因此,更好的做法是将发布者和订阅者解耦,使用专门的消息中间件或消息队列来实现Publish-Subscribe模式。消息中间件可以提供高效的消息传递机制,支持多个发布者和订阅者之间的解耦,同时提供可靠性、可扩展性和可维护性。

对于Java - Vertx框架,可以考虑使用腾讯云的消息队列 CMQ(云消息队列)来实现Publish-Subscribe模式。CMQ提供了高可靠性、高可用性和高吞吐量的消息传递服务,支持多种消息传递模式,包括Publish-Subscribe模式。您可以使用CMQ的主题(Topic)功能作为消息的发布者,将消息发送到主题中,然后订阅者可以选择订阅感兴趣的主题并接收相应的消息。

腾讯云CMQ产品介绍链接地址:https://cloud.tencent.com/product/cmq

请注意,以上答案仅供参考,具体的架构设计和技术选择应根据实际需求和场景来确定。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Apache Kafka-通过设置Consumer Group实现广播模式

---- 概述 传统消息传递模式有2种:队列( queue) 和(publish-subscribe) queue模式:多个consumer从服务器中读取数据,消息只会到达一consumer publish-subscribe...模式消息会被广播给所有的consumer Kafka基于这2种模式提供了一种consumer抽象概念: consumer group queue模式:所有的consumer都位于同一consumer...publish-subscribe模式:所有的consumer都有着自己唯一consumer group ?...每个消费者分组名字上配合 UUID 生成其后缀。...可以看到不消费组下 消费者(目前是一消费组下一消费者) 均收到了 这条消息,这就是广播模式 ---- 源码地址 https://github.com/yangshangwei/boot2/tree

8.3K21

光速入门消息队列Kafka

kafka结构 知识要点 kafka内部原理 kafka结构图 kafka 集群示意图 2.1 kafka消息模式 kafka支持两种消息模式: p2p模式(队列模式 Queuing) 发布订阅模式publish-subscribe...) 2.1.1 点对点p2p模式(队列模式 Queuing): 点对点模式中,一群消费者会从一server中读取数据,每一数据会被消费者给处理。...该模式允许你将数据处理分发到多个消费者实例中,这可以让你扩展你消费过程。 但是,模式下如果一旦一消费者处理过后,数据就丢失了。...2.1.2 发布订阅模式publish-subscribe): 发布订阅模式中,数据记录会被广播到所有的消费者中。 也因而缺失了处理过程可扩展性,因为每个消息都会到每个订阅者中。...kafka提供了一群消费者进程处理顺序保证、负载均衡,这是通过topic中分配分区给消费组中消费者来做到,每个分区partition都只会被消费组中消费者给消费。

45810
  • Kafka:第一章:基本概念以及安装Kafka,单播模式和多播模式

    Topic:Kafka根据topic对消息进行归类,发布到Kafka集群每条消息都需要指定一topic。 Producer:消息生产者,向Broker发送消息客户端。...Partition:物理上概念,一topic可以分为多个partition,每个partition内部消息是有序。...四、单播模式和多播模式 单播消费 一条消息只能被某一消费者消费模式,类似queue模式,只需让所有消费者同一消费组里即可 分别在两客户端执行如下消费命令,然后往主题里发送消息,结果只有一客户端能收到消息...多播消费 一条消息能被多个消费者消费模式,类似publish-subscribe模式费,针对Kafka同一条消息只能被同一消费组下某一消费者消费特性,要实现多播只要保证这些消费者属于不同消费组即可...我们再增加一消费者,该消费者属于testGroup-2消费组,结果两客户端都能收到消息

    60620

    Kafka集群搭建与使用

    也可以根据消息某一关键字来进行区分。通常第二种方式使用更多。 Consumers 传统消息传递模式有2种:队列( queuing)和( publish-subscribe)。...queuing模式中,多个consumer从服务器中读取数据,消息只会到达一consumer。 publish-subscribe 模型中,消息会被广播给所有的consumer。...如果所有的consumer都有着自己唯一consumer group,这就类似于传统publish-subscribe模型。...,类似queue模式,只需让所有消费者同一消费组里即可 分别在两客户端执行如下消费命令,然后往主题里发送消息,结果只有一客户端能收到消息 bin/kafka-console-consumer.sh...,类似publish-subscribe模式费,针对Kafka同一条消息只能被同一消费组下某一消费者消费特性,要实现多播只要保证这些消费者属于不同消费组即可。

    84510

    Redis发布订阅:我想着应该是全网讲解最简单最通俗文章了吧!

    为什么要用发布订阅 其实理论上我们之前列表场景使用双端链表就可以实现发布与订阅功能,但是这种通过链表来实现发布与订阅功能有两局限性: 1、基于链表实现消息队列,不能支持一对多消息分发。...;redis订阅发布:生产者生产完消息通过频道分发消息给订阅该频道消费者,这样就可以较少队列数据积攒,导致内存暴增。...在这种情况下,命令会返回一信息,告知客户端所有被退订频道。 那么Redis中发布与订阅也分为两种类型,一种是基于频道来实现,一种是基于模式来实现。...redis发布订阅优缺点 小伙伴们从上面的实践操作来看,PubSub生产消息,如果没有对应频道或者消费者消息会被丢弃,直接投递失败返回0状态。...假如我们实际生产环境消费时候,突然网络波动,导致其中一消费者挂掉了一段时间,那么当它重新连接上时候,中间这一段时间产生消息也将不会存在。也就是说Redis本身是不会存储消息体信息

    1.5K00

    发布-订阅模式思考

    引言发布-订阅模式Publish-Subscribe Pattern)是一种软件架构设计模式,属于行为型设计模式,用于解耦生产者(发布者)和消费者(订阅者)之间关系。...类似地,发布-订阅模式中,发布者负责发布消息,而订阅者则根据自己兴趣订阅相应消息。...通过将生产者和消费者解耦,发布-订阅模式实现了更高效、灵活信息传递和处理方式。自发布以来,发布-订阅模式得到了广泛应用和发展。...发布-订阅模式中,有两主要角色:发布者和订阅者。发布者负责发布消息,而订阅者则负责订阅这些消息并对其进行处理。这种模式优点在于它能够提高系统可扩展性、灵活性和可维护性。...总结作为一名程序员,我知发布-订阅模式Publish-Subscribe Pattern)软件设计中重要性。

    36720

    Apache Kafka-初体验Kafka(01)-入门整体认识kafka

    每个consumer是基于自己commit log中消费进度(offset)来进行工作。...kafka中,消费offset由consumer自己来维护;一般情况下我们按照顺序逐条消费commit log中消息,当然我可以通过指定offset来重复消费某些消息,或者跳过某些消息。...---- Consumers 传统消息传递模式有2种:队列( queue) 和(publish-subscribe) queue模式:多个consumer从服务器中读取数据,消息只会到达一consumer...publish-subscribe模式消息会被广播给所有的consumer。 Kafka基于这2种模式提供了一种consumer抽象概念: consumer group 。...queue模式:所有的consumer都位于同一consumer group 下。 publish-subscribe模式:所有的consumer都有着自己唯一consumer group。 ?

    25140

    kafka官方文档_kafka groupid

    较高层次上看,生产者通过网络发送消息到Kafka集群,Kafka集群将这些消息提供给消费者,如下图: 客户端与服务器之间通信通过一简单、高性能、语言无关TCP protocol....Kafka有Java 客户端,但这客户端很多语言many languages也是有效. 主题(Topics)、日志(Logs) 一主题就是消息类别或名称。...这可以通过简单循环方式来实现,或者使用一些分区方法(比如根据消息key来分区) 消费者(Consumers) 传统消息传递有两种方式: 队列(queuing)、发布-订阅(publish-subscribe...如果所有的消费者同一组里,这就相当于队列方式,消费者负载均衡。...如果消费者不同组里,这就相当于发布-订阅方式,所有的消息将被广播到所有的消费者

    1K20

    这是目前最快 Java 框架

    Vert.x是一多语言 Web 框架,它支持Java,Kotlin,Scala,Ruby和Javascript支持语言之间共同功能。无论语言如何,Vert.x都在Java虚拟机(JVM)上运行。...Java必备 15 框架,推荐看下。 要连接到数据库,客户端需要连接器驱动程序。Java领域,Sql最常见驱动程序是JDBC。问题是,这个驱动程序阻塞了。它在套接字级别阻塞。...使用并发时,我们可以从如今许多选项中获取,例如Promise,Future,Rx,以及Vert.x自己惯用方法。但随着应用程序复杂性增加,单独使用异步功能是不够。...这是一项艰巨任务。因此,坚持核心将是最好。 如果您正在开发公共API,那么vertx-core就足够了。...使用vertx-web一些测试中,性能有所下降,但由于它似乎源于优化,因此可能会在后续版本中得到解决。 大家有用 Vert.x

    3K10

    2021年大数据Flink(四十六):扩展阅读 异步IO

    这是一种同步访问方式,如下图所示 左图所示:通常实现方式是向数据库发送用户a查询请求(例如在MapFunction中),然后等待结果返回,在这之前,我们无法发送用户b查询请求,这是一种同步访问模式...;     } } /**  * 使用高性能异步组件vertx实现类似于连接池功能,效率比连接池要高  * 1)java版本中可以直接使用  * 2)如果在scala版本中使用的话,需要scala版本是...EventTime中,以watermark为边界,介于两watermark之间消息可以乱序,但是watermark和消息之间不能乱序,这样既认为无序中又引入了有序,这样就有了与有序一样开销。...实际上 AsyncCollector 是一 Promise ,也就是 P5,调用 collect 时候会标记 Promise 为完成状态,并通知 Emitter 线程有完成消息可以发送了。...Emitter 就会从队列中拉取完成 Promise ,并从 Promise 中取出消息发送给下游。 ​​​​​​​消息顺序性 上文提到 Async I/O 提供了两种输出模式

    1.4K20

    kafka入门介绍

    ,即生产者生产(produce)各种信息,消费者消费(consume)(处理分析)这些信息,而在生产者与消费者之间,需要一沟通两者桥梁-消息系统。...Producers: Producer可以根据自己选择发布消息到一主题,Producer也可以自己决定把消息发布到这个主题哪个Partition,当然我们可以选择API提供简单分区选择算法,也可以自己去实现一分区选择算法...Consumers: 消息传递通常由两种模式,queuing(队列)和publish-subscribe发布-订阅) queuing:每个Consumer从消息队列中取走一消息 pub-scrib...Consumer实例需要给自己指定一ConsumerGroup名字,如果所有的实例都用同一ConsumerGroup名字,那么这些Consumer就会以queuing模式工作;如果所有的实例分别用不同...,两Consumer Group,Group内部是以queuing模式消费Partition,Group之间是以pub-scrib模式消费。

    59560

    常用消息队列介绍和对比

    consumer:消息消费者,就是接受消息程序。   channel:消息通道,客户端每个连接里,可建立多个channel,每个channel代表一会话任务。...Kafka是一种高吞吐量分布式发布订阅消息系统,它可以处理消费者规模网站中所有动作流数据。 这种动作(网页浏览,搜索和其他用户行动)是现代网络上许多社会功能关键因素。...这些数据通常是由于吞吐量要求而通过处理日志和日志聚合来解决。 对于像Hadoop一样日志数据和离线分析系统,但又要求实时处理限制,这是可行解决方案。...Producer 负责发布消息到Kafka broker Consumer 消息消费者,向Kafka broker读取消息客户端。...6 Apollo Apache ActiveMQ 是一非常流行、强大、开源消息和集成模式(Integration Patterns)服务器,速度快、支持多种跨语言客户端和协议,易于使用企业集成模式

    4.4K51

    我开源了一套 RPC 框架,学爆它!

    简单理解,新开了一家卖鱼皮熟食店,现在你作为消费者想要把鱼皮购买到家。如果是以前,你只能自己跑腿到线下店铺购买,耗时耗力。...回到 RPC 概念,RPC 允许一程序(称为服务消费者)像调用自己程序方法一样,调用另一程序(称为服务提供者)接口,而不需要了解数据传输处理过程、底层网络通信细节等。...可以基于代理模式,为消费者要调用接口生成一代理对象,由代理对象完成请求和响应过程。 所谓代理,就是有人帮你做一些事情,不用自己操心。...四、测试验证 1)以 debug 模式启动服务提供者,执行 main 方法: 2)以 debug 模式启动服务消费者,执行 main 方法。...6)最后,服务提供者和消费者模块中都输出了用户名称,说明整个调用过程成功。 以上,就是本期教程。麻雀虽小,五脏俱全。大家一定要自己动手实现,印象才会更深刻。

    51110

    java观察者模式

    软件系统中,当一对象行为依赖于另一对象状态时,观察者模式就相当有用。...当然下面的例子都是基于一进程内观察者模式举例,你可能会和我当初一样不解,消息队列中消费者是通过socket进行通信得到订阅主题信息。...其实还是一回事,被观察者(主题)里面会维护一与它有订阅所有消费者连接,当被观察者(主题)里面添加一消息时,就会调用自身方法,把该消息通过维持socket发送给所有订阅消费者。   ...下次再跳槽,我就不是仅仅调侃我掌握kafka等消息队列特性了,我又可以结合设计模式来侃我对消息队列理解,这个逼吹响亮吧。     观察者模式可以用于事件监听,通知发布等场合。...作为对这个通知响应,每个观察者都将即时更新自己状态,以与目标状态同步,这种交互也称为发布-订阅(publish-subscribe)。

    51820

    设计模式之订阅发布模式

    一、简介 订阅发布模式Publish-Subscribe Pattern)是一种行之有效解耦框架与业务逻辑方式,也是一种常见观察者设计模式,它被广泛应用于事件驱动架构中。...他们彼此唯一关系就是调度中心注册成为订阅者或者发布者。 当一发布者有新消息时,就将这个消息发布到调度中心。调度中心就会将这个消息通知给所有订阅者。...订阅发布模式有以下优点: 性能好,发布者发送消息后直接返回不需要等待消费者处理完毕。 解耦性较强,发布者和订阅者之间不存在直接依赖,满足高内聚低耦合设计思想。...可以支持一对多、多对多消息通信模型,提供了更加灵活消息传递方式。 可以动态地增加或删除发布者和订阅者,扩展性较好。 二、Java实现发布订阅模式 创建订阅者接口,用于接受消息通知。...foo@example.com: 发布消息2 三、Spring中自带订阅发布模式 Spring订阅发布模式是通过发布事件、事件监听器和事件发布器3部分来完成 这里我们通过 newbee-mall-pro

    68420

    设计模式之订阅发布模式

    一、简介 订阅发布模式Publish-Subscribe Pattern)是一种行之有效解耦框架与业务逻辑方式,也是一种常见观察者设计模式,它被广泛应用于事件驱动架构中。...他们彼此唯一关系就是调度中心注册成为订阅者或者发布者。 当一发布者有新消息时,就将这个消息发布到调度中心。调度中心就会将这个消息通知给所有订阅者。...订阅发布模式有以下优点: 性能好,发布者发送消息后直接返回不需要等待消费者处理完毕。 解耦性较强,发布者和订阅者之间不存在直接依赖,满足高内聚低耦合设计思想。...可以支持一对多、多对多消息通信模型,提供了更加灵活消息传递方式。 可以动态地增加或删除发布者和订阅者,扩展性较好。 二、Java实现发布订阅模式 创建订阅者接口,用于接受消息通知。...to foo@example.com: 发布消息2 三、Spring中自带订阅发布模式 Spring订阅发布模式是通过发布事件、事件监听器和事件发布器3部分来完成 这里我们通过 newbee-mall-pro

    36310

    消息队列|RabbitMQ入门概述

    队列: 队列是 RabbitMQ 内部使用一种数据结构,尽管消息流经 RabbitMQ 和应用程序,但它们只能存储队列中。队列仅受主机内存和磁盘限制约束,本质上是一消息缓冲区。...许多生产者可以将消息发送到一队列,许多消费者可以尝试从一队列接收数据。这就是我们使用队列方式。 消费者: 消费与接收具有相似的含义。消费者大多时候是一等待接收消息程序。...请注意生产者,消费者消息中间件很多时候并不在同一机器上。同一应用程序既可以是生产者又是可以是消费者。...当多个不同用户使用同一 RabbitMQ server 提供服务时,可以划分出多个 vhost,每个用户自己 vhost 创建 exchange/queue 等 Connection:publisher...四、RabbitMQ核心模块 RabbitMQ提供了六种工作模式:简单模式、work queues、发布订阅模式、路由模式、主题模式、RPC远程调用模式

    39730

    第三章· Redis消息队列

    消息队列(Message Queue)是一种应用间通信方式,消息发送后可以立即返回,有消息系统来确保信息可靠专递,消息生产者只管把消息发布到MQ中而不管谁来取,消息消费者只管从MQ中取消息而不管谁发布...OpenStack) 2)Zero-MQ(SaltStack) 3)Kafka(JAVA) 4)redis(key:value数据库,缓存,消息队列) ---- 二.Redis发布消息两种模式...任务队列好处 1)松耦合。 生产者和消费者只需按照约定任务描述格式,进行编写代码。 2)易于扩展。 多消费者模式下,消费者可以分布多个不同服务器中,由此降低单台服务器负载。...---- 发布-订阅模式(publish-subscribe) 其实从Pub/Sub机制来看,它更像是一广播系统,多个订阅者(Subscriber)可以订阅多个频道(Channel),多个发布者(...查看订阅与发布系统状态 _注意:_使用发布订阅模式实现消息队列,当有客户端订阅channel后只能收到后续发布到该频道消息,之前发送不会缓存,必须Provider和Consumer同时在线。

    30860

    消息中间件 Style

    消息中间件依照消息数据如何从生产者移动到消费者可提供多种不同“Style”,我们这里介始两种最常见Style: 消息队列方式(Message queuing) 和 发布订阅(publish-subscribe...IMG_20200212_143320 (2).jpg 到这里我们可以看到对于队列方式,同一topic各个消息是被各消费者分摊消息,为了防止消息被重复消费,通常在消费者获取到消息或处理完消息后对MQ...如果消息队列中消费堆积过多,我们可以通过扩容当前消费者,来增加消息消费吞吐量。 发布-订阅方式 ​ 发布-订阅方式,就是常说pub-sub方式。 ​...group看作是一整体,假设不存在内部consumer, 即把这个consumer group看作就是一consumer , 那不同consumer group消费数据就可看作是发布-订阅(pub-sub...)方式; 现在各种消息中间件很多很多,又存在不同style, 我们选择时候还是要根据自己业务需求来评估选择。

    52240
    领券