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 Cloud微服務實戰》,稍作改變和內容升級
相關文章
- Spring Cloud構建微服務架構:服務消費(Ribbon)【Dalston版】SpringCloud微服務架構
- Spring Cloud構建微服務架構服務消費RibbonSpringCloud微服務架構
- Spring Cloud構建微服務架構—服務消費(Feign)SpringCloud微服務架構
- Spring Cloud構建微服務架構服務消費-RibbonSpringCloud微服務架構
- Spring Cloud構建微服務架構—服務消費FeignSpringCloud微服務架構
- Spring Cloud構建微服務架構—服務消費RibbonSpringCloud微服務架構
- Spring Cloud構建微服務架構—服務消費基礎SpringCloud微服務架構
- Spring Cloud構建微服務架構(Feign)SpringCloud微服務架構
- Spring Cloud構建微服務架構—配置中心SpringCloud微服務架構
- Spring Cloud構建微服務架構-spring cloud服務監控中心SpringCloud微服務架構
- Spring Cloud構建微服務架構-服務閘道器SpringCloud微服務架構
- Spring Cloud構建微服務架構-Hystrix服務降級SpringCloud微服務架構
- 構建Spring Cloud微服務分散式雲架構SpringCloud微服務分散式架構
- Spring Cloud分散式微服務雲架構構建SpringCloud分散式微服務架構
- 訊息驅動式微服務:Spring Cloud Stream & RabbitMQ微服務SpringCloudMQ
- spring cloud微服務分散式雲架構-服務消費者FeignSpringCloud微服務分散式架構
- Spring Cloud構建微服務架構服務容錯保護SpringCloud微服務架構
- Spring Cloud構建微服務架構-Hystrix斷路器SpringCloud微服務架構
- Spring Cloud構建微服務架構—Hystrix斷路器SpringCloud微服務架構
- Spring Cloud構建微服務架構分散式配置中心SpringCloud微服務架構分散式
- spring cloud微服務分散式雲架構(三)-服務消費者(Feign)SpringCloud微服務分散式架構
- Spring Cloud雲服務架構 - 企業分散式微服務雲架構構建SpringCloud架構分散式微服務
- 微服務架構:構建PHP微服務生態微服務架構PHP
- 微服務架構:Dubbo VS Spring Cloud微服務架構SpringCloud
- spring cloud微服務架構設計SpringCloud微服務架構
- Spring Cloud 微服務架構進階SpringCloud微服務架構
- Spring Cloud構建分散式微服務雲架構基礎SpringCloud分散式微服務架構
- Spring Cloud構建微服務架構-Hystrix依賴隔離SpringCloud微服務架構
- Spring Cloud構建微服務架構Hystrix監控皮膚SpringCloud微服務架構
- Spring Cloud構建微服務架構—註冊與發現SpringCloud微服務架構
- Spring Cloud Spring Boot mybatis 企業分散式微服務雲(五)服務消費(Feign)【Dalston版】CloudSpring BootMyBatis分散式微服務
- Spring Cloud Spring Boot mybatis 企業分散式微服務雲(三)服務消費(基礎)【Dalston版】CloudSpring BootMyBatis分散式微服務
- Spring Cloud Spring Boot mybatis 企業分散式微服務雲(四)服務消費(Ribbon)【Dalston版】CloudSpring BootMyBatis分散式微服務
- 整合spring cloud雲服務架構 - 企業分散式微服務雲架構構建SpringCloud架構分散式微服務
- Spring Cloud構建微服務架構—服務閘道器過濾器SpringCloud微服務架構過濾器
- 如何構建微服務架構微服務架構
- Spring Cloud構建微服務架構:分散式配置中心(加密解密)SpringCloud微服務架構分散式加密解密
- spring cloud微服務分散式雲架構(二)-服務消費者(rest+ribbon)SpringCloud微服務分散式架構REST