使用RabbitMQ實現高可用延遲任務框架之基礎:RabbitMQ基礎概念

   今天,我們將一步一步的講解如何使用rabbitMQ實現高可用的延遲任務框架,先說一下爲什麼要使用MQ來實現延遲任務框架,而不是使用其它的組件?

一、組件選型:

  在其他的博客中,經常講到使用java內部的ScheduledThreadPoolExecutor,之前我也做過其源碼剖析,博客地址爲 Java併發編程之ScheduledThreadPoolExecutor源碼剖析 ,但是這樣有一個顯而易見的缺點,就是如果重啓了之後,內存的隊列的數據即被清空,定時任務就消失了!這在生產環境是無法容忍的,那麼使用數據庫?定時去刷?太複雜,所以,是否有一種組件,我將消息投遞給它的時候,同時給它一個延遲時間,時間到之後它會自動推給我呢?且這個消息不會因組件重啓而消失,即可以持久化,那MQ的延遲隊列就正好滿足這個需求。下面介紹一下RabbitMQ中的基本概念。

 

二、RabbitMQ介紹:

  RabbitMQ是AMQP(Advanced Message Queuing Protocol,高級消息隊列協議)的開源實現,服務端使用Erlang語言編寫用於在分佈式系統中存儲轉發消息,在易用性、擴展性、高可用性等方面表現不俗。下面簡單的介紹一下RabbitMQ:

  1、ConnectionFactory、Connection、Channel:

   通過TCP去操作RabbitMQ時是先要獲取連接的,獲取連接的類即爲ConnectionFactory,類似於jdbc中的DataSource,而獲取到的連接即爲Connection類,負責傳遞命令與監聽RabbitMQ隊列中的消息。而當我們需要操作RabbitMQ時,則需要從Connection中獲取到Channel,Channel封裝了操作RabbitMQ的大部分操作,比如聲明交換器、隊列、綁定隊列、監聽等一系列的操作。

  2、Exchange:

  交換器,在AMOP中,生產者不能直接將消息傳遞給隊列queue,只能將消息傳遞給交換器,然後交換器再根據指定的規則路由給綁定的queue。

  3、BindingKey、RoutingKey:

  當Exchange與Queue進行綁定時,需要指定一個BindingKey,而生產者發送消息給Exchange時,需要指定這個消息的RoutingKey。

  4、Exchange Type:

  Exchange Type分爲fanout、direct、topic、headers這四種基本類型,簡單的講一下fanout、direct這兩種類型,fanout是隻要與此Exchange綁定的queue,不管routingKey是多少,消息全部路由。而direct是隻有當傳入Exchange消息的RoutingKey與Exchange綁定的queue中的BindingKey相同的時候,纔會路由至對應的queue中。

  5、Queue:

  隊列,即存儲消息的隊列,消費者可以通過主動獲取或者監聽的方式從隊列中獲取到消息。

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章