1、安裝Erlang環境html
網上百度了很多安裝erlang的教程,大部分都是安裝到一半就他丫的翻車了,搞得我好心累
java
一、在安裝erlang以前先安裝下依賴文件(這一步不要忘掉了, 否則後面./configure的時候要報錯):linux
[root@iZwz9eailk2tci1wywk9p2Z local]# yum install gcc glibc-devel make ncurses-devel openssl-devel xmltospring
二、到erlang官網去下載erlang安裝包編程
官網地址:http://www.erlang.org/downloadsvim
做爲一名強迫症患者,我固然是選擇如今最新版本啦。右鍵複製鏈接地址,用wget進行下載框架
[root@iZwz9eailk2tci1wywk9p2Z local]# wget -c http://erlang.org/download/otp_src_20.2.tar.gz分佈式
接下來解壓:ide
[root@iZwz9eailk2tci1wywk9p2Z local]# tar -zxvf otp_src_20.2.tar.gz測試
[root@iZwz9eailk2tci1wywk9p2Z local]# cd otp_src_20.2/
三、編譯安裝( 我這裏指定編譯安裝後放在/usr/local/erlang目錄裏面,這個大家能夠改爲其餘的 ):
[root@iZwz9eailk2tci1wywk9p2Z otp_src_20.2]# ./configure --prefix=/usr/local/erlang
[root@iZwz9eailk2tci1wywk9p2Z otp_src_20.2]# make && make install
四、測試安裝是否成功:
[root@iZwz9eailk2tci1wywk9p2Z erlang]# cd /usr/local/erlang/bin/
[root@iZwz9eailk2tci1wywk9p2Z bin]# ./erl
若出現如下界面,則說明咱們erlang配置OK了
輸入 halt(). 退出控制檯, 注意,halt後面有個點哈
五、配置環境變量(ps:這個跟java的環境變量配置是差很少的)
[root@iZwz9eailk2tci1wywk9p2Z local]# vim /etc/profile
在末尾加入這麼一行便可:export PATH=$PATH:/usr/local/erlang/bin
更新配置文件:[root@iZwz9eailk2tci1wywk9p2Z local]# source /etc/profile
更新以後在任意地方輸入erl能進入命令行, 那麼就說明配置成功了。
接下來進入咱們的核心部分:配置rabbitmq
2、安裝rabbitmq
一、到官網下載最新安裝包:http://www.rabbitmq.com/releases/rabbitmq-server/
[root@iZwz9eailk2tci1wywk9p2Z local]# wget -c http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.15/rabbitmq-server-generic-unix-3.6.15.tar.xz
解壓:
[root@iZwz9eailk2tci1wywk9p2Z local]# xz -d rabbitmq-server-generic-unix-3.6.15.tar.xz
[root@iZwz9eailk2tci1wywk9p2Z local]# tar -xvf rabbitmq-server-generic-unix-3.6.15.tar
二、配置rabbitmq的環境變量(這個跟上面的erlang配置以及java的環境變量差很少)
[root@iZwz9eailk2tci1wywk9p2Z local]# vim /etc/profile
在末尾加入如下配置:export PATH=$PATH:/usr/local/rabbitmq_server-3.6.15/sbin
更新配置文件:[root@iZwz9eailk2tci1wywk9p2Z local]# source /etc/profile
三、rabbitmq的基本操做:
啓動:rabbitmq-server -detached
關閉:rabbitmqctl stop
查看狀態:rabbitmqctl status
四、配置rabbitmq網頁管理插件
啓用插件:root@iZwz9eailk2tci1wywk9p2Z local]# rabbitmq-plugins enable rabbitmq_management
訪問管理頁面:http://192.168.?.?:15672 端口默認爲15672
默認來賓用戶:guest, 來賓用戶密碼:guest
五、開啓rabbitmq遠程訪問
添加用戶:rabbitmqctl add_user XRom XRom123 //XRom是用戶名, XRom123是用戶密碼
添加權限:rabbitmqctl set_permissions -p "/" XRom ".*" ".*" ".*"
修改用戶角色:rabbitmqctl set_user_tags XRom administrator
而後就能夠遠程訪問了,而後可直接配置用戶權限等信息
六、rabbitmq經常使用命令
add_user <UserName> <Password>
delete_user <UserName>
change_password <UserName> <NewPassword>
list_users
add_vhost <VHostPath>
delete_vhost <VHostPath>
list_vhostsset_permissions [-p <VHostPath>] <UserName> <Regexp> <Regexp> <Regexp>
clear_permissions [-p <VHostPath>] <UserName>
list_permissions [-p <VHostPath>]
list_user_permissions <UserName>
list_queues [-p <VHostPath>] [<QueueInfoItem> ...]
list_exchanges [-p <VHostPath>] [<ExchangeInfoItem> ...]
list_bindings [-p <VHostPath>]
list_connections [<ConnectionInfoItem> ...]
Admin-Users-Add a user
Tags:用戶角色說明
超級管理員(administrator)
可登錄管理控制檯,可查看全部的信息,而且能夠對用戶,策略(policy)進行操做。
監控者(monitoring)
可登錄管理控制檯,同時能夠查看rabbitmq節點的相關信息(進程數,內存使用狀況,磁盤使用狀況等)
策略制定者(policymaker)
可登錄管理控制檯, 同時能夠對policy進行管理,但沒法查看節點的相關信息。
普通管理者(management)
僅可登錄管理控制檯,沒法看到節點信息,也沒法對策略進行管理。
其餘none
沒法登錄管理控制檯,一般就是普通的生產者和消費者。
Admin-Virtual Host-Add virtual host
添加virtual host和用戶後,須要爲用戶指定virtual host,以後用該用戶能夠登陸
功能:一個生產者P發送消息到隊列Q,一個消費者C接收
生產者實現思路:
建立鏈接工廠ConnectionFactory,設置服務地址127.0.0.1,端口號5672,設置用戶名、密碼、virtual host,從鏈接工廠中獲取鏈接connection,使用鏈接建立通道channel,使用通道channel建立隊列queue,使用通道channel向隊列中發送消息,關閉通道和鏈接。
消費者實現思路
建立鏈接工廠ConnectionFactory,設置服務地址127.0.0.1,端口號5672,設置用戶名、密碼、virtual host,從鏈接工廠中獲取鏈接connection,使用鏈接建立通道channel,使用通道channel建立隊列queue, 建立消費者並監聽隊列,從隊列中讀取消息。
功能:一個生產者,多個消費者,每一個消費者獲取到的消息惟一,多個消費者只有一個隊列
任務隊列:避免當即作一個資源密集型任務,必須等待它完成,而是把這個任務安排到稍後再作。咱們將任務封裝爲消息並將其發送給隊列。後臺運行的工做進程將彈出任務並最終執行做業。當有多個worker同時運行時,任務將在它們之間共享。
生產者實現思路:
建立鏈接工廠ConnectionFactory,設置服務地址127.0.0.1,端口號5672,設置用戶名、密碼、virtual host,從鏈接工廠中獲取鏈接connection,使用鏈接建立通道channel,使用通道channel建立隊列queue,使用通道channel向隊列中發送消息,2條消息之間間隔必定時間,關閉通道和鏈接。
消費者實現思路:
建立鏈接工廠ConnectionFactory,設置服務地址127.0.0.1,端口號5672,設置用戶名、密碼、virtual host,從鏈接工廠中獲取鏈接connection,使用鏈接建立通道channel,使用通道channel建立隊列queue,建立消費者C1並監聽隊列,獲取消息並暫停10ms,另一個消費者C2暫停1000ms,因爲消費者C1消費速度快,因此C1能夠執行更多的任務。
功能:一個生產者發送的消息會被多個消費者獲取。一個生產者、一個交換機、多個隊列、多個消費者
生產者:能夠將消息發送到隊列或者是交換機。
消費者:只能從隊列中獲取消息。
若是消息發送到沒有隊列綁定的交換機上,那麼消息將丟失。
交換機不能存儲消息,消息存儲在隊列中
生產者實現思路:
建立鏈接工廠ConnectionFactory,設置服務地址127.0.0.1,端口號5672,設置用戶名、密碼、virtual host,從鏈接工廠中獲取鏈接connection,使用鏈接建立通道channel,使用通道channel建立隊列queue,使用通道channel建立交換機並指定交換機類型爲fanout,使用通道向交換機發送消息,關閉通道和鏈接。
消費者實現思路:
建立鏈接工廠ConnectionFactory,設置服務地址127.0.0.1,端口號5672,設置用戶名、密碼、virtual host,從鏈接工廠中獲取鏈接connection,使用鏈接建立通道channel,使用通道channel建立隊列queue,綁定隊列到交換機,設置Qos=1,建立消費者並監聽隊列,使用手動方式返回完成。能夠有多個隊列綁定到交換機,多個消費者進行監聽。
說明:生產者發送消息到交換機而且要指定路由key,消費者將隊列綁定到交換機時須要指定路由key
生產者實現思路:
建立鏈接工廠ConnectionFactory,設置服務地址127.0.0.1,端口號5672,設置用戶名、密碼、virtual host,從鏈接工廠中獲取鏈接connection,使用鏈接建立通道channel,使用通道channel建立隊列queue,使用通道channel建立交換機並指定交換機類型爲direct,使用通道向交換機發送消息並指定key=b,關閉通道和鏈接。
消費者實現思路:
建立鏈接工廠ConnectionFactory,設置服務地址127.0.0.1,端口號5672,設置用戶名、密碼、virtual host,從鏈接工廠中獲取鏈接connection,使用鏈接建立通道channel,使用通道channel建立隊列queue,綁定隊列到交換機,設置Qos=1,建立消費者並監聽隊列,使用手動方式返回完成。能夠有多個隊列綁定到交換機,但只要綁定key=b的隊列key接收到消息,多個消費者進行監聽。
說明:生產者P發送消息到交換機X,type=topic,交換機根據綁定隊列的routing key的值進行通配符匹配;符號#:匹配一個或者多個詞lazy.# 能夠匹配lazy.irs或者lazy.irs.cor
符號*:只能匹配一個詞lazy.* 能夠匹配lazy.irs或者lazy.cor
生產者實現思路:
建立鏈接工廠ConnectionFactory,設置服務地址127.0.0.1,端口號5672,設置用戶名、密碼、virtual host,從鏈接工廠中獲取鏈接connection,使用鏈接建立通道channel,使用通道channel建立隊列queue,使用通道channel建立交換機並指定交換機類型爲topic,使用通道向交換機發送消息並指定key=key.1,關閉通道和鏈接。
消費者實現思路:
建立鏈接工廠ConnectionFactory,設置服務地址127.0.0.1,端口號5672,設置用戶名、密碼、virtual host,從鏈接工廠中獲取鏈接connection,使用鏈接建立通道channel,使用通道channel建立隊列queue,綁定隊列到交換機,設置Qos=1,建立消費者並監聽隊列,使用手動方式返回完成。能夠有多個隊列綁定到交換機,凡是綁定規則符合通配符規則的隊列都可以接收到消息,好比key.*,key.#,多個消費者進行監聽。
Spring提供了AMQP的一個實現,而且spring-rabbit是RabbitMQ的一個實現,下面給出訂閱者模式的事例配置以下:
RabbitMQ提供了6種模式,分別是HelloWorld,Work Queue,Publish/Subscribe,Routing,Topics,RPC Request/reply,本文詳細講述了前5種,並給出代碼實現和思路。其中Publish/Subscribe,Routing,Topics三種模式能夠統一歸爲Exchange模式,只是建立時交換機的類型不同,分別是fanout、direct、topic。Spring提供了rabbitmq的一個實現,因此集成起來很方便,文章第4章給出了訂閱者模式的一種spring配置。
歡迎你們關注博主訂閱號「Java技術日誌」,提供Java相關技術分享,從Java編程基礎到Java高級技術,從JavaWeb技術基礎Jsp、Servlet、JDBC到SSH、SSM開發框架,從REST風格接口設計到分佈式項目實戰。剖析主流開源技術框架,用親身實踐來譜寫深度Java技術日誌。
參考:https://www.linuxidc.com/Linux/2016-03/129557.htm
本文出自https://www.cnblogs.com/xrog/p/8519967.html