摘要:路由關鍵字根據(jù)這個關鍵字進行消息投遞。則就是根據(jù)不同路由鍵,把消息發(fā)送到某一類隊列中。關于的一個重要注意事項是它根據(jù)所謂的節(jié)點名稱存儲數(shù)據(jù),默認為主機名。
RabbitMQ概覽
RabbitMQ是一個高性能的分布式消息中間件。它由Erlang編寫,這種語言天生支持分布式,而且性能極高(但是比較難上手)。
通信概念RabbitMQ簡單理解就是一個隊列服務,我們的生產(chǎn)者不斷地往它投遞消息,而消費者不斷地從它那里獲取消息。但相較于利用redis的List這類簡單隊列,RabbitMQ的消息投遞更靈活一點。首先需要知道一些RabbitMQ中的通信概念:
exchange(交換器)
queue(隊列):消息隊列載體,每個消息都會被投入到一個或多個隊列。
binding(綁定):它的作用就是把exchange和queue按照路由規(guī)則綁定起來。
routing key(路由關鍵字):exchange根據(jù)這個關鍵字進行消息投遞。
vhost(虛擬主機):不同的vhost下,數(shù)據(jù)完全隔離,默認vhost為“/”
channel(信道):在一個tcp連接下,可建立多個channel,每個channel代表一個會話任務。
producer(生產(chǎn)者)
consumer(消費者)
RabbitMQ中Exchange類似于一個路由器,我們的consumer并不會把消息直接投遞給隊列,而是投遞給exchange,exchange根據(jù)我們投遞時的路由鍵(routing key)再發(fā)送到特定的隊列。這樣的設計讓消息可以靈活選路,發(fā)送到某一類的隊列中,形成一對多的關系,而不僅僅是一對一。
Exchange所以說RabbitMQ中的exchange很方便,很強大,它有這樣幾種類型:
direct
fanout
topic
headers(幾乎用不到)
direct交換器很簡單,有時候我們僅僅需要一個很簡單的隊列(消息投遞到其中,然后不斷消費它),這時候我們就可以用direct交換器,它的規(guī)則是:如果路由鍵匹配,消息就會被投遞到對應的隊列。
fanout交換器忽略路由鍵,把消息同時發(fā)到一批隊列。
topic則就是根據(jù)不同路由鍵,把消息發(fā)送到某一類隊列中。
這里我使用docker安裝RabbitMQ
docker-compose.yml
version: "2" services: mq: image: rabbitmq:3.7.8-management restart: always mem_limit: 2g hostname: mq1 volumes: - ./mnesia:/var/lib/rabbitmq/mnesia - ./log:/var/log/rabbitmq - ./rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf ports: - "55672:15672" - "56720:5672" environment: - CONTAINER_NAME=rabbitMQ - RABBITMQ_ERLANG_COOKIE=3t182q3wtj1p9z0kd3tb
rabbitmq.conf
loopback_users.guest = false listeners.tcp.default = 5672 default_pass = WbsWebZVOzE5A1Bd default_user = test hipe_compile = false management.listener.port = 15672 management.listener.ssl = false
注意,5672端口是AMQP Client(也就是我們程序使用的)端口,15672是管理插件的web端口。
mnesia文件夾是RabbitMQ存放數(shù)據(jù)的地方。
關于RabbitMQ的一個重要注意事項是它根據(jù)所謂的節(jié)點名稱存儲數(shù)據(jù),默認為主機名。
當前節(jié)點會在該目錄下建立一個rabbit@node-name的文件夾,用來存放節(jié)點數(shù)據(jù),node-name就是節(jié)點名字,默認為hostname(其實mnesia數(shù)據(jù)庫是Erlang內(nèi)置的一個DBMS,可以直接存儲Erlang的各種數(shù)據(jù)結構),在上述例子中,這個目錄名為rabbit@mq1(因為docker-compose中設置了hostname為mq1)
5672端口映射到了宿主機的56720端口,15672端口映射到了宿主機的55672端口
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/31105.html
摘要:但對于整個事件流上的別的元素來說,執(zhí)行順序還會受到另外一個因素的影響。以上面的場景為例,在捕獲階段執(zhí)行的事件,如果執(zhí)行,則事件流終止,不會到達目標階段,的世界則不會被執(zhí)行執(zhí)行結果為線上參考事件流 向dom綁定事件的事件的三種方式 行內(nèi)綁定 按鈕 js內(nèi)綁定 btnDom.onclick = function clickHandler() { console.log(click)...
摘要:結構如下是的返回結果是的結果不要在意兩個數(shù)量的區(qū)別,首先是快照,節(jié)點數(shù)量和類型的快照,就是對節(jié)點增刪,感覺不到,但是對節(jié)點內(nèi)部內(nèi)容修改,是可以感覺到的,比如修改是綁定的,節(jié)點的增刪是敏感的可寫性問題直接對,進行賦值,是失敗的元素是可讀的,是 Dom 結構如下: 1.dsfs 2.dsfs 3.dsfs 5.dsf...
閱讀 2464·2023-05-11 16:55
閱讀 3577·2021-08-10 09:43
閱讀 2693·2019-08-30 15:44
閱讀 2519·2019-08-29 16:39
閱讀 648·2019-08-29 13:46
閱讀 2082·2019-08-29 13:29
閱讀 990·2019-08-29 13:05
閱讀 755·2019-08-26 13:51