您好,登錄后才能下訂單哦!
生產者發送消息去往的地方,生產者只需要知道exchange名字和routingkey既可以發送消息,剩下的由exchange進行轉發
接收消息的地方,消費者讀取消息的地方,消費者連接到這個隊列進行消息的讀取。
虛擬主機,一個虛擬主機可以有多個exchange和queue,他們是隔離獨立的
rabbitmq目錄里包含兩種類型的信息
1:元信息metadata,schema,topology,主要是保存exchange,queue,user,vhost等基本信息
2:消息數據信息:停留在隊列里未被消費的消息
配置導入和導出,可以將A服務器的Exchange和Queue導入到B服務器
1:開啟rabbitmq-management插件
2:獲取rabbitmqadmin命令工具:通過wget http://localhost:15672/cli/rabbitmqadmin
3:安裝python
4:python rabbitmqadmin export myrabbit.config -H localhost -P 15672 -u myuser -p mypass
5:配置導入:python rabbitmqadmin import myrabbit.config -H locahost -P 15672 -u myuser -p mypass
6:使用管理端口,不是使用5672端口
每個集群中的節點都是通過傳輸層連接的。所有節點對之間定期交換tick消息來維護連接來檢測連接斷開。
集群搭建:
1:安裝erlang:這個包安裝后足夠支持rabbitmq-server運行
編輯/etc/yum.repos.d/rabbitmq-erlang.repo
[rabbitmq-erlang]
name=rabbitmq-erlang
baseurl=https://dl.bintray.com/rabbitmq/rpm/erlang/21/el/7
gpgcheck=1
gpgkey=https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
repo_gpgcheck=0
enabled=1
yum install -y erlang
2:安裝rabbitmq-server:
rpm --import https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
wget https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.7/rabbitmq-server-3.7.7-1.el7.noarch.rpm
yum install -y rabbitmq-server-3.7.7-1.el7.noarch.rpm
3:啟動服務器:
chkconfig rabbitmq-server on
或者systemctl enable rabbitmq-server
systemctl start rabbitmq-server
查看狀態:rabbitmqctl status
4:啟動后會在/var/lib/rabbitmq下生成一個.erlang.cookie,需要ls -al查看
復制這個文件到其他節點上,需要修改文件的所有者,否則啟動時讀取權限出錯
chown rabbitmq:rabbitmq .erlang.cookie
5:各個節點分別修改/etc/hosts和/etc/hostname
6:重啟后關閉主節點外的各個節點:rabbitmqctl stop_app
7:其他節點加入集群:rabbitmqctl join_cluster rabbit@rabbitmq1
8:啟動各個節點:rabbitmqctl start_app
9:查看集群信息:rabbitmqctl cluster_status
節點停止后可以直接重啟,集群會自動加載
原理就是創建多一個鏡像隊列,默認,rabbitmq里的隊列的內容位于隊列聲明所在的單個節點上。exchange和binding被認為在所有節點上的。當給隊列做鏡像后,相當于兩個節點有一個隊列的信息,默認是master節點起效果,當master崩潰,slave會自動提升為master,然后處理這個隊列的消息。
隊列鏡像:
1:使用rabbitmqctl set_policy來設置,或者使用UI管理界面來設置
2:開啟UI管理界面:rabbitmq-plugins enable rabbitmq_management
3:重啟服務,然后訪問ip:15672,用戶名密碼都是guest
4:在amind下面,右側policy,添加一個policy,或者使用命令:
rabbitmqctl set_policy mypolicy “myReg”
以direct為例
1:引入依賴
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.6.0</version>
</dependency>
2:生產者:
ConnectionFactory factory = new ConnectionFactory();//創建連接工廠
factory.setHost("localhost");
try (Connection connection = factory.newConnection(); //打開連接
Channel channel = connection.createChannel()) {
channel.queueDeclare(myQueueName, false, false, false, null); //綁定一個隊列
String message = "Hello World!";
channel.basicPublish("", myQueueName, null, message.getBytes()); 發送消息到隊列里
}
3:消費者:
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
channel.queueDeclare(myQueueName, false, false, false, null);
DeliverCallback deliverCallback = (consumerTag, delivery) -> {
String message = new String(delivery.getBody(), "UTF-8");
System.out.println(" [x] Received '" + message + "'");
};
channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> { });
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。