1. 程式人生 > >RabbitMq3.6.12 (centos7)安裝與基本使用

RabbitMq3.6.12 (centos7)安裝與基本使用

原理及架構

image

image
1. 核心概念
- producer&Consumer
- Broker:它提供一種傳輸服務,它的角色就是維護一條從生產者到消費者的路線,保證資料能按照指定的方式進行傳輸
- Queue

訊息佇列,提供了FIFO的處理機制,具有快取訊息的能力。
rabbitmq中,佇列訊息可以設定為持久化,臨時或者自動刪除。

設定為持久化的佇列,queue中的訊息會在server本地硬碟儲存一份,防止系統crash,資料丟失
設定為臨時佇列,queue中的資料在系統重啟之後就會丟失
設定為自動刪除的佇列,當不存在使用者連線到server,佇列中的資料會被自動刪除
  • Exchange

Exchange類似於資料通訊網路中的交換機,提供訊息路由策略。rabbitmq中,producer不是通過通道直接將訊息傳送給queue,而是先發送給Exchange。一個Exchange可以和多個Queue進行繫結,producer在傳遞訊息的時候,會傳遞一個ROUTING_KEY,Exchange會根據這個ROUTING_KEY按照特定的路由演算法,將訊息路由給指定的queue。和Queue一樣,Exchange也可設定為持久化,臨時或者自動刪除。

Exchange有4種類型:direct(預設),fanout, topic, 和headers,不同型別的Exchange轉發訊息的策略有所區別:

Direct
直接交換器,工作方式類似於單播,Exchange會將訊息傳送完全匹配ROUTING_KEY的Queue

fanout
廣播是式交換器,不管訊息的ROUTING_KEY設定為什麼,Exchange都會將訊息轉發給所有繫結的Queue。

topic
主題交換器,工作方式類似於組播,Exchange會將訊息轉發和ROUTING_KEY匹配模式相同的所有佇列,
比如,ROUTING_KEY為user.stock的Message會轉發給繫結匹配模式為 * .stock,user.stock, * . * 和#.user.stock.#的佇列。( * 表是匹配一個任意片語,#表示匹配0個或多個片語)

headers
訊息體的header匹配(ignore)
  • Binding
所謂繫結就是將一個特定的 Exchange 和一個特定的 Queue 繫結起來。
Exchange 和Queue的繫結可以是多對多的關係。
  • virtual host
在rabbitmq server上可以建立多個虛擬的message broker,又叫做virtual hosts (vhosts)。
每一個vhost本質上是一個mini-rabbitmq server,
分別管理各自的exchange和bindings。vhost相當於物理的server,
可以為不同app提供邊界隔離,使得應用安全的執行在不同的vhost例項上,相互之間不會干擾。
producer和consumer連線rabbit server
需要指定一個vhost。 一個broker裡可以有多個vhost,用作不同使用者的許可權分離。
  • Channel:訊息通道,在客戶端的每個連線裡,可建立多個channel.

    1. 通訊過程
  • 假設P1和C1註冊了相同的Broker,Exchange和Queue。P1傳送的訊息最終會被C1消費。基本的通訊流程大概如下所示:
1. P1生產訊息,傳送給伺服器端的Exchange
2. Exchange收到訊息,根據ROUTINKEY,將訊息轉發給匹配的Queue1
3. Queue1收到訊息,將訊息傳送給訂閱者C1
4. C1收到訊息,傳送ACK給佇列確認收到訊息
5. Queue1收到ACK,刪除佇列中快取的此條訊息
  • Consumer收到訊息時需要顯式的向rabbit broker傳送basic.ack訊息或者consumer訂閱訊息時設定auto_ack引數為true。在通訊過程中,佇列對ACK的處理有以下幾種情況:
1. 如果consumer接收了訊息,傳送ack,rabbitmq會刪除佇列中這個訊息,傳送另一條訊息給consumer。
2. 如果cosumer接受了訊息, 但在傳送ack之前斷開連線,rabbitmq會認為這條訊息沒有被deliver,在consumer在次連線的時候,這條訊息會被redeliver。
3. 如果consumer接受了訊息,但是程式中有bug,忘記了ack,rabbitmq不會重複傳送訊息。
4. rabbitmq2.0.0和之後的版本支援consumer reject某條(類)訊息,可以通過設定requeue引數中的reject為true達到目地,那麼rabbitmq將會把訊息傳送給下一個註冊的consumer。

一、安裝

  1. 安裝erlang,rpm -ivh erlang-19.0.4-1.el7.centos.x86_64.rpm
  2. 安裝rabbitmq,rpm -ivh rabbitmq-server-3.6.12-1.el7.noarch.rpm

二、啟動

  1. systemctl start rabbitmq-server
  2. 設定開機自啟動,systemctl enable rabbitmq-server

三、配置

  1. 建立使用者,因為預設的guest/guest使用者只能在本地登入
例如:建立一個admin/admin123,並讓他成為管理員
1. rabbitmqctl add_user admin admin123
2. rabbitmqctl set_user_tags admin administrator

四、編寫Java Client

  1. maven引入amqp-client
    <dependency>
        <groupId>com.rabbitmq</groupId>
        <artifactId>amqp-client</artifactId>
        <version>5.0.0</version>
    </dependency>
  1. 封裝ConnectionFactory
    public static Connection getConnection(String username,
        String password,
        String host,
        String virtualHost,
        int port) throws IOException, TimeoutException{
            ConnectionFactory factory = new ConnectionFactory();
            factory.setUsername(username);
            factory.setPassword(password);
            factory.setHost(host);
            factory.setVirtualHost(virtualHost);
            factory.setPort(port);
            return factory.newConnection();
    }
  1. 訊息生產者
import java.util.concurrent.TimeUnit;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;

public class RabbitMqPublish {

    private final static String QUEUE_NAME = "hello";

    public static void main(String[] args) throws Exception {
        Connection connection = RabbitMqFactory.getConnection("root", "[email protected]", "192.168.1.8", "/", 5672);

        Channel channel =  connection.createChannel();

        channel.queueDeclare(QUEUE_NAME, true, false, false, null);

        while(true){
            try {
                TimeUnit.SECONDS.sleep(5);
                publish(channel);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public static void publish(Channel channel) throws Exception{
        String message =  System.currentTimeMillis()+"";
        channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
        System.out.println("Publish: " + message);
    }
}
  1. 訊息消費者
import java.io.IOException;
import java.util.concurrent.TimeoutException;

import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Consumer;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;

public class RabbitMqConsumer {

    private final static String QUEUE_NAME = "hello";

    public static void main(String[] args) throws IOException, TimeoutException {

        Connection connection = RabbitMqFactory.getConnection("root", "[email protected]", "192.168.1.8", "/", 5672);

        Channel channel =  connection.createChannel();

        Consumer consumer = new DefaultConsumer(channel) {
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body)
                    throws IOException {
                String message = new String(body, "UTF-8");
                System.out.println("Received" + message);
            }
        };

        channel.basicConsume(QUEUE_NAME, true, consumer);

    }

}
  1. 先執行生產者,後執行消費者。控制檯會每隔5s列印一次

五、相關參考

相關推薦

RabbitMq3.6.12 (centos7)安裝基本使用

原理及架構 1. 核心概念 - producer&Consumer - Broker:它提供一種傳輸服務,它的角色就是維護一條從生產者到消費者的路線,保證資料能按照指定的方式進行傳

CentOS 6.9 redis安裝基本配置(上)

使用下面的命令進行更新yum源並安裝redis服務: yuminstall -y redis serviceredis start chkconfigredis on 安裝好之後,我們發現一個比較

docker在centos7安裝基本命令的使用

######################docker在centos下的安裝end############################### 前置條件     64-bit 系統     kernel 3.10+ 1.檢查核心版本

Centos7-ngnix的安裝基本搭建

前言 直奔主題 下載 首先登入官網下載最新版本的nignx,官網有兩個, 開源免費版:http://nginx.org/ 商業版:http://nginx.com/ 我們一般都選擇開源版進行下載使用。 官網上可以看到各種版本更新的資訊,我們點選右側導航欄的

centos7環境下solr-6.6.2的安裝配置

最近專案中遇到了索引引擎的問題,所以就在本地安裝了solr,雖然網上版本眾多,但是很難找到合適自己的安裝方法,經過一天的測試,終於安裝成功,分用tomcat和不用tomcat,兩種方式下面就安裝過程,與大家分享下1.安裝準備及各軟體使用版本:solr    版本6.6.2  

rocketmq安裝基本操作

tor ase mqtt lte wip struct .net air 參考 如果不是因為政治原因,就rocketmq的社區活躍度、版本、特性和文檔完善度,我是無論如何也不會使用rocketmq的。 rocketmq嚴格意義上並不支持高可靠性,因為其持久化只支持異步,有另

OpenLDAP的安裝基本配置

openldap ldap jira phpldapadmin lam 一、OpenLDAP簡介 OpenLDAP是輕型目錄訪問協議(Lightweight Directory Access Protocol, LDAP)的自由和開源實現,在其OpenLDAP許可證下發行,並已經被

centos 6.4下安裝設置apache服務器

sta process vra 關閉selinux 安裝apache tps all cnblogs tar 1.打開虛擬機開啟centos 6.4系統後進入root用戶下,打開終端,輸入#yum -y install httpd,安裝apache服務器。   輸入命令後到

mysql安裝基本使用

值範圍 數據庫名 語句 長度 拋出異常 行數據 安裝 arc pro Mysql數據庫的基本使用服務端1.安裝:sudo apt-get install mysql-service2.啟動:sudo service mysql start3.查看進程中是否存在mysql服務

手動配置wamp環境(2)--MySQL安裝基本操作

密碼 環境 rdb amp tro 啟動 nal margin alt MySQL數據庫簡介 MySQL是一個關系型數據庫管理系統,由瑞典MySQL AB 公司開發,目前屬於 Oracle 旗下產品。MySQL 最流行的關系型數據庫管理系統,在 WEB 應用方面MySQL

[js高手之路]深入淺出webpack系列1-安裝基本打包用法和命令參數

查看 2-2 gre colors 令行 一起 切換 json round webpack,我想大家應該都知道或者聽過,Webpack是前端一個工具,可以讓各個模塊進行加載,預處理,再進行打包。現代的前端開發很多環境都依賴webpack構建,比如vue官方就推薦使用webp

vue-router-1-安裝基本使用

基本 一個 https 基本使用 註入 out git const tps npm install vue-router import Vue from ‘vue‘ import VueRouter from ‘vue-router‘ Vue.use(VueRout

RabbitMQ的安裝基本使用

表示 消息生產者 routing .cn error 回調 方法名 while bar   運行環境:https://oneinstack.com/install/ 在項目中,將一些無需即時返回且耗時的操作提取出來,進行了異步處理,而這種異步處理的方式大大的節省了服

Scala2.12.4 安裝配置

mage markdown blog 文件 home pro scala cal 移動 下載 解壓並移動到/software目錄: tar -zxvf scala-2.12.4.tgz mv scala-2.12.4 /software/scala 在/etc/profil

centos7安裝配置tomcat8.5.28

cst bin mkdir 重啟 UC ble 配置 local type 繼上一篇安裝配置過jdk之後,這一篇來記錄tomcat的安裝與配置 一、下載tomcat-8.5.28版本:官方地址 二、把下載的的包上傳到linux的 /usr/local 目錄下(當然可以隨意放

centos7安裝配置zookeeper

ash .com rc.d zkserver 哪裏 con 16px 文件 退出 由於要學習dubbo,需要用到zookeeper,所以這裏記錄一下linux的zookeeper安裝與配置 一、下載zookeeper的包:官方地址 二、把包上傳到linux上,同樣也是放到

centos7安裝優化

centos7 系統安裝 系統優化 各位小夥伴,安裝過程圖片有點問題,我處理一下,馬上更新CentOS-7安裝與優化 我這裏用7.2的版本,為了後面雲計算的兼容性做準備centos的演變sysvinit技術 系統第一個啟動進程:init,pid=1 串行啟動:一次一個,一

Linux(DeepInOS) 下 mysql 的安裝基本配置

tro github 控制臺 str targe 5-0 技術 TP 開機 參看代碼 GitHub: DeepIn(GNU/Linux) MySQL 一、安裝 二、控制臺登陸 三、基本編碼配置 四、服務操作 五、運行狀態基本查看 六、

Linux & Windows 環境下 RabbitMQ 安裝基本配置

web tor tag ogr 使用 sts 管理員 pin ini 索引: 開源Spring解決方案--lm.solution 參看代碼 GitHub: rabbitmq.txt 一、Linux (DeepinOS) 環境 1 1.安裝: 2 su

Docker安裝基本操作

指定 ofo 鏈接 自動 ech oob .py ice earch 參考地址鏈接: http://www.runoob.com/docker/centos-docker-install.html 一.Docker安裝 註:此分享安裝為centos6.9系統版本。 1.安裝