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
到这里,对于消费分组的示例就已经完成了。分别运行上面实现的生产者与消费者,其中消费者我们启动多个实例。通过控制台,我们可以发现每个生产者发出的消息,会被启动的消费者以轮询的方式进行接收和输出。
博客原文:http://blog.didispace.com/spring-cloud-starter-dalston-7-3/
本文内容部分节选自我的《Spring Cloud微服务实战》
但对依赖的Spring Boot和Spring Cloud版本做了升级。
更多Spring Cloud干货戳 ==> 这里
推荐阅读
微服务2017年度报告出炉:4大客户画像,15%传统企业已领跑
Netflix 的上线工具 Spinnaker
长按指纹
一键关注
点击 “阅读原文” 看看本号其他精彩内容
Spring Cloud构建微服务架构:消息驱动的微服务(消费组)【Dalston版】相关推荐
- Spring Cloud实战小贴士:Zuul统一异常处理(三)【Dalston版】
本篇作为<Spring Cloud微服务实战>一书关于Spring Cloud Zuul网关在Dalston版本对异常处理的补充.没有看过本书的读书也不要紧,可以先阅读我之前的两篇博文:& ...
- Spring Cloud Stream同一通道根据消息内容分发不同的消费逻辑
应用场景 有的时候,我们对于同一通道中的消息处理,会通过判断头信息或者消息内容来做一些差异化处理,比如:可能在消息头信息中带入消息版本号,然后通过if判断来执行不同的处理逻辑,其代码结构可能是这样的: ...
- Spring Cloud构建微服务架构:消息驱动的微服务(核心概念)【Dalston版】
通过<Spring Cloud构建微服务架构:消息驱动的微服务(入门)>一文,相信大家对Spring Cloud Stream的工作模式已经有了一些基础概念,比如:输入.输出通道的绑定,通 ...
- Spring Cloud构建微服务架构:服务网关(基础)【Dalston版】
通过之前几篇Spring Cloud中几个核心组件的介绍,我们已经可以构建一个简略的(不够完善)微服务架构了.比如下图所示: 我们使用Spring Cloud Netflix中的Eureka实现了服务 ...
- Spring Cloud构建微服务架构:服务网关(路由配置)【Dalston版】
在上一篇<Spring Cloud构建微服务架构:服务网关(基础)>一文中,我们通过使用Spring Cloud Zuul构建了一个基础的API网关服务,同时也演示了Spring Clou ...
- Spring Cloud构建微服务架构:服务网关(过滤器)【Dalston版】
在前两篇文章:服务网关(基础).服务网关(路由配置)中,我们了解了Spring Cloud Zuul作为网关所具备的最基本功能:路由.本文我们将具体介绍一下Spring Cloud Zuul的另一项核 ...
- Spring Cloud构建微服务架构:消息驱动的微服务(消费分区)【Dalston版】
通过上一篇<消息驱动的微服务(消费组)>的学习,我们已经能够在多实例环境下,保证同一消息只被一个消费者实例进行接收和处理.但是,对于一些特殊场景,除了要保证单一实例消费之外,还希望那些具备 ...
- Spring Cloud构建微服务架构:消息驱动的微服务(入门)【Dalston版】
之前在写Spring Boot基础教程的时候写过一篇<Spring Boot中使用RabbitMQ>.在该文中,我们通过简单的配置和注解就能实现向RabbitMQ中生产和消费消息.实际上我 ...
- Spring Cloud构建微服务架构(七)消息总线(续:Kafka)
Spring Cloud Bus除了支持RabbitMQ的自动化配置之外,还支持现在被广泛应用的Kafka.在本文中,我们将搭建一个Kafka的本地环境,并通过它来尝试使用Spring Cloud B ...
最新文章
- C# 如何以参数的形式调用.exe程序
- python文件io是啥意思_Python文件IO(普通文件读写)
- Android移动开发之【Android实战项目】DAY6-安卓多线程
- python polygon函数_Python 人脸识别就多简单,看这个就够了!
- kali如何安装netcat_Netcat常用方法汇总
- 【python】入门学习(五)
- 初学WEB前端的建议,你不看给别人可惜了!
- URAL 1132 Square Root(二次剩余定理)题解
- iis swagger 部署_AspNet Core Api Restful +Swagger 发布IIS 实现微服务之旅 (二)
- 苹果系列产品如何保修-Apple官方回复
- VBox下频繁出现0x00000000指令引用的0x00000000内存,该内存不能为written:解决方案(附文件)
- chinaDRM会议简记
- html页面会出现浏览器崩溃,大规模WebGL应用引发浏览器崩溃的几种情况及解决办法...
- [C语言] PTA 7-55 查询水果价格
- XSS(跨站脚本攻击)相关内容总结整理
- python3分解质因数_Python 质因数分解的研究
- 华科大计算机系李瑞轩.,李瑞轩-智能与分布计算实验室
- taro Can‘t resolve ‘./style/index.scss‘ in ‘D:\projects\dev\self\myApp\node_modules\taro-ui\dist\wea
- linux resin 内存溢出,Resin服务器内存修改
- PR、AE软件使用操作
热门文章
- linux shell 文件路径 分解 解析 切分 ${str:a:b} 用法
- linux cmake 多线程 错误 undefined reference to 'pthread_create'
- HTTP/2 h2 协议简介
- linux 内核 proc_create 函数 内幕初探
- Linux Rootkit 系列三:实例详解 Rootkit 必备的基本功能
- 突破磁盘低级检测实现文件隐藏
- 有名管道(FIFO)实现无亲缘关系的客户服务器
- android 获取应用内存大小,如何在Android中获取当前内存使用量?
- html5怎么要文字飘起来,html分享之一个超级炫酷的-404飞起来了
- CMake常见指令总结