Java springcloud B2B2C o2o多使用者商城-訊息驅動 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: 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: 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來驗證訊息的傳送和接收
可以看到接收到了訊息,下一章我們介紹mq的叢集方案。
到此,整個訊息中心方案整合完畢 需要原始碼可以求求:三五三六二四七二五九
歡迎大家和我一起學習spring cloud構建微服務雲架構,我這邊會將近期研發的spring cloud微服務雲架構的搭建過程和精髓記錄下來,幫助更多有興趣研發spring cloud框架的朋友,大家來一起探討spring cloud架構的搭建過程及如何運用於企業專案。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69952307/viewspace-2675859/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- (十七)Java springcloud B2B2C o2o多使用者商城 springcloud架構-訊息驅動 Spring Cloud StreamJavaSpringGCCloud架構
- (十七) Java版本多使用者B2B2C商城原始碼 -訊息驅動 Spring Cloud StreamJava原始碼SpringCloud
- java B2B2C Springboot多租戶電子商城系統-Spring Cloud Stream(訊息驅動)JavaSpring BootCloud
- java B2B2C Springcloud多租戶電子商城系統- Stream 構建訊息驅動微服務JavaSpringGCCloud微服務
- SpringCloud-Stream 訊息驅動SpringGCCloud
- SpringCloud(七)Stream訊息驅動SpringGCCloud
- 九. SpringCloud Stream訊息驅動SpringGCCloud
- Java springcloud B2B2C o2o多使用者商城-使用spring cloud Bus重新整理配置JavaSpringGCCloud
- (十七) 整合spring cloud雲架構 -訊息驅動 Spring Cloud StreamSpringCloud架構
- 訊息驅動式微服務:Spring Cloud Stream & RabbitMQ微服務SpringCloudMQ
- Java B2B2C o2o多使用者商城 springcloud架構 (六)分散式配置中心(Spring Cloud Config)JavaSpringGCCloud架構分散式
- (十六) Java springboot B2B2C o2o多使用者商城 springcloud架構 -使用spring cloud Bus重新整理配置JavaSpring BootGCCloud架構
- springCloud學習5(Spring-Cloud-Stream事件驅動)SpringGCCloud事件
- Spring Cloud 終結篇之訊息驅動--stream 大集合SpringCloud
- Java springboot B2B2C o2o多使用者商城 springcloud架構使用Spring Security安全控制JavaSpring BootGCCloud架構
- Java springcloud B2B2C o2o多使用者商城 springcloud架構(六)springboot整合mybatisJavaGCCloud架構Spring BootMyBatis
- Java springcloud B2B2C o2o多使用者商城 springcloud架構(八)springboot整合mongodbJavaGCCloud架構Spring BootMongoDB
- Java springcloud B2B2C o2o多使用者商城 springcloud架構(四)SpringBoot 整合JPAJavaGCCloud架構Spring Boot
- Java springboot B2B2C o2o多使用者商城 springcloud架構 (七)高可用的分散式配置中心(Spring Cloud Config)JavaSpring BootGCCloud架構分散式
- java版springcloud b2b2c社交電商多使用者商城系統b2b2c-Spring Cloud Stream 介紹JavaSpringGCCloud
- java版springcloud B2B2C o2o多使用者商城 springcloud架構-springboot執行模式JavaGCCloud架構Spring Boot模式
- (十七)Java springcloud B2B2C o2o多使用者商城 springcloud架構-上傳檔案JavaSpringGCCloud架構
- Java springcloud B2B2C o2o多使用者商城 springcloud架構(四):熔斷器HystrixJavaSpringGCCloud架構
- java B2B2C Springcloud多租戶電子商城系統-Spring Cloud SleuthJavaSpringGCCloud
- Java springcloud B2B2C o2o多使用者商城 springcloud架構 (二十四)springboot整合dockerJavaGCCloud架構Spring BootDocker
- java springcloud b2b2c shop 多使用者商城系統原始碼-介紹StreamJavaSpringGCCloud原始碼
- java B2B2C Springcloud多租戶電子商城系統-spring-cloud-eurekaJavaSpringGCCloud
- Java springcloud B2B2C o2o多使用者商城 springcloud架構(三)SpringBoot用JdbcTemplates訪問MysqlJavaGCCloud架構Spring BootJDBCMySql
- Spring Cloud Stream微服務訊息框架SpringCloud微服務框架
- Java springcloud B2B2C o2o多使用者商城 springcloud架構 (二十二)建立含有多module的springboot工程JavaGCCloud架構Spring Boot
- (十七)JavaspringcloudB2B2Co2o多使用者商城springcloud架構-訊息驅動SpringCloudStreamJavaSpringGCCloudDB2架構
- Java springboot B2B2C o2o多使用者商城 springcloud架構(四)斷路器(Hystrix)JavaSpring BootGCCloud架構
- Java B2B2C o2o多使用者商城 springcloud架構-hystrix引數詳解(八)JavaSpringGCCloud架構
- java B2B2C Springcloud電子商城系統-Spring Cloud學習JavaSpringGCCloud
- Java springboot B2B2C o2o多使用者商城 springcloud架構(五)路由閘道器(zuul)JavaSpring BootGCCloud架構路由Zuul
- (一)java B2B2C Springcloud電子商城系統 - Spring Cloud簡介JavaSpringGCCloud
- Java springboot B2B2C o2o多使用者商城 springcloud架構 (三) 服務消費者(Feign)JavaSpring BootGCCloud架構
- Spring Cloud 快速入門(八)訊息系統整合框架 Spring Cloud StreamSpringCloud框架