SpringCloud学习(二十一):Stream的分组消费与持久化

简介: SpringCloud学习(二十一):Stream的分组消费与持久化

一、分组消费


     

1、依照8802克隆出一个8803


cloud-stream-rabbitmq-consumer8803

   

2、运行发现问题

     

启动服务注册eureka7001、rabbitmq、消息生产者8801、消息消费者8802、8803


访问           http://localhost:8801/sendMessage        刷新两次,发送两条消息


291013299ff34caeb0f5dabbf83f788c.pngb426707129ce432c9696ef575c6f8dc6.png034439e15435459eb181a931b46ae8c7.png


可以看到,8802和8803都收到了消息。

     

但事实上一条消息只能由一个消费者消费,这就是重复消费问题。

     

3、如何解决


进入rabbitmq的exchanges中可以看到,我们的8802和8803默认在不同的分组.


019177ce129944a182ecafb092123d96.png

微服务应用放置于同一个group中,就能够保证消息只会被其中一个应用消费一次。

不同的组是可以消费的,同一个组内会发生竞争关系,只有其中一个可以消费。

       

假如我们不想让8802和8803重复接到消息,只想让消息被他们其中的一个接收,只需要为他们指定相同的分组即可。

1085c1dde6f040c39fb587f51f0791ec.png

再次测试:

b549670413bd4dcf9b967148d24af32c.png7b65a743195e47abb43c5e4405150fdb.png1d988560f30c43b88acb96ba05aa3146.png


可以看到,生产者8801发出的消息只会被8802和8803中的一个接收(默认为轮询)。


二、消息持久化



     

现在我们将8802中的分组去掉,保留8803中的分组 。然后关闭8802和8803,只剩下eureka7001和生产者8801在运行。


此时刷新        http://localhost:8801/sendMessage        4次。

ed4e19eaa713457980580f663421be1e.png


然后再运行消费者8802和8803。

     

可以看到,即使在8801发送消息的时候8803并没有运行,但有分组属性的8803后台还是打印出了消息;

be64ad8b0b74424fb3c66f7508df33db.png


而没有分组属性的8802则没有打印出消息。

     

这个现象就被成为消息持久化。

目录
打赏
0
0
0
0
178
分享
相关文章
微服务——SpringBoot使用归纳——为什么学习Spring Boot
本文主要探讨为什么学习Spring Boot。从Spring官方定位来看,Spring Boot旨在快速启动和运行项目,简化配置与编码。其优点包括:1) 良好的基因,继承了Spring框架的优点;2) 简化编码,通过starter依赖减少手动配置;3) 简化配置,采用Java Config方式替代繁琐的XML配置;4) 简化部署,内嵌Tomcat支持一键式启动;5) 简化监控,提供运行期性能参数获取功能。此外,从未来发展趋势看,微服务架构逐渐成为主流,而Spring Boot作为官方推荐技术,与Spring Cloud配合使用,将成为未来发展的重要方向。
16 0
微服务——SpringBoot使用归纳——为什么学习Spring Boot
Spring Cloud Alibaba与Spring Cloud区别和联系?
Spring Cloud Alibaba与Spring Cloud区别和联系?
🛡️Spring Boot 3 整合 Spring Cloud Gateway 工程实践
本文介绍了如何使用Spring Cloud Alibaba 2023.0.0.0技术栈构建微服务网关,以应对微服务架构中流量治理与安全管控的复杂性。通过一个包含鉴权服务、文件服务和主服务的项目,详细讲解了网关的整合与功能开发。首先,通过统一路由配置,将所有请求集中到网关进行管理;其次,实现了限流防刷功能,防止恶意刷接口;最后,添加了登录鉴权机制,确保用户身份验证。整个过程结合Nacos注册中心,确保服务注册与配置管理的高效性。通过这些实践,帮助开发者更好地理解和应用微服务网关。
96 0
🛡️Spring Boot 3 整合 Spring Cloud Gateway 工程实践
【Azure Kafka】使用Spring Cloud Stream Binder Kafka 发送并接收 Event Hub 消息及解决并发报错
reactor.core.publisher.Sinks$EmissionException: Spec. Rule 1.3 - onSubscribe, onNext, onError and onComplete signaled to a Subscriber MUST be signaled serially.
AI 时代:从 Spring Cloud Alibaba 到 Spring AI Alibaba
本次分享由阿里云智能集团云原生微服务技术负责人李艳林主讲,主题为“AI时代:从Spring Cloud Alibaba到Spring AI Alibaba”。内容涵盖应用架构演进、AI agent框架发展趋势及Spring AI Alibaba的重磅发布。分享介绍了AI原生架构与传统架构的融合,强调了API优先、事件驱动和AI运维的重要性。同时,详细解析了Spring AI Alibaba的三层抽象设计,包括模型支持、工作流智能体编排及生产可用性构建能力,确保安全合规、高效部署与可观测性。最后,结合实际案例展示了如何利用私域数据优化AI应用,提升业务价值。
252 4
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
244 5
Spring生态学习路径与源码深度探讨
【11月更文挑战第13天】Spring框架作为Java企业级开发中的核心框架,其丰富的生态系统和强大的功能吸引了无数开发者的关注。学习Spring生态不仅仅是掌握Spring Framework本身,更需要深入理解其周边组件和工具,以及源码的底层实现逻辑。本文将从Spring生态的学习路径入手,详细探讨如何系统地学习Spring,并深入解析各个重点的底层实现逻辑。
109 9
SpringBoot学习
【10月更文挑战第7天】Spring学习
59 9
Dubbo学习圣经:从入门到精通 Dubbo3.0 + SpringCloud Alibaba 微服务基础框架
尼恩团队的15大技术圣经,旨在帮助开发者系统化、体系化地掌握核心技术,提升技术实力,从而在面试和工作中脱颖而出。本文介绍了如何使用Dubbo3.0与Spring Cloud Gateway进行整合,解决传统Dubbo架构缺乏HTTP入口的问题,实现高性能的微服务网关。
学习Spring框架特性及jiar包下载
Spring 5作为最新版本,更新了JDK基线至8,修订了核心框架,增强了反射和接口功能,支持响应式编程及Kotlin语言,引入了函数式Web框架,并提升了测试功能。Spring框架可在其官网下载,包括文档、jar包和XML Schema文档,适用于Java SE和Java EE项目。
66 0