(十七)JavaspringcloudB2B2Co2o多使用者商城springcloud架構-訊息驅動SpringCloudStream
在使用spring cloud雲架構的時候,我們不得不使用Spring cloud Stream,因為訊息中介軟體的使用在專案中無處不在,我們公司後面做了娛樂方面的APP,在使用spring cloud做架構的時候,其中訊息的非同步通知,業務的非同步處理都需要使用訊息中介軟體機制。spring cloud的官方給出的整合建議(使用rabbit mq和kafka),我看了一下原始碼和配置,只要把rabbit mq整合,kafka只是換了一個pom配置jar包而已,閒話少說,我們就直接進入配置實施:
- 簡介:
Spring cloud Stream 資料流操作開發包,封裝了與Redis,Rabbit、Kafka等傳送接收訊息。
- 使用工具:
rabbit,具體的下載和安裝細節我這裡不做太多講解,網上的例項太多了
- 建立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>
- 在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>
- 定義介面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>
- 定義繫結
<span style="font-size: 16px;">package com.honghu.cloud.producer;
import org.springframework.cloud.stream.annotation.EnableBinding;
@EnableBinding(ProducerService.class)
public class SendServerConfig {
}</span>
- 定義傳送訊息業務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>
- 建立commonservice-mq-consumer1訊息的消費者專案,在pom裡面配置stream-rabbit的依賴
<!-- 引入MQ訊息驅動的微服務包,引入stream只需要進行配置化即可,是對rabbit、kafka很好的封裝 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>
- 在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
可以看到接收到了訊息,下一章我們介紹mq的叢集方案。
到此,整個訊息中心方案整合完畢 需要原始碼可以求求:2147775633
歡迎大家和我一起學習spring cloud構建微服務雲架構,我這邊會將近期研發的spring cloud微服務雲架構的搭建過程和精髓記錄下來,幫助更多有興趣研發spring cloud框架的朋友,大家來一起探討spring cloud架構的搭建過程及如何運用於企業專案。
Spring Cloud大型企業分散式微服務雲構建的B2B2C電子商務平臺原始碼請加企鵝求求:一零叄八七七四六貳六
相關文章
- (十七)Java springcloud B2B2C o2o多使用者商城 springcloud架構-訊息驅動 Spring Cloud StreamJavaSpringGCCloud架構
- (十七) 整合spring cloud雲架構 -訊息驅動 Spring Cloud StreamSpringCloud架構
- SpringCloud-Stream 訊息驅動SpringGCCloud
- SpringCloud(七)Stream訊息驅動SpringGCCloud
- 九. SpringCloud Stream訊息驅動SpringGCCloud
- Java springcloud B2B2C o2o多使用者商城-訊息驅動 Spring Cloud StreamJavaSpringGCCloud
- (十七)Java springcloud B2B2C o2o多使用者商城 springcloud架構-上傳檔案JavaSpringGCCloud架構
- java B2B2C Springcloud多租戶電子商城系統- Stream 構建訊息驅動微服務JavaSpringGCCloud微服務
- (十七) Java版本多使用者B2B2C商城原始碼 -訊息驅動 Spring Cloud StreamJava原始碼SpringCloud
- (十)JavaspringcloudB2B2Co2o多使用者商城springcloud架構-SSO單點登入之OAuth2.0登入認證(1)JavaSpringGCCloudDB2架構OAuth
- Java B2B2C多使用者商城springboot架構——springcloud整合busJavaSpring Boot架構GCCloud
- Java springcloud B2B2C o2o多使用者商城 springcloud架構(四):熔斷器HystrixJavaSpringGCCloud架構
- JavaB2B2C多使用者商城springboot架構-SpringCloud服務相互呼叫RestTemplateJavaSpring Boot架構GCCloudREST
- 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架構 - 雲架構程式碼結構構建JavaSpring BootGCCloud架構
- Spring Cloud構建微服務架構:訊息驅動的微服務(消費組)【Dalston版】SpringCloud微服務架構
- java版springcloud B2B2C o2o多使用者商城 springcloud架構-springboot執行模式JavaGCCloud架構Spring Boot模式
- Java B2B2C多使用者商城 springcloud架構 (二十一)springboot整合JMSJavaGCCloud架構Spring Boot
- “訊息驅動、事件驅動、流 ”基礎概念解析事件
- 訊息推送系統架構架構
- Java springcloud B2B2C o2o多使用者商城 springcloud架構 (二十四)springboot整合dockerJavaGCCloud架構Spring BootDocker
- Java springcloud B2B2C o2o多使用者商城 springcloud架構 (二十二)建立含有多module的springboot工程JavaGCCloud架構Spring Boot
- Java B2B2C多使用者商城 springcloud架構 (二)Spring Boot配置檔案詳解JavaGCCloud架構Spring Boot
- Java開發架構篇:領域驅動設計架構基於SpringCloud搭建微服務Java架構SpringGCCloud微服務
- Java springcloud B2B2C o2o多使用者商城 springcloud架構(三)SpringBoot用JdbcTemplates訪問MysqlJavaGCCloud架構Spring BootJDBCMySql
- Java B2B2C多使用者商城 springcloud架構(七)springboot開啟宣告式事務JavaGCCloud架構Spring Boot
- Java B2B2C o2o多使用者商城 springcloud架構-hystrix引數詳解(八)JavaSpringGCCloud架構
- 事件驅動架構 vs. RESTful架構:通訊模式對比與選擇事件架構REST模式
- 嵌入式軟體架構設計-訊息互動架構
- java B2B2C Springboot多租戶電子商城系統-Spring Cloud Stream(訊息驅動)JavaSpring BootCloud
- 事件驅動架構設計事件架構
- (七)Java B2B2C o2o多使用者商城 springcloud架構 - common-service 專案構建過程JavaSpringGCCloud架構
- (八)Java B2B2C o2o多使用者商城 springcloud架構- commonservice-eureka 專案構建過程JavaSpringGCCloud架構
- Java springboot B2B2C o2o多使用者商城 springcloud架構(四)斷路器(Hystrix)JavaSpring BootGCCloud架構
- 商城架構二架構
- Java springboot B2B2C o2o多使用者商城 springcloud架構(五)路由閘道器(zuul)JavaSpring BootGCCloud架構路由Zuul