相信進來的同窗以前或多或少都知道一點rabbitmq
本篇博客的意圖就是教會你們如何去安裝,以及如何在spring下使用rabbitmqhtml
來了解下RabbitMQ的成員組件:web
broker:消息隊列服務器的實體,是一箇中間件應用,負責接收生產者的消息,而後將消息發送到消息接受者或者其餘brokerspring
exchange:消息交換機,是消息到達的第一個地方,消息經過它指定的路由規則,分發到不一樣的消息隊列中centos
queue:消息隊列,消息經過發送和路由以後最後到達的地方,到達queue的消息即進入邏輯上的等待消費狀態。每一個消息都會被髮送到一個或者多個隊列瀏覽器
binding:綁定,它的做用就是把exchange和queue按照路由規則綁定起來,也就是exchange和queue之間的虛擬鏈接安全
virtual host:虛擬主機,他是對broker的虛擬劃分,將消費者、生產者和他們依賴的AMQP相關結構進行隔離,通常都是爲了安全考慮,好比咱們在一個broker中設置多個虛擬主機,對不一樣用戶進行權限的分離服務器
routing key:路由關鍵字,exchange根據這個關鍵字進行消息的投遞網絡
connection:鏈接,表明生產者、消費者、broker之間進行通訊的物理網絡app
channel:消息通道,用於鏈接生產者和消費者的邏輯結構。在客戶端的每一個連接裏,可可創建多個channel,每一個channel表明一個會話任務,經過channel能夠隔離鏈接中的不一樣交互內容maven
看下客戶端使用rabbitmq的基本流程:
1.消費者鏈接到消息隊列服務器,打開一個channel
2.消費者聲明一個exchange,並設置相關屬性
3.消費者聲明一個queue,並設置相關屬性
4.消費者使用routing key,在exchange和queue之間創建綁定
5.生產者投遞消息到exchange
6.exchange接收到消息後,根據消息的key和已經設置好的binding,進行消息路由,將消息投遞到一個或者多個queue裏
rabbitmq是基於erlang實現的,因此在安裝rabbitmq以前須要安裝erlang
如下都是在centos上進行
博主的erlang版本:erlang-19.0.4-1.el6.x86_64
rabbitmq版本:rabbitmq-server-3.6.10-1.el6.noarch
erlang的安裝:
去erlang下載頁面下載本身的erlang版本
下載以後 tar zxvf
解壓
cd
到解壓文件夾
執行./configure --prefix=/erlang
命令(保證在系統根目錄下存在空erlang文件夾)
安裝erlang:make && make install
修改系統環境變量etc/profile
,記得source執行
rabbitmq的安裝:
去rabbitmq下載頁面下載本身的rabbitmq版本
編譯且安裝:
rpm --import http://www.rabbitmq.com/rabbitmq-signing-key-public.asc yum install rabbitmq-server-3.6.0-1.noarch.rpm
查看rabbitmq的安裝目錄:whereis rabbitmq
cd
到rabbitmq根目錄下的sbin文件夾下
後臺開啓rabbitmq:./rabbitmq-server start -detached
關閉:./rabbitmqctl stop
查看交換機、綁定、隊列:
./rabbitmqctl list_exchanges ./rabbitmqctl list_bindings ./rabbitmqctl list_queues
用戶管理:(如下操做生效須要重啓rabbitmq)
新建用戶:./rabbitmqctl add_user username password
刪除用戶:./rabbitmqctl delete_user username
改密碼:./rabbimqctl change_password username newpassword
設置用戶角色:./rabbitmqctl set_user_tags username tag
(Tag能夠爲 administrator,monitoring, management)
開啓web管理界面:./rabbitmq-plugins enable rabbitmq_management
(在瀏覽器地址欄輸入:http://127.0.0.1:15672進入)
spring和rabbitmq早已整合
接下來博主帶你們熟悉如何在spring下使用rabbitmq
首先加入maven依賴:
<dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit</artifactId> </dependency>
編寫RabbitConfig類與rabbitmq進行鏈接:
@Configuration public class RabbitConfig { @Bean public ConnectionFactory connectionFactory() { CachingConnectionFactory connectionFactory = new CachingConnectionFactory("106.15.205.155"); connectionFactory.setUsername("guest"); connectionFactory.setPassword("guest"); connectionFactory.setPort(5672); return connectionFactory; } }
rabbitmq有不少種模式,博主以爲最經常使用的仍是直連交換機模式(Direct)
編寫DirectExchangeConfig配置生成direct交換模式:
//direct直連模式的交換機配置 @Configuration public class DirectExchangeConfig { //直連交換機 @Bean public DirectExchange directExchange(){ return new DirectExchange("direct"); } //添加兩個隊列 @Bean public Queue queue1(){ return new Queue("queue1"); } @Bean public Queue queue2(){ return new Queue("queue2"); } //三個binding將交換機和隊列綁定起來 @Bean public Binding binding1(){ return BindingBuilder.bind(queue1()).to(directExchange()).with("key1"); } @Bean public Binding binding2(){ return BindingBuilder.bind(queue2()).to(directExchange()).with("key2"); } @Bean public Binding binding3(){ return BindingBuilder.bind(queue2()).to(directExchange()).with("key3"); } }
編寫一個消息發佈者(Sender):
@Service("sender") public class Sender { @Autowired RabbitTemplate rabbitTemplate; //direct直連交換機模式 public void send(String routingKey,String message){ rabbitTemplate.convertAndSend("direct",routingKey,message); //第一個值是交換機名 第二個值是routingkey,第三個是內容 } }
最後使用controller測試:
@RestController public class RabbitmqController { @Autowired Sender sender; @RequestMapping("/rabbitmq") public String test(){ try { sender.send("key1","Hello World!"); return "success"; }catch (Exception e){ return "error"; } } }
咱們來看下運行結果:
進入rabbitmq的web管理器:
能夠看到,咱們的消息已經成功發送到了指定隊列中
以上即是RabbitMQ的安裝和基本使用,謝謝閱讀!