RabbitMQ的安裝和使用

前言

相信進來的同窗以前或多或少都知道一點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的項目開發

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";
        }
    }

}

咱們來看下運行結果:

clipboard.png

進入rabbitmq的web管理器:

clipboard.png

能夠看到,咱們的消息已經成功發送到了指定隊列中

以上即是RabbitMQ的安裝和基本使用,謝謝閱讀!

相關文章
相關標籤/搜索