Spring Cloud构建微服务架构:消息驱动的微服务(消费组)【Dalston版】

通过之前的《消息驱动的微服务(入门)》一文,相信很多朋友已经对Spring Cloud Stream有了一个初步的认识。但是,对于《消息驱动的微服务(核心概念)》一文中提到的一些核心概念可能还有些迷糊,下面我们将详细的来学习一下这些概念。本文我们就来学习和使用一下“消费组”这一概念。

使用消费组实现消息消费的负载均衡

通常在生产环境,我们的每个服务都不会以单节点的方式运行在生产环境,当同一个服务启动多个实例的时候,这些实例都会绑定到同一个消息通道的目标主题(Topic)上。

默认情况下,当生产者发出一条消息到绑定通道上,这条消息会产生多个副本被每个消费者实例接收和处理,但是有些业务场景之下,我们希望生产者产生的消息只被其中一个实例消费,这个时候我们需要为这些消费者设置消费组来实现这样的功能,实现的方式非常简单,我们只需要在服务消费者端设置spring.cloud.stream.bindings.input.group属性即可,比如我们可以这样实现:

  • 先创建一个消费者应用SinkReceiver,实现了greetings主题上的输入通道绑定,它的实现如下:
@EnableBinding(value = {Sink.class})
public class SinkReceiver {

private static Logger logger = LoggerFactory.getLogger(SinkReceiver.class);

@StreamListener(Sink.INPUT)
public void receive(User user) {
logger.info("Received: " + user);
}
}
  • 为了将SinkReceiver的输入通道目标设置为greetings主题,以及将该服务的实例设置为同一个消费组,做如下设置:
spring.cloud.stream.bindings.input.group=Service-A
spring.cloud.stream.bindings.input.destination=greetings

通过spring.cloud.stream.bindings.input.group属性指定了该应用实例都属于Service-A消费组,而spring.cloud.stream.bindings.input.destination属性则指定了输入通道对应的主题名。

  • 完成了消息消费者之后,我们再来实现一个消息生产者应用SinkSender,具体如下:
@EnableBinding(value = {Source.class})
public class SinkSender {

private static Logger logger = LoggerFactory.getLogger(SinkSender.class);

@Bean
@InboundChannelAdapter(value = Source.OUTPUT, poller = @Poller(fixedDelay = "2000"))
public MessageSource<String> timerMessageSource() {
return () -> new GenericMessage<>("{\"name\":\"didi\", \"age\":30}");
}

}
  • 为消息生产者SinkSender做一些设置,让它的输出通道绑定目标也指向greetings主题,具体如下:
spring.cloud.stream.bindings.output.destination=greetings

到这里,对于消费分组的示例就已经完成了。分别运行上面实现的生产者与消费者,其中消费者我们启动多个实例。通过控制台,我们可以发现每个生产者发出的消息,会被启动的消费者以轮询的方式进行接收和输出。

以下专题教程也许您会有兴趣

  • Spring Boot基础教程
  • Spring Cloud基础教程

本文内容部分节选自我的《Spring Cloud微服务实战》,稍作改变和内容升级


money.jpg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/477590.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文浅尝 | C3KG:中文常识对话知识图谱

笔记整理&#xff1a;张廉臣&#xff0c;东南大学硕士&#xff0c;研究方向为自然语言处理。Citation: Li, D., Li, Y., Zhang, J., Li, K., Wei, C., Cui, J., & Wang, B. (2022). C3KG: A Chinese Commonsense Conversation Knowledge Graph. arXiv preprint arXiv:2204.…

Spring Cloud构建微服务架构:消息驱动的微服务(核心概念)【Dalston版】

通过《Spring Cloud构建微服务架构&#xff1a;消息驱动的微服务&#xff08;入门&#xff09;》一文&#xff0c;相信大家对Spring Cloud Stream的工作模式已经有了一些基础概念&#xff0c;比如&#xff1a;输入、输出通道的绑定&#xff0c;通道消息事件的监听等。下面在本文…

大模型时代,我们真的不再需要分词了吗?

文 | 付奶茶编 | 小轶分词是NLP的基础任务&#xff0c;将句子、段落分解为字词单位&#xff0c;方便后续的处理的分析。不知道NLPer有没有思考过这个问题:我们在各项研究工作中想要建模的文本单位究竟是什么?What are the units of text that we want to model?在这篇论文中,…

LeetCode 1190. 反转每对括号间的子串(栈)

1. 题目 给出一个字符串 s&#xff08;仅含有小写英文字母和括号&#xff09;。 请你按照从括号内到外的顺序&#xff0c;逐层反转每对匹配括号中的字符串&#xff0c;并返回最终的结果。 注意&#xff0c;您的结果中 不应 包含任何括号。 示例 1&#xff1a; 输入&#xf…

论文浅尝 | 探索用于归纳型知识图谱补全的关系语义

笔记整理&#xff1a;徐雅静&#xff0c;浙江大学在读硕士&#xff0c;研究方向为知识图谱的表示学习&#xff0c;零样本学习。KGC指的是在不完整的KG中推理出缺失的实体。以前的多数工作仅仅考虑到直推式场景&#xff08;实体都存在KG中&#xff09;&#xff0c;不能有效地解决…

关于深度学习,我们写了一本1400页的全栈手册

不知不觉写文章已经四年了。最开始是一个人&#xff0c;后来恰了恰饭&#xff0c;就招揽了很多比小夕厉害的小伙伴一起写。不知不觉已经积累了300多篇了。。三年以来&#xff0c;我跟小伙伴们原创的300篇深度学习与NLP领域的入门资料、子方向综述、2018~2022学术前沿解读、工业…

LeetCode 1019. 链表中的下一个更大节点(单调栈)

1. 题目 给出一个以头节点 head 作为第一个节点的链表。链表中的节点分别编号为&#xff1a;node_1, node_2, node_3, … 。 每个节点都可能有下一个更大值&#xff08;next larger value&#xff09;&#xff1a;对于 node_i&#xff0c;如果其 next_larger(node_i) 是 node…

Spring Cloud Hystrix的请求合并

通常微服务架构中的依赖通过远程调用实现&#xff0c;而远程调用中最常见的问题就是通信消耗与连接数占用。在高并发的情况之下&#xff0c;因通信次数的增加&#xff0c;总的通信时间消耗将会变的不那么理想。同时&#xff0c;因为对依赖服务的线程池资源有限&#xff0c;将出…

LeetCode 306. 累加数(暴力回溯)

1. 题目 累加数是一个字符串&#xff0c;组成它的数字可以形成累加序列。 一个有效的累加序列必须至少包含 3 个数。除了最开始的两个数以外&#xff0c;字符串中的其他数都等于它之前两个数相加的和。 给定一个只包含数字 ‘0’-‘9’ 的字符串&#xff0c;编写一个算法来判…

关于深度学习,我们4年时间写了一本1400页的全栈手册

不知不觉写文章已经四年多了。最开始是一个人&#xff0c;后来恰了恰饭&#xff08;感恩理解&#xff09;&#xff0c;就招揽了很多比小夕厉害的小伙伴一起写。不知不觉已经积累了300多篇了。。四年以来&#xff0c;我跟小伙伴们原创的300篇深度学习领域&#xff08;含NLP、CV等…

会议交流 | 第十六届全国知识图谱与语义计算大会(工业界论坛)——8月24日-27日...

点击阅读原文&#xff0c;进入 CCKS 官方网站。OpenKGOpenKG&#xff08;中文开放知识图谱&#xff09;旨在推动以中文为核心的知识图谱数据的开放、互联及众包&#xff0c;并促进知识图谱算法、工具及平台的开源开放。

消费者驱动的微服务契约测试套件Spring Cloud Contract

在微服务架构下&#xff0c;你的服务可能由不同的团队提供和维护&#xff0c;在这种情况下&#xff0c;接口的开发和维护可能会带来一些问题&#xff0c;比如服务端调整架构或接口调整而对消费者不透明&#xff0c;导致接口调用失败。 为解决这些问题&#xff0c;Ian Robinson…

LeetCode 842. 将数组拆分成斐波那契序列(暴力查找)

1. 题目 给定一个数字字符串 S&#xff0c;比如 S “123456579”&#xff0c;我们可以将它分成斐波那契式的序列 [123, 456, 579]。 形式上&#xff0c;斐波那契式序列是一个非负整数列表 F&#xff0c;且满足&#xff1a; 0 < F[i] < 2^31 - 1&#xff0c;&#xff…

做CV和做NLP,是否都有光明的未来?

本文授权转载自公众号“算法圈的小破事”&#xff0c;点击以上卡片进行关注大家好&#xff0c;我是在互联网危险边缘疯狂试探的皮皮虾。最近有点忙&#xff0c;拖更了&#xff0c;不知道有没有读者惦记皮皮虾推文呢&#xff08;目测没有TT&#xff09;。首先祭出新华字典的老图…

论文浅尝 | 知识表示、多模态融合、搜索匹配三大方向探索——360人工智能研究院知识图谱算法团队...

转载公众号 | 老刘说NLP当前以促进技术发展、提升模型指标&#xff0c;探究模型天花板的竞赛越来越多&#xff0c;也逐步成为各大研究机构、互联网大厂竞相角逐的主战场。自2022年以来&#xff0c;在组员的共同努力下&#xff0c;团队(360人工智能研究院知识图谱算法团队)&…

Spring Cloud Zuul重试机制探秘

简介 本文章对应spring cloud的版本为(Dalston.SR4)&#xff0c;具体内容如下&#xff1a; 开启Zuul功能通过源码了解Zuul的一次转发怎么开启zuul的重试机制Edgware.RC1版本的优化 开启Zuul的功能 首先如何使用spring cloud zuul完成路由转发的功能&#xff0c;这个问题很简…

论文浅尝 | PASSLEAF: 一个用于不确定知识图谱嵌入的基于样本池的半监督学习框架...

笔记整理&#xff1a;杨露露&#xff0c;天津大学硕士链接&#xff1a;https://ojs.aaai.org/index.php/AAAI/article/view/16522/16329动机在不确定知识图谱的嵌入中&#xff0c;实体之间的每个关系都有一个置信度。鉴于现有的嵌入方法可能会丢弃不确定性信息&#xff0c;或只…

LeetCode 60. 第k个排列(回溯 康托展开)

文章目录1. 题目2. 解题2.1 回溯2.2 数学-康托展开1. 题目 给出集合 [1,2,3,…,n]&#xff0c;其所有元素共有 n! 种排列。 按大小顺序列出所有排列情况&#xff0c;并一一标记&#xff0c;当 n 3 时, 所有排列如下&#xff1a; “123” “132” “213” “231” “312” “…

我在谷歌实习时发现了一个模型 bug,于是有了这篇 ACL

文 | AlbertYang编 | 小轶表格的自动理解与检索已经成为 NLP 以及多模态任务中重要的一环。如果我们给模型一个冬奥会的奖牌榜并且问&#xff0c;“哪个国家的金牌最多&#xff1f;”&#xff0c;现有的模型已经可以毫不费力地输出正确的答案&#xff08;通常都是表格首行的国家…

Spring Cloud Zuul的fallback优化

如何在Zuul中使用fallback功能 我们在项目中使用Spring cloud zuul的时候&#xff0c;有一种这样的需求&#xff0c;就是当我们的zuul进行路由分发时&#xff0c;如果后端服务没有启动&#xff0c;或者调用超时&#xff0c;这时候我们希望Zuul提供一种降级功能&#xff0c;而不…