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

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

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、海北州網(wǎng)絡(luò)推廣、微信小程序定制開(kāi)發(fā)、海北州網(wǎng)絡(luò)營(yíng)銷、海北州企業(yè)策劃、海北州品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供海北州建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:muchs.cn

開(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所示。

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

圖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ò),可以把它分享出去讓更多的人看到吧!

本文名稱:SpringCloud如何開(kāi)發(fā)消息微服務(wù)
URL地址:http://muchs.cn/article48/jcpghp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、營(yíng)銷型網(wǎng)站建設(shè)微信公眾號(hào)、動(dòng)態(tài)網(wǎng)站、品牌網(wǎng)站設(shè)計(jì)建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司