mq伺服器搭建
最近公司做的項目中有用到消息推送,經過多方面的篩選之後確定了使用MQTT協議,相對於XMPP,MQTT更加輕量級,並且佔用用戶很少的帶寬。
MQTT是IBM推出的一種針對移動終端設備的基於TCP/IP的發布/預訂協議,可以連接大量的遠程感測器和控制設備。
MQTT的官網見:http://mqtt.org/。其中http://mqtt.org/software裡面提供了官方推薦的各種伺服器和客戶端使用的各種語言版本的API。
下面以伺服器Apollo 1.6為例,之前嘗試過使用ActiveMQ,效果很不理想,只能實現伺服器和客戶端一對一的通信,從官網上了解到Apollo屬於activemq的一個子工程。先不管這些了,言歸正傳,以下在windows環境下。
1、在這里下載Apollo伺服器,下載後解壓,然後運行apache-apollo-1.6\bin\apollo.cmd,輸入create mybroker(名字任意取,這里是根據官網介紹的來取的)創建伺服器實例,伺服器實例包含了所有的配置,運行時數據等,並且和一個伺服器進程關聯。
2、create mybroker之後會在bin目錄下生成mybroker文件夾,裡麵包含有很多信息,其中etc\apollo.xml文件下是配置伺服器信息的文件,etc\users.properties文件包含連接MQTT伺服器時用到的用戶名和密碼,後面會介紹,可以修改原始的admin=password,可以接著換行添加新的用戶名密碼。
3、打開cmd,運行…apache-apollo-1.6\bin\mybroker\bin\apollo-broker.cmd run 開啟伺服器,可以在瀏覽器中輸入http://127.0.0.1:61680/查看是否安裝成功,該界面展示了topic,連接數等很多信息。
經過上面的簡單步驟,伺服器基本上就已經完成,下一篇將介紹Android客戶端的編寫和注意事項。
客戶端使用的API,開始我使用的是mqtt-client,使用過後發現問題百出,不能很好的滿足要求,後來使用了官方推薦的Eclipse Paho,下面開始客戶端代碼的編寫,為了方便測試這里有android和j2se兩個工程:
1、新建android工程MQTTClient
2、MainActivity代碼如下:
② RabbitMQ 進階- 阿里雲伺服器部署RabbitMQ集群
如果RabbitMQ集群只有一個broker節點,那麼該節點的失效將導致整個服務臨時性的不可用,並且可能會導致message的丟失(尤其是在非持久化message存儲於非持久化queue中的時候)。可以將所有message都設置為持久化,並且使用持久化的queue,但是這樣仍然無法避免由於緩存導致的問題:因為message在發送之後和被寫入磁碟並執行fsync之間存在一個雖然短暫但是會產生問題的時間窗。通過publisher的confirm機制能夠確保客戶端知道哪些message已經存入磁碟,盡管如此,一般不希望遇到因單點故障導致服務不可用。
如果RabbitMQ集群是由多個broker節點構成的,那麼從服務的整體可用性上來講,該集群對於單點失效是有彈性的,但是同時也需要注意:盡管exchange和binding能夠在單點失效問題上倖免於難,但是queue和其上持有的message卻不行,這是因為queue及其內容僅僅存儲於單個節點之上,所以一個節點的失效表現為其對應的queue不可用。
為了提高程序的吞吐量,保持消息的可靠性,一台機器掛了後,RabbitMQ能夠正常生產,消費消息。
rabbitmq有三種模式:單機模式,普通集群模式,鏡像集群模式
Demo級別的,一般只是本機測試玩玩而已,生產環境下不會用的。
在多台機器上啟動多個rabbitmq實例,每個機器啟動一個。
但是你創建的queue,只會放在一個rabbtimq實例上,但是每個實例都同步queue的元數據(存放含queue數據的真正實例位置)。消費的時候,實際上如果連接到了另外一個實例,那麼那個實例會從queue所在實例上拉取數據過來。
示意圖
這種方式確實很麻煩,也不怎麼好,沒做到所謂的分布式,就是個普通集群。
普通集群的方式,確實達到了消息的高可用,但沒辦法保證可靠性,沒做到分布式,簡而言之,只是一個普通的集群。
這種模式,才是所謂的rabbitmq的高可用模式,跟普通集群模式不一樣的是,你創建的queue,無論元數據還是queue里的消息都會存在於多個實例上,然後每次你寫消息到queue的時候,都會自動把消息到多個實例的queue里進行消息同步。
上圖中每個節點有一個queue,生產者生產完畢數據後投遞到指定交換機的隊列,交換機的隊列進行消息同步。
每個節點queue都有一個完整的rabbitmq節點,所以這種方式叫做鏡像集群
好處: 任何一個節點宕機後,其它節點不受影響,正常使用
壞處:
確保機器中安裝了Docker,若未安裝,可看:【雲原生】Docker入門 – 阿里雲伺服器linux環境下安裝Docker
查看拉取的鏡像
成功運行
設置節點1
瀏覽器輸入 您的ip地址:15673
再次測試即可成功~
File —> New —> Project —> Maven —> 直接Next 進入下一步創建普通的Maven工程即可
創建一個默認的Maven聚合工程,將src文件夾刪除,該工程就是一個Maven聚合工程
引入依賴如下:
在項目內,新建一個Moudle,rabbitmq-order-procer 默認Maven工程,下一步即可
在項目內,新建一個Moudle,rabbitmq-order-cousumer 默認Maven工程,下一步即可
Maven聚合工程創建完成圖
Maven依賴圖
自行手寫MainApplication即可
創建完成!
編寫完成!
啟動消費者
交換機
=
15674
15675
成功消費數據!
已成功同步消息~
③ rocketmq單個機器怎麼搭建集群在linux
linux伺服器集群平台的搭建比較簡單,有專門的均衡軟體,比如lvs,lvs是一個集群系統,由很多伺服器組成,可以根據需要,把它門分為三層,一層是前端機,用於均衡,相當於公平為系統分配工作,二層是伺服器群,比如web伺服器群,DNS,mail群等,這些就是接待員,把均衡器分配的工作進行處理,第三層是存儲設備,用於存儲數據,相當於檔案庫。
知道這些後,要搭建就非常容易,有現成的軟體,比如我有四台web伺服器,2台資料庫,1台前置機 ,安裝linux系統,安裝lvs軟體,比如
heartbeat-2.1.4-9.el5.i386.rpm
heartbeat-ldirectord-2.1.4-9.el5.i386.rpm
libnet-1.1.4-3.el5.i386.rpm
heartbeat-devel-2.1.4-9.el5.i386.rpm
heartbeat-pils-2.1.4-10.el5.i386.rpm
perl-MailTools-1.77-1.el5.noarch.rpm
heartbeat-gui-2.1.4-9.el5.i386.rpm
heartbeat-stonith-2.1.4-10.el5.i386.rpm
當然還需要配置,你可以自己網路有關lvs集群的詳細安裝說明。希望能幫助你。
④ 什麼是MQ
消息隊列(MQ),是一種應用程序對應用程序的通信方法。應用程序通過寫和檢索出入列隊的針對應用程序的數據(消息)來通信,而無需專用連接來鏈接它們。
消息傳遞指的是程序之間通過在消息中發送數據進行通信,而不是通過直接調用彼此來通信,直接調用通常是用於諸如遠程過程調用的技術。排隊指的是應用程序通過隊列來通信。隊列的使用除去了接收和發送應用程序同時執行的要求。
(4)mq伺服器搭建擴展閱讀:
MQ傳遞主幹,在世界屢獲殊榮。 它幫您搭建企業服務匯流排(ESB)的基礎傳輸層。IBM WebSphere MQ為SOA提供可靠的消息傳遞。它為經過驗證的消息傳遞主幹, 全方位、 多用途的數據傳輸, 並幫助您搭建企業服務匯流排的傳輸基礎設施。
IBM WebSphere MQ 支持兩種不同的應用程序編程介面:Java 消息服務(JMS)和消息隊列介面(MQI)。在 IBM WebSphere MQ 伺服器上,JMS 綁定方式被映射到 MQI。
應用程序直接與其本地隊列管理器通過使用 MQI 進行對話,MQI 是一組要求隊列管理器提供服務的調用。MQI 的引人之處是它只提供 13 次調用。這意味著對於應用程序編程員它是一種非常易於使用的介面,因為大部分艱苦工作都將透明完成的。
IBM WebSphere MQ 產品支持應用程序通過不同組件如處理器、子系統、操作系統以及通信協議的網路彼此進行通信。
⑤ linux系統如何啟動mq
開篇之前奉上幾條黃金鏈接:
MQ參考文檔
http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0m0/index.jsp?topic=%2Fcom.ibm.mq.doc%2Fhelp_home_wmq.htm
http://www-01.ibm.com/support/docview.wss?uid=swg27006467
MQ下載地址:http://www-03.ibm.com/software/procts/us/en/wmq/
安裝的MQ軟體包為WMQv600Trial-x86_linux_2.tar.gz. 將WMQv600Trial-x86_linux_2.tar.gz解壓至某一目錄。
(1)執行接受許可腳本: ./mqlicense.sh –accept 這個腳本是要安裝WebSphere MQ 軟體包的MQ許可程序. 至關重要,這個腳本沒有正確配置的話將導致MQ安裝失敗.–accept是不啟動圖形直接接受許可。
(2) 安裝 WebSphere MQ for Linux 伺服器:
[root@localhost mq]# rpm-ivh MQSeriesRuntime-6.0.0-0.i386.rpm
[root@localhost mq]# rpm-ivh MQSeriesSDK-6.0.0-0.i386.rpm
[root@localhost mq]# rpm-ivh MQSeriesServer-6.0.0-0.i386.rpm
注:安裝完成後,相關文件會被自動安裝在/opt/mqm下,在安裝
MQSeriesRuntime-6.0.0-0.i386.rpm時候,安裝程序為系統自動創建了一個mqm用戶和mqm組,安裝完畢後,需要使用該用戶來進行MQ的配置。
(3) 安裝 WebSphere MQ for Linux 客戶端:
[root@localhost mq]# rpm-ivh MQSeriesClient-6.0.0-0.i386.rpm
(4) 安裝 WebSphere MQ 樣本程序(其中包括amqsput、amqsget、amqsgbr和amqsbcg等)
[root@localhost mq]# rpm-ivh MQSeriesSamples-6.0.0-0.i386.rpm 樣本程序安裝在/opt/mqm/samp/bin 中。
(5)安裝MQ其他軟體包
[root@localhost mq]# rpm-ivh MQSeriesMan-6.0.0-0.i386.rpm
[root@localhost mq]# rpm-ivh MQSeriesJava-6.0.0-0.i386.rpm
[root@localhost mq]# rpm-ivh IBMJava2-SDK-1.4.2-0.0.i386.rpm
上面最後一步安裝的是JDK運行環境,如果已經有相同或更高版本的JDK,不需要再安裝。 (6) 安裝過程創建了一個名為mqm 的用戶和一個同樣名為mqm 的組,此時,新用戶是被鎖定的,必須設置一個密碼來解鎖,這樣才能正常使用該用戶。用passwd 命令:
[root@localhost mq]# passwd mqm 以上操作均在root用戶下操作,至此MQ6.0安裝結束。MQ的配置相關命令操作均在mqm用戶下。
注意:
如果執行crtmqm命令時提示
-bash-3.2$ crtmqm
-bash: crtmqm: command not found
則需要配置mqm用戶的環境變數,編輯如下文件,並添加下面的內容,如下:
第一種方法: 相對第二種較安全 僅對 mqm用戶有效
1)-bash-3.2$ vi /var/mqm/.bash_profile
PATH=$PATH:/opt/mqm/samp/bin:/opt/mqm/bin:bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin
2)執行「.」命令,使這個文件生效
-bash-3.2$ . .bash_profile
3)再次嘗試實行crtmqm或是dspmqm命令,即可發現已經生效。
第二種方法:
1、su root
2、vim /etc/profile
3、在最後面加上:PATH=$PATH:/opt/mqm/samp/bin:/opt/mqm/bin:bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin
4、關閉遠程終端重新打開,無需重啟伺服器
5、ok了!!
了解更多開源相關,去LUPA社區看看吧。