久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Spring Cloud如何開(kāi)發(fā)消息微服務(wù)

共計(jì) 3953 個(gè)字符,預(yù)計(jì)需要花費(fèi) 10 分鐘才能閱讀完成。

這篇文章給大家分享的是有關(guān) Spring Cloud 如何開(kāi)發(fā)消息微服務(wù)的內(nèi)容。丸趣 TV 小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨丸趣 TV 小編過(guò)來(lái)看看吧。

開(kāi)發(fā)消息微服務(wù)準(zhǔn)備工作

  我們需要在微服務(wù)客戶端中實(shí)現(xiàn)消息生產(chǎn)者與消費(fèi)者,先建立以下幾個(gè)項(xiàng)目:

spring-server:Eureka 服務(wù)器,端口 8761,代碼目錄“codes\08\8.4\spring-server”。

spring-consumer:消息消費(fèi)者,Eureka 客戶端,注冊(cè)到 Eureka,端口 8080,代碼目錄“codes\08\8.4\spring-consumer”。

spring-producer:消息生產(chǎn)者,Eureka 客戶端,注冊(cè)到 Eureka,端口 8081,代碼目錄“codes\08\8.4\spring-producer”。

  整個(gè)集群加上消息代理,結(jié)構(gòu)如圖 8 -10 所示。

圖 8 -10 程序結(jié)構(gòu)

  由于 Spring Cloud Stream 幫我實(shí)現(xiàn)了與消息代者交互的功能,因此對(duì)于集群中的生產(chǎn)者與消費(fèi)者來(lái)說(shuō),不需要關(guān)心外部使用的是哪一個(gè)消息框架,本小節(jié)的案例,默認(rèn)使用 RabbitMQ,默認(rèn)情況下,會(huì)連接本地的 5762 端口,如果需要在微服務(wù)中修改 RabbitMQ 的連接信息,可使用以下配置:

spring:
 application:
 name: spring-producer
 rabbitmq:
 host: localhost
 port: 5672
 username: guest
 password: guest

編寫生產(chǎn)者

  在“spring-producer”項(xiàng)目中,加入以下依賴:

  dependency 
  groupId org.springframework.cloud /groupId 
  artifactId spring-cloud-starter-config /artifactId 
  /dependency 
  dependency 
  groupId org.springframework.cloud /groupId 
  artifactId spring-cloud-starter-eureka /artifactId 
  /dependency 
  dependency 
  groupId org.springframework.cloud /groupId 
  artifactId spring-cloud-starter-stream-rabbit /artifactId 
  /dependency

  主要引入“spring-coud-starter-stream-rabbit”依賴,該依賴會(huì)自動(dòng)幫我們的項(xiàng)目引入“spring-cloud-stream”以及“spring-cloud-stream-binder”。

  接下來(lái),編寫發(fā)送服務(wù),請(qǐng)見(jiàn)代碼清單 8 -5。

  代碼清單 8 -5:codes\08\8.4\spring-producer\src\main\java\org\crazyit\cloud\SendService.java

public interface SendService { @Output( myInput)
 SubscribableChannel sendOrder();}

  新建一個(gè) SendService 接口,添加 sendOrder 方法,該方法使用 @Output 注解進(jìn)行修飾。使用該注解,表示會(huì)創(chuàng)建“myInput”的消息通道,調(diào)用該方法后,會(huì)向“myInput”通道投遞消息,如果 @Output 注解不提供參數(shù),則使用方法名作為通道名稱。接下來(lái),需要讓 Spring 容器開(kāi)啟綁定的功能,在 Application 類中,加入 @EnableBinding 注解,請(qǐng)見(jiàn)代碼清單 8 -6。

  代碼清單 8 -6:

 codes\08\8.4\spring-producer\src\main\java\org\crazyit\cloud\ProducerApplication.java

@SpringBootApplication
@EnableEurekaClient
@EnableBinding(SendService.class)
public class ProducerApplication { public static void main(String[] args) { SpringApplication.run(ProducerApplication.class, args);
 }
}

 @EnableBinding 注解中,以 SendService.class 作為參數(shù),Spring 容器在啟動(dòng)時(shí),會(huì)自動(dòng)綁定 SendService 接口中定義的通道。編寫控制器,調(diào)用 SendService 的發(fā)送方法,往服務(wù)器發(fā)送消息,請(qǐng)見(jiàn)代碼清單 8 -7。

  代碼清單 8 -7:

 codes\08\8.4\spring-producer\src\main\java\org\crazyit\cloud\ProducerController.java

@RestController
public class ProducerController {
 @Autowired
 SendService sendService;
 @RequestMapping(value =  /send , method = RequestMethod.GET) 
 public String sendRequest() {
 //  創(chuàng)建消息
 Message msg = MessageBuilder.withPayload(Hello World .getBytes()).build();
 //  發(fā)送消息  
 sendService.sendOrder().send(msg);
 return  SUCCESS 
 }
}

  在控制器中,通過(guò) @Autowired 自動(dòng)注入 SendService,調(diào)用 sendOrder 方法得到 SubscribableChannel(通道)實(shí)例,再調(diào)用 send 方法,將“Hello World”字符串發(fā)送至“消息代理”中,本例默認(rèn)的消息代理為 RabbitMQ。下面,先實(shí)現(xiàn)消息者,再一起整合測(cè)試。

編寫消費(fèi)者

  消費(fèi)者項(xiàng)目(spring-consumer)所使用的依賴與生產(chǎn)者一致,先編寫接收消息的通道接口,請(qǐng)見(jiàn)代碼清單 8 -8。

  代碼清單 8 -8:

 codes\08\8.4\spring-consumer\src\main\java\org\crazyit\cloud\ReceiveService.java

public interface ReceiveService { @Input( myInput)
 SubscribableChannel myInput();}

在 ReceiveService 中,定義了一個(gè)“myInput”的消息輸入通道,接下來(lái),與生產(chǎn)者一樣,在啟動(dòng)類中綁定消息通道,請(qǐng)見(jiàn)代碼清單 8 -9。

  代碼清單 8 -9:

 codes\08\8.4\spring-consumer\src\main\java\org\crazyit\cloud\ReceiverApplication.java

@SpringBootApplication
@EnableBinding(ReceiveService.class)
public class ReceiverApplication {
 
 public static void main(String[] args) { SpringApplication.run(ReceiverApplication.class, args);
 }
 @StreamListener(myInput)
 public void receive(byte[] msg) { System.out.println( 接收到的消息:   + new String(msg));
 }
}

  在啟動(dòng)類中,同樣使用了 @EnableBinding 來(lái)開(kāi)啟綁定,并聲明了通道的接口類。新建了一個(gè) receive 方法,使用 @StreamListener 注解進(jìn)行修飾,聲明了訂閱“myInput”通道的消息。

  依次啟動(dòng) spring-server(8761 端口)、spring-producer(8081 端口)、spring-consumer(8080 端口),訪問(wèn):http://localhost:8081/send,再打開(kāi)消息者控制臺(tái),可以看到“Hello World”字符串的輸出,證明消費(fèi)者已經(jīng)可以從消息代理中獲取到消息。

更換綁定器

  前面的例子中,使用了 RabbitMQ 作為消息代理,如果想使用 Kafka,可以更換 Maven 依賴來(lái)實(shí)現(xiàn)。在生產(chǎn)者與消費(fèi)者的 pom.xml 中,將 spring-cloud-starter-stream-rabbit 的依賴,修改為 spring-cloud-starter-stream-kafka,請(qǐng)見(jiàn)以下配置:

  dependency 
  groupId org.springframework.cloud /groupId 
  artifactId spring-cloud-starter-stream-kafka /artifactId 
  /dependency

 Spring Cloud 提供了綁定器的 API,目前實(shí)現(xiàn)了 RabbitMQ 與 Kafka 的綁定器。在筆者看來(lái),綁定器更像適配器,對(duì)于我們的消息程序來(lái)說(shuō),并不關(guān)心使用了哪個(gè)消息代理,這些都由綁定器去實(shí)現(xiàn)。

感謝各位的閱讀!關(guān)于“Spring Cloud 如何開(kāi)發(fā)消息微服務(wù)”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-16發(fā)表,共計(jì)3953字。
轉(zhuǎn)載說(shuō)明:除特殊說(shuō)明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論(沒(méi)有評(píng)論)
主站蜘蛛池模板: 鸡东县| 年辖:市辖区| 留坝县| 霞浦县| 晋州市| 孟连| 社会| 隆安县| 澄江县| 水城县| 正蓝旗| 奎屯市| 宣汉县| 泸溪县| 辽中县| 夏河县| 新干县| 道真| 博兴县| 麻江县| 黄浦区| 游戏| 土默特左旗| 礼泉县| 景谷| 柯坪县| 信丰县| 探索| 商洛市| 石柱| 台东市| 高碑店市| 沅江市| 靖安县| 福州市| 铁力市| 临潭县| 孝感市| 开封县| 普兰店市| 金平|