您好,登錄后才能下訂單哦!
本篇內容主要講解“消息驅動Spring Cloud Stream怎么配置”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“消息驅動Spring Cloud Stream怎么配置”吧!
在使用spring cloud云架構的時候,我們不得不使用Spring cloud Stream,因為消息中間件的使用在項目中無處不在,我們公司后面做了娛樂方面的APP,在使用spring cloud做架構的時候,其中消息的異步通知,業務的異步處理都需要使用消息中間件機制。spring cloud的官方給出的集成建議(使用rabbit mq和kafka),我看了一下源碼和配置,只要把rabbit mq集成,kafka只是換了一個pom配置jar包而已,閑話少說,我們就直接進入配置實施:
1. 簡介:
Spring cloud Stream 數據流操作開發包,封裝了與Redis,Rabbit、Kafka等發送接收消息。
2. 使用工具:
rabbit,具體的下載和安裝細節我這里不做太多講解,網上的實例太多了
3. 創建commonservice-mq-producer消息的發送者項目,在pom里面配置stream-rabbit的依賴
<span style="font-size: 16px;"><!-- 引入MQ消息驅動的微服務包,引入stream只需要進行配置化即可,是對rabbit、kafka很好的封裝 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-stream-rabbit</artifactId> </dependency></span>
4. 在yml文件里面配置rabbit mq
<span style="font-size: 16px;">server: port: 5666 spring: application: name: commonservice-mq-producer profiles: active: dev cloud: config: discovery: enabled: true service-id: commonservice-config-server <span style="color: #ff0000;"># rabbitmq和kafka都有相關配置的默認值,如果修改,可以再次進行配置 stream: bindings: mqScoreOutput: destination: honghu_exchange contentType: application/json rabbitmq: host: localhost port: 5672 username: honghu password: honghu</span> eureka: client: service-url: defaultZone: http://honghu:123456@localhost:8761/eureka instance: prefer-ip-address: true</span>
5. 定義接口ProducerService
<span style="font-size: 16px;">package com.honghu.cloud.producer; import org.springframework.cloud.stream.annotation.Output; import org.springframework.messaging.SubscribableChannel; public interface ProducerService { String SCORE_OUPUT = "mqScoreOutput"; @Output(ProducerService.SCORE_OUPUT) SubscribableChannel sendMessage(); }</span>
6. 定義綁定
<span style="font-size: 16px;">package com.honghu.cloud.producer; import org.springframework.cloud.stream.annotation.EnableBinding; @EnableBinding(ProducerService.class) public class SendServerConfig { }</span>
7. 定義發送消息業務ProducerController
<span style="font-size: 16px;">package com.honghu.cloud.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.integration.support.MessageBuilder; import org.springframework.messaging.Message; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import com.honghu.cloud.common.code.ResponseCode; import com.honghu.cloud.common.code.ResponseVO; import com.honghu.cloud.entity.User; import com.honghu.cloud.producer.ProducerService; import net.sf.json.JSONObject; @RestController @RequestMapping(value = "producer") public class ProducerController { @Autowired private ProducerService producerService; /** * 通過get方式發送</span>對象<span style="font-size: 16px;"> * @param name 路徑參數 * @return 成功|失敗 */ @RequestMapping(value = "/sendObj", method = RequestMethod.GET) public ResponseVO sendObj() { User user = new User(1, "hello User"); <span style="color: #ff0000;">Message<User> msg = MessageBuilder.withPayload(user).build();</span> boolean result = producerService.sendMessage().send(msg); if(result){ return ResponseCode.buildEnumResponseVO(ResponseCode.RESPONSE_CODE_SUCCESS, false); } return ResponseCode.buildEnumResponseVO(ResponseCode.RESPONSE_CODE_FAILURE, false); } /** * 通過get方式發送字符串消息 * @param name 路徑參數 * @return 成功|失敗 */ @RequestMapping(value = "/send/{name}", method = RequestMethod.GET) public ResponseVO send(@PathVariable(value = "name", required = true) String name) { Message msg = MessageBuilder.withPayload(name.getBytes()).build(); boolean result = producerService.sendMessage().send(msg); if(result){ return ResponseCode.buildEnumResponseVO(ResponseCode.RESPONSE_CODE_SUCCESS, false); } return ResponseCode.buildEnumResponseVO(ResponseCode.RESPONSE_CODE_FAILURE, false); } /** * 通過post方式發送</span>json對象<span style="font-size: 16px;"> * @param name 路徑參數 * @return 成功|失敗 */ @RequestMapping(value = "/sendJsonObj", method = RequestMethod.POST) public ResponseVO sendJsonObj(@RequestBody JSONObject jsonObj) { Message<JSONObject> msg = MessageBuilder.withPayload(jsonObj).build(); boolean result = producerService.sendMessage().send(msg); if(result){ return ResponseCode.buildEnumResponseVO(ResponseCode.RESPONSE_CODE_SUCCESS, false); } return ResponseCode.buildEnumResponseVO(ResponseCode.RESPONSE_CODE_FAILURE, false); } } </span>
8. 創建commonservice-mq-consumer1消息的消費者項目,在pom里面配置stream-rabbit的依賴
<!-- 引入MQ消息驅動的微服務包,引入stream只需要進行配置化即可,是對rabbit、kafka很好的封裝 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-stream-rabbit</artifactId> </dependency>
9. 在yml文件中配置:
server: port: 5111 spring: application: name: commonservice-mq-consumer1 profiles: active: dev cloud: config: discovery: enabled: true service-id: commonservice-config-server <span style="color: #ff0000;">stream: bindings: mqScoreInput: group: honghu_queue destination: honghu_exchange contentType: application/json rabbitmq: host: localhost port: 5672 username: honghu password: honghu</span> eureka: client: service-url: defaultZone: http://honghu:123456@localhost:8761/eureka instance: prefer-ip-address: true
10. 定義接口ConsumerService
package com.honghu.cloud.consumer; import org.springframework.cloud.stream.annotation.Input; import org.springframework.messaging.SubscribableChannel; public interface ConsumerService { <span style="color: #ff0000;">String SCORE_INPUT = "mqScoreInput"; @Input(ConsumerService.SCORE_INPUT) SubscribableChannel sendMessage();</span> }
11. 定義啟動類和消息消費
package com.honghu.cloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.cloud.stream.annotation.EnableBinding; import org.springframework.cloud.stream.annotation.StreamListener; import com.honghu.cloud.consumer.ConsumerService; import com.honghu.cloud.entity.User; @EnableEurekaClient @SpringBootApplication @EnableBinding(ConsumerService.class) //可以綁定多個接口 public class ConsumerApplication { public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class, args); } <span style="color: #ff0000;">@StreamListener(ConsumerService.SCORE_INPUT) public void onMessage(Object obj) { System.out.println("消費者1,接收到的消息:" + obj); }</span> }
12. 分別啟動commonservice-mq-producer、commonservice-mq-consumer1
13. 通過postman來驗證消息的發送和接收
到此,相信大家對“消息驅動Spring Cloud Stream怎么配置”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。