【SpringBoot MQ系列教程】RabbitMq 初體驗
mq 在異步解耦削峯的優點很是突出,如今不少的項目都會用到,掌握 mq 的知識點,瞭解如何順暢的使用 mq,能夠說是一個必備的職業技能點了java
接下來咱們進入 rabbitmq 的學習過程git
<!-- more -->github
在測試以前,須要安裝 rabbitmq,下面分別給出 mac + centos 的安裝教程web
安裝命令spring
brew install rabbitmq ## 進入安裝目錄 cd /usr/local/Cellar/rabbitmq/3.7.5 # 啓動 brew services start rabbitmq # 當前窗口啓動 rabbitmq-server
啓動控制檯以前須要先開啓插件centos
./rabbitmq-plugins enable rabbitmq_management
進入控制檯: http://localhost:15672/springboot
用戶名和密碼:guest,guestbash
安裝命令app
yum install erlang wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.15/rabbitmq-server-3.6.15-1.el6.noarch.rpm yum install rabbitmq-server-3.6.15-1.el6.noarch.rpm
插件開啓異步
rabbitmq-plugins enable rabbitmq_management # 啓動 rabbitmq-server -detached
添加帳號,設置權限
## 添加帳號 ./rabbitmqctl add_user admin admin ## 添加訪問權限 ./rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*" ## 設置超級權限 ./rabbitmqctl set_user_tags admin administrator
接下咱們建立一個 SpringBoot 項目,用於簡單的體驗一下 rabbitmq 的發佈和消費消息
2.2.1.RELEASE
3.7.5
依賴配置文件 pom.xml
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <build> <pluginManagement> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </pluginManagement> </build> <repositories> <repository> <id>spring-snapshots</id> <name>Spring Snapshots</name> <url>https://repo.spring.io/libs-snapshot-local</url> <snapshots> <enabled>true</enabled> </snapshots> </repository> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/libs-milestone-local</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> <repository> <id>spring-releases</id> <name>Spring Releases</name> <url>https://repo.spring.io/libs-release-local</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories>
在application.yml
配置文件中,添加 rabbitmq 的相關屬性
spring: rabbitmq: virtual-host: / username: admin password: admin port: 5672
接下來咱們看一個hello world
版本的 rabbitmq 的使用姿式,一個簡單發佈消息、消費消息
消息發佈,咱們主要藉助AmqpTemplate
來實現
@Component public class PublishDemo { @Autowired private AmqpTemplate amqpTemplate; public String publish2mq(String ans) { String msg = "hello world = " + ans; System.out.println("publish: " + msg); amqpTemplate.convertAndSend(Pkg.exchange, Pkg.routing, msg); return msg; } }
上面的 case 中,主要方法在於amqpTemplate#convertAndSend
,第一個參數爲 exchangeName, 第二個爲 routingKey
常量配置以下
class Pkg { final static String exchange = "topic.e"; final static String routing = "r"; final static String queue = "topic.a"; }
消費消息,須要指定 Queue,經過 routingKey 綁定 exchange,以下
@Service public class ConsumerDemo { @RabbitListener(bindings = @QueueBinding(value = @Queue(value = Pkg.queue, durable = "false", autoDelete = "true"), exchange = @Exchange(value = Pkg.exchange, ignoreDeclarationExceptions = "true", type = ExchangeTypes.TOPIC), key = Pkg.routing)) public void consumer(String msg) { System.out.println("consumer msg: " + msg); } }
寫一個簡單的 rest 接口,用於接收參數,發佈消息到 mq,並被ConsumerDemo
消費
@RestController public class PubRest { @Autowired private PublishDemo publishDemo; @GetMapping(path = {"", "/", "/publish"}) public String publish(String name) { return publishDemo.publish2mq(name); } }
盡信書則不如,以上內容,純屬一家之言,因我的能力有限,不免有疏漏和錯誤之處,如發現 bug 或者有更好的建議,歡迎批評指正,不吝感激
下面一灰灰的我的博客,記錄全部學習和工做中的博文,歡迎你們前去逛逛