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的隊列

@Configurationpublic class RabbitConfig {    
    /**
     * 定義一個名爲:oKong 的隊列
     * @return
     */
    @Bean
    public Queue okongQueue() {        return new Queue("okong");
    }
}

配置隊列處理類,這裏的隊列就是上面配置的隊列名稱。:
Consumer.java

@Component//@RabbitListener 監聽 okong 隊列@RabbitListener(queues = "okong")@Slf4jpublic class Consumer {    /**
     * @RabbitHandler 指定消息的處理方法
     * @param message
     */
    @RabbitHandler
    public void process(String message) {
        log.info("接收的消息爲: {}", message);
    }
}

編寫消息發送類,這裏直接寫成api方法,方便調試。
DemoController.java

/**
 * 簡單示例 發送和接收隊列消息
 * @author oKong
 *
 */@RestControllerpublic class DemoController {    
    //AmqpTemplate接口定義了發送和接收消息的基本操作,目前spring官方也只集成了Rabbitmq一個消息隊列。。
    @Autowired
    AmqpTemplate rabbitmqTemplate;    
    @GetMapping("/send")    public String send(String msg) {        //發送消息
        rabbitmqTemplate.convertAndSend("okong", msg);        return "消息:" + msg + ",已發送";
    }
}

在此我向大家推薦一個架構學習交流圈:830478757  幫助突破瓶頸 提升思維能力

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方面的書籍,等看完了,也希望能單獨寫一篇關於消息隊列的文章,敬請期待!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章