1. 程式人生 > >springboot整合rabbitMQ的使用

springboot整合rabbitMQ的使用

RabbitMQ介紹

RabbitMQ是一個開源的AMQP實現,伺服器端用Erlang語言編寫,支援多種客戶端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支援AJAX。用於在分散式系統中儲存轉發訊息,在易用性、擴充套件性、高可用性等方面表現不俗。

關於AMQP(摘自網際網路):

AMQP,即Advanced Message Queuing Protocol,高階訊息佇列協議,是應用層協議的一個開放標準,為面向訊息的中介軟體設計。訊息中介軟體主要用於元件之間的解耦,訊息的傳送者無需知道訊息使用者的存在,反之亦然。 AMQP的主要特徵是面向訊息、佇列、路由(包括點對點和釋出/訂閱)、可靠性、安全。

題外話:其實Redis也有提供佇列功能。但我覺得,redis還是專門用在快取方面吧。

SpringBoot整合RabbitMQ

0.老規矩,加入pom依賴,這已經是Springboot的套路了。

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-amqp</artifactId>

</dependency>

1.application.properties配置加入rabbitmq相關配置。

RabbitAutoConfiguration類是其自動載入配置類。

# rabbitmq相關配置

spring.rabbitmq.host=127.0.0.1

spring.rabbitmq.port=5672

spring.rabbitmq.username=guest

spring.rabbitmq.password=guest

 

2.關於配置,以上兩步就完成了(Springboot真的太方便了,寫程式碼都是愉悅的)。正常使用時,若作為一個消費者,我們會配置一個接收佇列,這裡為了示例,直接以最小配置來演示下。

配置一個名為okong的佇列 

@Configuration

public class RabbitConfig {

     

    /**

     * 定義一個名為:oKong 的佇列

     * @return

     */

    @Bean

    public Queue okongQueue() {

        return new Queue("okong");

    }

}

 

配置佇列處理類,這裡的佇列就是上面配置的佇列名稱。:

Consumer.java

@Component

//@RabbitListener 監聽 okong 佇列

@RabbitListener(queues = "okong")

@Slf4j

public class Consumer {

 

    /**

     * @RabbitHandler 指定訊息的處理方法

     * @param message

     */

    @RabbitHandler

    public void process(String message) {

        log.info("接收的訊息為: {}", message);

    }

}

編寫訊息傳送類,這裡直接寫成api方法,方便除錯。

DemoController.java

/**

 * 簡單示例 傳送和接收佇列訊息

 * @author oKong

 *

 */

@RestController

public class DemoController {

     

    //AmqpTemplate介面定義了傳送和接收訊息的基本操作,目前spring官方也只集成了Rabbitmq一個訊息佇列。。

    @Autowired

    AmqpTemplate rabbitmqTemplate;

     

    @GetMapping("/send")

    public String send(String msg) {

        //傳送訊息

        rabbitmqTemplate.convertAndSend("okong", msg);

        return "訊息:" + msg + ",已傳送";

    }

}

 

3.啟動應用,正常配置成功,在Rabbitmq的控制檯,是可以看見連線物件的。說明已經正常啟動了。

 

 

4.訪問:http://127.0.0.1:8080/send?msg=hello,rabbitmq, 在控制檯就可以看見消費者已經消費到此條訊息了:

 

2018-07-24 22:59:00.777  INFO 11424 --- [cTaskExecutor-1] c.l.l.springboot.chapter12.Consumer      : 接收的訊息為: hello,rabbitmq

 

控制檯介面,在Queues標籤頁,也可以檢視到佇列okong的訊息。

 

 

總結

 

本章節主要是對RabbitMQ的整合和簡單使用進行了說明,對於高併發系統而言,訊息佇列是一個常見的解決方案了。比如實現非同步訊息的通知,實現消費者/生產者模式等。由於對rabbitmq沒有過多的瞭解,詳細的用法及相關訊息佇列的知識,可自行搜尋相關資料下,這裡就不闡述了。前段時間買了本關於RabbitMQ方面的書籍,等看完了,也希望能單獨寫一篇關於訊息佇列的文章,敬請期待!