消息中間件對於我們系統之間的解耦合,消峰等都有極大的幫助。 spring boot 也集成了此部分的內容,集成最為容易的是rabbitmq。今天我們就以rabbitmq為例說明。
老規矩,先看下pom
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>
AMQP,即Advanced Message Queuing Protocol,一個提供統一消息服務的應用層標準高級消息隊列協議,是應用層協議的一個開放標準,為面向消息的中間件設計。基於此協議的客戶端與消息中間件可傳遞消息,並不受客戶端/中間件不同產品,不同的開發語言等條件的限制,spring-boot-starter-amqp引入的就是rabbitmq。有個前提,你的機子上要首先先安裝rabbitmq的server,然後執行rabbitmq-server server就啟動了。啟動後,我們就可以配置我們的客戶端程序了。首先看下我們的配置文件
spring.application.name: spirng-boot-rabbitmqspring.rabbitmq.host: 127.0.0.1spring.rabbitmq.port: 5672spring.rabbitmq.username: guestspring.rabbitmq.password: guest
配置了服務器的IP,端口,用戶名,密碼等基礎信息,保證我們能連上服務器。
增加一個Rabbitmq的配置類
package com.shuqi;import org.springframework.amqp.core.Queue;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class RabbitConfig { @Bean public Queue Queue() { return new Queue("hello"); }}創建了一個名稱叫做hello的隊列,然後producer可以往hello的隊列裡放數據,consumer可以從hello的隊列裡消費數據。看下producer的處理程序
package com.shuqi.controller;import org.springframework.amqp.core.AmqpTemplate;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class HelloController { @Autowired private AmqpTemplate rabbitTemplate; @RequestMapping("/hello") public String hello(@RequestParam String name){ rabbitTemplate.convertAndSend("hello","hello "+name); return "消息發送成功"; }}通過controller生產消息,通過AmqpTemplate發送消息。有了生產者我們看下消費者
package com.shuqi.consumer;import lombok.extern.slf4j.Slf4j;import org.springframework.amqp.rabbit.annotation.RabbitHandler;import org.springframework.amqp.rabbit.annotation.RabbitListener;import org.springframework.stereotype.Component;@Component@RabbitListener(queues = "hello")@Slf4jpublic class HelloConsumer { @RabbitHandler public void process(String hello) { log.info("接收到的消息:message:{}",hello); }}@RabbitListener(queues = "hello") 表示是一個Rabbitmq的監聽器,監聽的隊列名稱是hello,說明數據可定會過來,數據過來了,通過@RabbitHandler 修飾的方法來處理過來的數據。打印一下。下面我們啟動項目看看效果。
在瀏覽器中輸入http://localhost:8080/hello?name=shuqi 看到下面的結果
看下控制台輸出的日誌
2018-03-25 16:24:32.752 INFO 4987 --- [cTaskExecutor-1] com.shuqi.consumer.HelloConsumer : 接收到的消息:message:hello shuqi
說明消息已經被consumer接收並處理掉了。大家可以把玩下。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。