RabbitMQ詳細安裝步驟及Springboot下的使用

0.備注

CSDN也好舍扰,博客園也好,SegmentFloat也好希坚,很多教程都有問題边苹,或者沒有自己測試過。經(jīng)過將近兩天的踩坑裁僧,結(jié)合部分已有文檔總結(jié)了本教程个束,寫完之后又按照步驟裝了一臺,親測可用聊疲。
本文主要講的是如何安裝以及入門使用茬底,深度進階請參考其他大神的文章。

1.系統(tǒng)環(huán)境

CentOS 6.9 /64bit

默認路徑為/usr/local获洲,如果沒有特殊需求阱表,在進行下列操作前請先 cd /usr/local

2.獲取Erlang和RabbitMQ源文件

2.1 Erlang

http://erlang.org/download/下查找最新的源文件,我選擇的是版本17贡珊,具體為【otp_src_17.0.tar.gz】捶枢。執(zhí)行以下命令直接在Linux下獲取源碼:

wget http://erlang.org/download/otp_src_17.0.tar.gz

2.2 RabbitMQ

http://www.rabbitmq.com/releases/rabbitmq-server查找到最新的源碼版本,我選擇的是v3.6.0版本飞崖,具體為【rabbitmq-server-3.6.0-1.noarch.rpm】烂叔。執(zhí)行以下命令直接在Linux下獲取源碼:

wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.6/rabbitmq-server-3.6.6-1.el6.noarch.rpm

3.編譯安裝Erlang

3.1 解壓otp_src_17.0.tar.gz

tar -zxvf otp_src_17.0.tar.gz

可能會出現(xiàn)【gzip: stdin: not in gzip format】等錯誤,去掉z即可固歪,即tar -xvf蒜鸡。

3.2 安裝erlang編譯環(huán)境

yum -y install make ncurses-devel gcc gcc-c++ unixODBC unixODBC-devel openssl openssl-devel

3.3 編譯安裝Erlang

①設置
#下面的是一整行代碼,復制執(zhí)行
cd otp_src_17.0
./configure \
--prefix=/usr/local/erlang \
--enable-smp-support \
--enable-threads \
--enable-sctp \
--enable-kernel-poll \
--enable-hipe \
--with-ssl

執(zhí)行完后可能會出現(xiàn)錯誤:

忽略即可牢裳。

參數(shù)說明:

–prefix  指定安裝目錄
–enable-smp-support啟用對稱多處理支持
–enable-threads啟用異步線程支持
–enable-sctp啟用流控制協(xié)議支持(Stream Control Transmission Protocol逢防,流控制傳輸協(xié)議)
–enable-kernel-poll啟用Linux內(nèi)核poll
–enable-hipe啟用高性能Erlang(High Performance Erlang)
–with-ssl使用SSL包
②編譯安裝

make && make install

3.4 設置環(huán)境變量

環(huán)境變量為追加,首先打開profile
vi /etc/profile

然后在末尾追加下列語句
ERL_HOME=/usr/local/erlang PATH=$ERL_HOME/bin:$PATH export ERL_HOME PATH

保存后蒲讯,重新激活環(huán)境變量
source /etc/profile

驗證是否追加成功
[root@localhost otp_src_21.0]# echo $ERL_HOME

/usr/local/erlang

[root@localhost otp_src_21.0]# echo $PATH

/usr/local/erlang/bin:/usr/local/node/bin:/usr/local/java/jdk1.8.0_111/bin:/usr/local/java/jdk1.8.0_111/jre/bin:/usr/local/node/bin:/in

3.5 安裝RabbitMQ

[root@localhost local]# rpm -i rabbitmq-server-3.6.0-1.noarch.rpm

warning: rabbitmq-server-3.6.11-1.el6.noarch.rpm: Header V4 RSA/SHA512 Signature, key ID 6026dfca: NOKEY
error: Failed dependencies:
erlang >= R16B-03 is needed by rabbitmq-server-3.6.11-1.el6.noarch
socat is needed by rabbitmq-server-3.6.11-1.el6.noarch

最后一行信息為缺少socat忘朝,一般不會出現(xiàn),如果出現(xiàn)解決方法為:

yum -y install epel-release
yum -y install socat
再次嘗試 rpm -i rabbitmq-server-3.6.0-1.noarch.rpm

倒數(shù)第二行的錯誤為依賴關系所導致判帮,解決方法:
使用命令rpm -i --nodeps rabbitmq-server-3.6.0-1.noarch.rpm忽略依賴局嘁。

3.6 啟停RabbitMQ

[root@localhost local]#service rabbitmq-server start 啟動服務
[root@localhost local]#service rabbitmq-server etc 查看哪些命令可以使用
[root@localhost local]#service rabbitmq-server stop 停止服務
[root@localhost local]#service rabbitmq-server status 查看服務狀態(tài)

啟動時可能會出現(xiàn)下列錯誤

運行命令: [root@localhost local]# ln -s /usr/local/erlang/bin/erl /usr/bin/erl 后再次執(zhí)行即可溉箕。
如果出現(xiàn)其他錯誤也可以嘗試運行此命令

3.7 添加rabbitmq到啟動項

[root@localhost local]# chkconfig rabbitmq-server on

4 RabbitMQ管理

4和5模塊參考博客園一大神,但是找不到出處地址了十分抱歉

4.1 RabbitMQ配置文件

從官網(wǎng)來看悦昵,RabbitMQ有兩個配置文件肴茄,使用RPM方式安裝:

RabbitMQ的根目錄:/var/lib/rabbitmq
RabbitMQ的配置文件目錄:/etc/rabbitmq/
RabbitMQ的日志文件目錄:/var/log/rabbitmq

兩個配置文件分別是:

rabbitmq.config
rabbitmq-env.conf

RabbitMQ環(huán)境變量配置文件,變量名稱及內(nèi)容可參考:http://www.rabbitmq.com/configure.html#define-environment-variables
配置在文件中的變量使用參考中的標準變量,但是需要將變量前綴RABBITMQ_去掉
官網(wǎng)中提到的關于變量的默認內(nèi)容及含義可參考:http://www.rabbitmq.com/relocate.html
配置文件相關資料:http://www.rabbitmq.com/configure.html#configuration-file

4.2 web管理界面

RabbitMQ有一個web管理的界面但指,可通過ip:15672進行訪問寡痰,但是安裝好之后默認的用戶guess和密碼guest是不能用來做遠程登錄的,這對用戶名和密碼只能在本地訪問棋凳,說是為了安全拦坠,因此就必須創(chuàng)建一個用戶管理員權限的新用戶,記得在防火墻設置中添加15672端口剩岳。

管理插件啟動: rabbitmq-plugins enable rabbitmq_management

添加用戶: rabbitmqctl add_user admin admin
添加權限: rabbitmqctl set_permissions -p "/" admin "." "." "."
修改用戶標簽: rabbitmqctl set_user_tags admin administrator

通過上面三步即新建了一個擁有管理員權限的用戶admin贞滨,密碼admin,此時就可以在瀏覽器中輸入ip:15672卢肃,然后用admin進行登錄。

至此才顿,RabbitMQ全部安裝完成

5 卸載

未經(jīng)實踐莫湘,僅供參考

5.1 卸載rabbitmq

命令:rpm -qa|grep rabbitmq
結(jié)果:rabbitmq-server-3.6.1-1.noarch
命令:rpm -e --nodeps rabbitmq-server-3.6.1-1.noarch

5.2 卸載erlang

命令:rpm -qa|grep erlang
結(jié)果:esl-erlang-18.3-1.x86_64
命令:rpm -e --nodeps esl-erlang-18.3-1.x86_64
或:yum remove erlang

6 SpringBoot中的使用

6.1 添加所需依賴

在pom.xml中添加RabbitMQ所需依賴及SpringBoot對AMPQ(Advanced Message Queuing Protocol,高級消息隊列協(xié)議)的支持郑气。

<!-- RabbitMQ依賴 -->
<dependency>
  <groupId>com.rabbitmq</groupId>
  <artifactId>amqp-client</artifactId>
  <version>4.9.0</version>
</dependency>

<!-- 添加springboot對amqp的支持 -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-amqp</artifactId>
  <version>${springboot.version}</version>
</dependency>

6.2 添加配置類

@Configuration
public class RabbitConfig {
 
    @Value("${rabbitmq.host}")
    private String host;
    @Value("${rabbitmq.username}")
    private String username;
    @Value("${rabbitmq.password}")
    private String password;
    @Value("${rabbitmq.virtualhost}")
    private String virtualhost;
    @Value("${rabbitmq.port}")
    private int port;
    @Value("${rabbitmq.queue}")
    private String queue;
    
      @Bean
      public Queue createQueue() {
        return new Queue(queue,true, false, false);
      }
      
      @Bean
      public ConnectionFactory connectionFactory(){
          CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
          
          connectionFactory.setAddresses(host);
          connectionFactory.setUsername(username);
          connectionFactory.setPassword(password);
          connectionFactory.setVirtualHost(virtualhost);
          connectionFactory.setPort(port);
          connectionFactory.setPublisherConfirms(true);
          
          return connectionFactory;
      }
    
      @Bean
      public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory){
          return new RabbitAdmin(connectionFactory);
      }
}

6.3 添加監(jiān)聽類

利用@RabbitListener注解幅垮,配置好queues即可自動配置exchange。

@Component
@RabbitListener(queues = "${rabbitmq.queue}")//自動識別exchange
public class Consumer {
    
    private static Logger LOGGER = Logger.getLogger(Consumer.class);
    
    @Autowired
    private CtripRemoteService ctripremoteservice;
    
      /**
       * 監(jiān)聽器    消費者
       * @param body
       */
      @RabbitHandler
      public void process(byte[] body) {//接收類型根據(jù)發(fā)送類型調(diào)整
          LOGGER.info("ReceiverA : " + body);
      }
      
      @RabbitHandler
      public void process(String body) {//接收類型根據(jù)發(fā)送類型調(diào)整    
          LOGGER.info("ReceiverB : " + body);
      }
 
}

6.4 添加發(fā)送類

@RestController
@RequestMapping("/rabbit")
public class SendController {

    public final static String QUEUE_NAME="queueName";

    @Autowired
    private AmqpTemplate rabbitTemplate;
    
    @RequestMapping("/sendMessage")
    public void SendMessage() { 
      String sendMsg = "hello -------------------------------- " + new Date();
      rabbitTemplate.convertAndSend(QUEUE_NAME, sendMsg);   
    }
}

6.5 啟動項目即可根據(jù)配置開始監(jiān)聽或發(fā)送

7 附錄尾组,兩個測試類

7.1 接收測試類

public class RecvTest {

public final static String QUEUE_NAME="hello";

public static void main(String[] args) throws IOException, TimeoutException {

  // 創(chuàng)建連接工廠
  ConnectionFactory factory = new ConnectionFactory();
  //設置RabbitMQ地址
  factory.setHost("localhost");
  factory.setVirtualHost("/");
  factory.setUsername("guest");
  factory.setPassword("guest");
  factory.setPort(5672);
  //創(chuàng)建一個新的連接
  Connection connection = factory.newConnection();
  //創(chuàng)建一個通道
  Channel channel = connection.createChannel();
  //聲明要關注的隊列
  channel.queueDeclare(QUEUE_NAME, true, false, false, null);

  System.out.println("Customer Waiting Received messages");
  
  //DefaultConsumer類實現(xiàn)了Consumer接口忙芒,通過傳入一個頻道,告訴服務器我們需要那個頻道的消息讳侨,
  //如果頻道中有消息呵萨,就會執(zhí)行回調(diào)函數(shù)handleDelivery
  Consumer consumer = new DefaultConsumer(channel) {

  @Override
  public void handleDelivery(String consumerTag, Envelope envelope,
    AMQP.BasicProperties properties, byte[] body)throws IOException {

      String message = new String(body, "UTF-8");
      System.out.println("Customer Received '" + message + "'");

    }
  };
  //自動回復隊列應答 -- RabbitMQ中的消息確認機制
  channel.basicConsume(QUEUE_NAME, true, consumer);
  }
}

7.2 發(fā)送測試類

public class SendTest {

public final static String QUEUE_NAME="queue";
public final static String ROUTING_KEY="hello";
public final static String EXCHANGE_NAME="exchange";

public static void main(String[] args) throws Exception {

  //創(chuàng)建連接工廠
  ConnectionFactory factory = new ConnectionFactory();
  //設置RabbitMQ相關信息
  factory.setHost("localhost");
  factory.setUsername("guest");
  factory.setPassword("guest");
  factory.setPort(5672);
  //創(chuàng)建一個新的連接
  Connection connection = factory.newConnection();
  //創(chuàng)建一個通道
  Channel channel = connection.createChannel();
  String message = "啦啦啦";
  // 聲明一個隊列 允許注釋
  //channel.queueDeclare("wei",false,false,false,null);
  // 聲明一個交換機 允許注釋
  //channel.exchangeDeclare(EXCHANGE_NAME, "direct");
  //綁定隊列、交換機跨跨、RoutingKey 允許注釋
  //channel.queueBind(QUEUE_NAME, "lalal", ROUTING_KEY);

  //發(fā)送消息到隊列中 不允許注釋
  channel.basicPublish("", ROUTING_KEY, null, message.getBytes("UTF-8"));

  System.out.println("Producer Send +'" + message + "'");

  //關閉通道和連接
  channel.close();
  connection.close();
  }
}

7.3 測試樣例

生產(chǎn)者

消費者

web管理
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末潮峦,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子勇婴,更是在濱河造成了極大的恐慌忱嘹,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耕渴,死亡現(xiàn)場離奇詭異拘悦,居然都是意外死亡,警方通過查閱死者的電腦和手機橱脸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進店門础米,熙熙樓的掌柜王于貴愁眉苦臉地迎上來分苇,“玉大人,你說我怎么就攤上這事椭盏∽檠猓” “怎么了?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵掏颊,是天一觀的道長糟红。 經(jīng)常有香客問我,道長乌叶,這世上最難降的妖魔是什么盆偿? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮准浴,結(jié)果婚禮上事扭,老公的妹妹穿的比我還像新娘。我一直安慰自己乐横,他們只是感情好求橄,可當我...
    茶點故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著葡公,像睡著了一般罐农。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上催什,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天涵亏,我揣著相機與錄音,去河邊找鬼蒲凶。 笑死气筋,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的旋圆。 我是一名探鬼主播宠默,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼灵巧!你這毒婦竟也來了光稼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤孩等,失蹤者是張志新(化名)和其女友劉穎艾君,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肄方,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡冰垄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片虹茶。...
    茶點故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡逝薪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蝴罪,到底是詐尸還是另有隱情董济,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布要门,位于F島的核電站虏肾,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏欢搜。R本人自食惡果不足惜封豪,卻給世界環(huán)境...
    茶點故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望炒瘟。 院中可真熱鬧吹埠,春花似錦、人聲如沸疮装。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽廓推。三九已至刷袍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間受啥,已是汗流浹背做个。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工鸽心, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留滚局,地道東北人。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓顽频,卻偏偏與公主長得像藤肢,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子糯景,可洞房花燭夜當晚...
    茶點故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內(nèi)容