溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

rabbitmq總結

發(fā)布時間:2020-10-20 06:58:21 來源:網(wǎng)絡 閱讀:432 作者:棲木之地 欄目:大數(shù)據(jù)

概念

1. Exchange: 交換機,消息發(fā)送去往的地方

2. Queue: 隊列,消費消息的地方,exchange會根據(jù)自身的類型和routing-key進行消息的分發(fā)

3. routing-key:路由地址,queue通過key和exchange進行綁定,當消息指定了routing-key然后發(fā)送到exchange時,exchange會根據(jù)key綁定的列表推送到queue里面

exchange類型:

生產(chǎn)者發(fā)送消息去往的地方,生產(chǎn)者只需要知道exchange名字和routingkey既可以發(fā)送消息,剩下的由exchange進行轉發(fā)

  1. topic:只有匹配路由的模式的隊列才會收到消息,可以一個路由匹配多個隊列,一對多的關系,發(fā)送消息只需要指定routing-key即可
  2. direct:只有精確的隊列才會收到消息,一對一的關系,發(fā)送消息時需要指定隊列名
  3. fanout:廣播,此時綁定了該exchange的隊列都會收到消息,會忽略routing-key,發(fā)送消息只需要指定exchange

queue:

接收消息的地方,消費者讀取消息的地方,消費者連接到這個隊列進行消息的讀取。

vhost:

虛擬主機,一個虛擬主機可以有多個exchange和queue,他們是隔離獨立的

備份與恢復:

rabbitmq目錄里包含兩種類型的信息
1:元信息metadata,schema,topology,主要是保存exchange,queue,user,vhost等基本信息
2:消息數(shù)據(jù)信息:停留在隊列里未被消費的消息
配置導入和導出,可以將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端口

集群

每個集群中的節(jié)點都是通過傳輸層連接的。所有節(jié)點對之間定期交換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
查看狀態(tài):rabbitmqctl status
4:啟動后會在/var/lib/rabbitmq下生成一個.erlang.cookie,需要ls -al查看
復制這個文件到其他節(jié)點上,需要修改文件的所有者,否則啟動時讀取權限出錯
chown rabbitmq:rabbitmq .erlang.cookie
5:各個節(jié)點分別修改/etc/hosts和/etc/hostname
6:重啟后關閉主節(jié)點外的各個節(jié)點:rabbitmqctl stop_app
7:其他節(jié)點加入集群:rabbitmqctl join_cluster rabbit@rabbitmq1
8:啟動各個節(jié)點:rabbitmqctl start_app
9:查看集群信息:rabbitmqctl cluster_status
節(jié)點停止后可以直接重啟,集群會自動加載

隊列高可用

原理就是創(chuàng)建多一個鏡像隊列,默認,rabbitmq里的隊列的內(nèi)容位于隊列聲明所在的單個節(jié)點上。exchange和binding被認為在所有節(jié)點上的。當給隊列做鏡像后,相當于兩個節(jié)點有一個隊列的信息,默認是master節(jié)點起效果,當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”

使用java操作rabbtimq

以direct為例
1:引入依賴

<dependency>
    <groupId>com.rabbitmq</groupId>
    <artifactId>amqp-client</artifactId>
    <version>5.6.0</version>
</dependency>

2:生產(chǎn)者:

ConnectionFactory factory = new ConnectionFactory();//創(chuàng)建連接工廠
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()); 發(fā)送消息到隊列里
}

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 -> { });
向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI