1. 程式人生 > >rabbitmq 3.5.6->3.6.1升級 ,使用說明

rabbitmq 3.5.6->3.6.1升級 ,使用說明

問題1:

v3.5.6 erlang版本:R14B

# rpm -qa | grep erlang

erlang-typer-R14B-04.3.el6.x86_64

...

操作1:

停止刪除rabbitmq3.5.6

# rabbitmqctl stop

# rabbitmq-server start #啟動

操作2:

#刪除舊版本
rpm -e --allmatches --nodeps  `rpm -qa |grep erlang`  

#安裝參考(yum安裝)
https://www.erlang-solutions.com/resources/download.html

# wget https://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm
# rpm -Uvh erlang-solutions-1.0-1.noarch.rpm
# sudo yum install erlang
# sudo yum install esl-erlang

# rpm -ihv rabbitmq-server-3.6.1-1.noarch.rpm

# rabbitmq-server start &

訪問:127.0.0.1:15672

----轉:http://blog.csdn.net/shatty/article/details/9529463

1,基本概念

RabbitMQ是流行的開源訊息佇列系統,用erlang語言開發。我曾經對這門語言挺有興趣,學過一段時間,後來沒堅持。RabbitMQ是AMQP(高階訊息佇列協議)的標準實現。如果不熟悉AMQP,直接看RabbitMQ的文件會比較困難。不過它也只有幾個關鍵概念,這裡簡單介紹。 幾個概念說明: Broker:簡單來說就是訊息佇列伺服器實體。
  Exchange:訊息交換機,它指定訊息按什麼規則,路由到哪個佇列。
  Queue:訊息佇列載體,每個訊息都會被投入到一個或多個佇列。
  Binding:繫結,它的作用就是把exchange和queue按照路由規則繫結起來。
  Routing Key:路由關鍵字,exchange根據這個關鍵字進行訊息投遞。
  vhost:虛擬主機,一個broker裡可以開設多個vhost,用作不同使用者的許可權分離。
  producer:訊息生產者,就是投遞訊息的程式。
  consumer:訊息消費者,就是接受訊息的程式。
  channel:訊息通道,在客戶端的每個連線裡,可建立多個channel,每個channel代表一個會話任務。 訊息佇列的使用過程大概如下: (1)客戶端連線到訊息佇列伺服器,開啟一個channel。
  (2)客戶端宣告一個exchange,並設定相關屬性。
  (3)客戶端宣告一個queue,並設定相關屬性。
  (4)客戶端使用routing key,在exchange和queue之間建立好繫結關係。
  (5)客戶端投遞訊息到exchange。 exchange接收到訊息後,就根據訊息的key和已經設定的binding,進行訊息路由,將訊息投遞到一個或多個佇列裡。 exchange也有幾個型別,完全根據key進行投遞的叫做Direct交換機,例如,繫結時設定了routing key為”abc”,那麼客戶端提交的訊息,只有設定了key為”abc”的才會投遞到佇列。對key進行模式匹配後進行投遞的叫做Topic交換機,符號”#”匹配一個或多個詞,符號”*”匹配正好一個詞。例如”abc.#”匹配”abc.def.ghi”,”abc.*”只匹配”abc.def”。還有一種不需要key的,叫做Fanout交換機,它採取廣播模式,一個訊息進來時,投遞到與該交換機繫結的所有佇列。 RabbitMQ支援訊息的持久化,也就是資料寫在磁碟上,為了資料安全考慮,我想大多數使用者都會選擇持久化。訊息佇列持久化包括3個部分:
  (1)exchange持久化,在宣告時指定durable => 1
  (2)queue持久化,在宣告時指定durable => 1
  (3)訊息持久化,在投遞時指定delivery_mode => 2(1是非持久化) 如果exchange和queue都是持久化的,那麼它們之間的binding也是持久化的。如果exchange和queue兩者之間有一個持久化,一個非持久化,就不允許建立繫結。

2,環境搭建 因為最經工作在Openstack的開發上,所以我直接在ubuntu上使用devstack安裝的RabbitMQ。Ubuntu上也可以手動安裝RabbitMQ(sudo apt-get install rabbitmq-server)。 RabbitMQ官網給的教程使用的pika連線RabbitMQ。 Devstack 預設的是用kombu連線RabbitMQ。所以先要安裝pika。
sudo apt-get install python-pip git-core
sudo pip install pika==0.9.8
環境搭建起來後就可以按照教程試驗了。 3,例項教程 3.1 生產/消費者 最簡單的示例,先嚐試傳送一個message給接受者(這裡的例子和官網教程有點差別,設定連線引數和官網不同,因為devstack預設安裝的Rabbitmq時修改了guest的密碼為nova)
receiver.py
  1. #!/usr/bin/env python  
  2. import pika  
  3. credentials = pika.PlainCredentials('guest', 'nova')  
  4. parameters = pika.ConnectionParameters('localhost',5672,'/',credentials    )  
  5. connection = pika.BlockingConnection(parameters)  
  6. channel = connection.channel()  
  7. channel.queue_declare(queue='hello')  
  8. print ' [*] Waiting for messages. To exit press CTRL+C'  
  9. def callback(ch, method, properties, body):  
  10.     print " [x] Received %r" % (body,)  
  11. channel.basic_consume(callback,  
  12.                       queue='hello',  
  13.                       no_ack=True)  
  14. channel.start_consuming()  
send.py
  1. #!/usr/bin/env python
  2. import pika  
  3. credentials = pika.PlainCredentials('guest''nova')  
  4. parameters = pika.ConnectionParameters('localhost',5672,'/',credentials)  
  5. connection = pika.BlockingConnection(parameters)  
  6. channel = connection.channel()  
  7. channel.queue_declare(queue='hello')  
  8. channel.basic_publish(exchange='',  
  9.                       routing_key='hello',  
  10.                       body='Hello World!')  
  11. print" [x] Sent 'Hello World!'"
  12. connection.close()  
python receiver.py python send.py 3.2 工作佇列

生產者生產訊息,放入由routing_key指定的佇列。消費者繫結該queue消費message。 new_task.py
  1. #!/usr/bin/env python  
  2. import sys  
  3. import pika  
  4. credentials = pika.PlainCredentials('guest', 'nova')  
  5. parameters = pika.ConnectionParameters('localhost',5672,'/',credentials)  
  6. connection = pika.BlockingConnection(parameters)  
  7. channel = connection.channel()  
  8. channel.queue_declare(queue='task_queue'durable=True)  
  9. message = ' '.join(sys.argv[1:]) or "Hello World!"  
  10. channel.basic_publish(exchange='',  
  11.                       routing_key='task_queue',  
  12.                       body=message,  
  13.                       properties=pika.BasicProperties(  
  14.                          delivery_mode = 2, # make message persistent  
  15.                       ))  
  16. print " [x] Sent %r" % (message,)  
  17. connection.close()  
worker.py
  1. #!/usr/bin/env python
  2. import time  
  3. import pika  
  4. credentials = pika.PlainCredentials('guest''nova')  
  5. parameters = pika.ConnectionParameters('localhost',5672,'/',credentials    )  
  6. connection = pika.BlockingConnection(parameters)  
  7. channel = connection.channel()  
  8. channel.queue_declare(queue='task_queue', durable=True)  
  9. print' [*] Waiting for messages. To exit press CTRL+C'
  10. def callback(ch, method, properties, body):  
  11.     print" [x] Received %r" % (body,)  
  12.     time.sleep( body.count('.') )  
  13.     print" [x] Done"
  14.     ch.basic_ack(delivery_tag = method.delivery_tag)  
  15. channel.basic_qos(prefetch_count=1)  
  16. channel.basic_consume(callback,  
  17.                       queue='task_queue')  
  18. channel.start_consuming()  
shell1$ python worker.py
 [*] Waiting for messages. To exit press CTRL+C
shell2$ python worker.py
 [*] Waiting for messages. To exit press CTRL+C
shell3$ python new_task.py First message.
shell3$ python new_task.py Second message..
shell3$ python new_task.py Third message...
shell3$ python new_task.py Fourth message....
shell3$ python new_task.py Fifth message.....
3.2 釋出訂閱
傳送者傳送訊息到制定的exchange,接受者繫結佇列到exchange接受訊息。 emit_log.py
  1. #!/usr/bin/env python
  2. import sys  
  3. import pika  
  4. credentials = pika.PlainCredentials('guest''nova')  
  5. parameters = pika.ConnectionParameters('localhost',5672,'/',credentials)  
  6. connection = pika.BlockingConnection(parameters)  
  7. channel = connection.channel()  
  8. channel.exchange_declare(exchange='logs',  
  9.                          type='fanout')  
  10. message = ' '.join(sys.argv[1:]) or"info: Hello World!"
  11. channel.basic_publish(exchange='logs',  
  12.                       routing_key='',  
  13.                       body=message)  
  14. print" [x] Sent %r" % (message,)  
  15. connection.close()  
receive_log.py
  1. 相關推薦

    二維碼資料 目錄 1. 二維碼QR Code 1 2. 發展歷程 1 3. 特點 2 4. 儲存 3 5. 分類 3 5.1.1. 按原理分 3 6. 區別 與條碼區別 5 7. 什麼是碼制?

    二維碼資料     目錄 1. 二維碼QR Code 1 2. 發展歷程 1 3. 特點 2 4. 儲存 3 5. 分類 3 5.1.1. 按原理分 3 6. 區別   與條碼區別 5 7. 什麼是碼制?Q

    Idea 2017.3.5 x64 &Idea 2018.1.4破解教程

    一、下載安裝不多贅述,csdn一搜一大把 Idea官網:https://www.jetbrains.com/idea/ 二、我的破解過程     ①、搜尋Idea 2017註冊碼,一般就是第一個,第一個有廣告就是第二個,網址:http://idea.lanyus.c

    挑戰程序設計3.53題 Dining

    ostream ace code logs iostream names flow 分配 bool 題意:一個農場主有N頭牛,現在要給牛餵吃的,喝的。但是沒頭牛都有它自己喜歡的食物    和飲料。求最多能滿足多少頭牛的需求。(即:按照牛的意願分配食物) 思路:這個題一看

    -2除以3,-4除以3,-5除以3 餘數分別是幾

    -2除以3,-4除以3,-5除以3 餘數分別是幾 注意被除數都是負數   -2除以3,商是-1,餘數為1 -4除以3,商是-2,餘數為2 -5除以3 ,商是-2,餘數為1   5除以-3的餘數是多少,怎麼算   5=-3*(-2)-1 餘數為-1

    洛谷試煉場 3-5數論 3-17 倍增

    clas gcd cdn mat pre g++ with size dep layout: post title: 洛谷試煉場 3-5數論 3-17 倍增 author: "luowentaoaa" catalog: true mathjax: tr

    python 3.5 退回 3.4 打包成window可執行程式 py2exe

    環境: python 3.5 windows 安裝了 https://www.continuum.io/downloads 【提示:用迅雷下載非常快】 程式寫完用  py2exe 打包: 首先安裝: pip install py2exe 執行: python setup

    rabbitmq 3.5.6->3.6.1升級 ,使用說明

    問題1: v3.5.6 erlang版本:R14B # rpm -qa | grep erlang erlang-typer-R14B-04.3.el6.x86_64 ... 操作1: 停止刪除rabbitmq3.5.6 # rabbitmqctl

    RabbitMQ 3.6.1 升級3.7.9 版本(Windows 升級至Centos) centos安裝RabbitMQ 3.7.9 (使用RPM) Centos 7安裝RabbitMQ 3.7.8版本(單機版)-不使用RPM

        隨著公司業務量的增加,原本部署在Windows伺服器的RabbitMQ叢集(3.6.1)總是出現莫名其妙的問題,經查詢官方Issue,確認是RabbitMQ 3.6.1 版本的bug。檢視從3.6.1 版本至 3.7.9 版本的變更日誌,可以發現RabbitMQ官方修復了不少bug

    PHPnow-1.5.6升級php-5.2.14-Win32到php-5.3.5

    今天在用thinkPHP訪問專案是提示require PHP > 5.3.0 !,然後看了看我的php環境是php-5.2.14-Win32。然後開始查詢資料升級php,現總結如下: 1.下載PHP5.3.5。http://download.csdn.net/deta

    CentOS 6.5 安裝nginx 1.6.3

    -1 tar format led command ont con 用戶 zip 使用epel [[email protected]/* */ /]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.al

    zabbix3.2.6.1升級3.4.4圖文心得

    zabbix zabbix升級 zabbix3.4.4 為了在升級過程中將停機時間和數據丟失降低到最小,建議先停機升級Zabbix server,然後再逐個停機升級和啟動Zabbix proxy。當所有的Proxy升級完畢後,再啟動Zabbix Server。在Zabbix server的停機期間

    四周第四次課(15日) 6.1 壓縮打包介紹 6.2 gzip壓縮工具 6.3 bzip2壓縮工具 6.4 xz壓縮工具

    時間 force med 時間戳 dev iyu 文本文 是個 cups 四周第四次課(1月5日)6.1 壓縮打包介紹6.2 gzip壓縮工具6.3 bzip2壓縮工具6.4 xz壓縮工具 ==========================================

    並發編程 - 線程 - 1.互斥鎖/2.GIL解釋器鎖/3.死鎖與遞歸鎖/4.信號量/5.Event事件/6.定時器

    級別 src 總結 alex post strip CQ bsp 回收機制 1.互斥鎖: 原理:將並行變成串行 精髓:局部串行,只針對共享數據修改 保護不同的數據就應該用不用的鎖 1 from threading import Thread

    CentOS-6.x系統基於python-3.5安裝tensorflow-1.4

    tensorflow安裝簡介 tensorflow的安裝分cpu版本和gpu版本, 這裏只討論cpu版本。 google提供了很多種安裝方式, 主要分三種, 一種是pip安裝,非常簡單,重要的是它在各個平臺都是可以用的,包括windows,但是CentOS6需升級glibc和gcc(CXXABI_)版本

    ELK從5.6.3升級6.3.0總結

    gist lds kibana super alloc 決定 自己 earch 來看 ELK從5.6.3升級到6.3.0總結 由於6.3.0默認有es的監控功能,並且我們現在es總是有各種問題,原有的es開源插件head和HQ的監控都不夠詳細,所以決定升級es集群。我們目前

    19.1 Linux監控平臺介紹 19.2 zabbix監控介紹 19.3/19.4/19.6 安裝zabbix 19.5 忘記Admin密碼如何做

    gre users gzip ping epo type 一行 ntp dmi linux監控平臺介紹 常見開源監控軟件:cacti,nagios,zabbix,smokeping,open-falcon等等 cacti,smokeping偏向於基礎監控,成圖非常漂亮 ca

    centos7 升級python到3.5.6

    為知 down div n-2 lock ssl grep ble all centos7 默認安裝的python是2.7版本的。因為要安裝mysql-utilities,所以想升級python到3.5版本 安裝python3.5.6 # 安裝python的依賴

    輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5

    思路:前序遍歷的第一個元素就是根節點,在中序遍歷中找到根節點的位置,根節點前面的元素就二叉樹的左子樹,根節點後面的元素就是二叉樹中的右子樹,在找出左子樹和右子樹的前序遍歷和中序遍歷,然後遞迴呼叫,再找根節點和左子樹、右子樹  /** * Definition for bi

    4. 陣列int[] intArr = new int[]{5,9,3,7,2,6},寫出一個函式可根據傳參(引數為需要獲取的陣列型別:1:正序排序陣列;2:倒序排序陣列;)來進行排序,返回值為int

    4. 陣列int[] intArr = new int[]{5,9,3,7,2,6},寫出一個函式可根據傳參(引數為需要獲取的陣列型別:1:正序排序陣列;2:倒序排序陣列;)來進行排序,返回值為int陣

    1.實現strcpy 2.實現strcat 3.實現strstr 4.實現strchr 5.實現strcmp 6.實現memcpy 7.實現memmove

        在前面介紹了字串的一個大概,真正的掌握需要大量程式碼的磨練。下面介紹幾個字串常用的幾個函式,這些函式都是在<string.h>裡面,這裡是介紹原理,進行模擬還原,也就是自己寫這個函式,實現原有功能。可能有一些語言表達不好的地方,或者有些地方的語言生硬,難以