架構設計之NodeJS操作訊息佇列RabbitMQ
一. 什麼是訊息佇列?訊息(Message)是指在應用間傳送的資料。訊息可以非常簡單,比如只包含文字字串,也可以更復雜,可能包含嵌入物件。 訊息佇列(Message Queue)是一種應用間的通訊方式,訊息傳送後可以立即返回,由訊息系統來確保訊息的可靠傳遞。訊息釋出者只管把訊息釋出到 MQ 中而不用管誰來取,訊息使用者只管從 MQ 中取訊息而不管是誰釋出的。這樣釋出者和使用者都不用知道對方的存在。 二. 常用的訊息佇列有哪些?RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMq。 甚至現在部分NoSQL也可做訊息佇列,如Redis。 三. 訊息佇列的使用場景?
四. 使用案例上規模的公司都會有自己的日誌分析系統,日誌系統是怎麼實現的呢?
圖解:使用者在訪問應用的時候,我們要記錄下使用者的操作記錄和系統的異常日誌,常規的做法是將系統產生的日誌儲存到伺服器磁碟,在伺服器中開啟定時任務,定時將磁碟的日誌資訊傳入mq中(生產者),也定時將mq中的訊息取出並存到相應的資料庫,如ElasticSearch或Hive中。 五. 如何安裝RabbitMQ?上面的案例介紹了MQ的一個使用場景,我這裡是用RabbitMQ舉例,現實專案中可能用到的是Kafka。
網上可以找到好幾個相應的Node SDK,這裡推薦amqplib 1. 生產者 /** * 對RabbitMQ的封裝 */let amqp = require('amqplib'); class RabbitMQ { constructor() { this.hosts = []; this.index = 0; this.length = this.hosts.length; this.open = amqp.connect(this.hosts[this.index]); } sendQueueMsg(queueName, msg, errCallBack) { let self = this; self.open .then(function (conn) { return conn.createChannel(); }) .then(function (channel) { return channel.assertQueue(queueName).then(function (ok) { return channel.sendToQueue(queueName, new Buffer(msg), { persistent: true }); }) .then(function (data) { if (data) { errCallBack && errCallBack("success"); channel.close(); } }) .catch(function () { setTimeout(() => { if (channel) { channel.close(); } }, 500) }); }) .catch(function () { let num = self.index++; if (num |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/75/viewspace-2804523/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 訊息佇列之RabbitMQ佇列MQ
- 訊息佇列之 RabbitMQ佇列MQ
- RabbitMQ 訊息佇列之佇列模型MQ佇列模型
- 架構文摘:訊息佇列設計精要架構佇列
- RabbitMQ訊息佇列MQ佇列
- [訊息佇列]RabbitMQ佇列MQ
- RabbitMQ 訊息佇列之 Exchange TypesMQ佇列
- MQ訊息佇列_RabbitMQMQ佇列
- rabbitmq訊息佇列原理MQ佇列
- RabbitMQ 訊息佇列 配置MQ佇列
- 訊息佇列的使用場景之RabbitMQ佇列MQ
- 訊息佇列設計佇列
- RabbitMQ訊息佇列(五):Routing 訊息路由MQ佇列路由
- 該如何進行架構設計一個MQ訊息佇列?架構MQ佇列
- RabbitMQ訊息佇列(二):”Hello, World“MQ佇列
- 訊息佇列設計精要佇列
- RabbitMQ訊息佇列系列教程(一)認識RabbitMQMQ佇列
- RabbitMQ學習(三)之 “訊息佇列高階使用”MQ佇列
- RabbitMQ高階之訊息限流與延時佇列MQ佇列
- SpringBoot:初探 RabbitMQ 訊息佇列Spring BootMQ佇列
- Laravel5.6 整合 RabbitMQ 訊息佇列LaravelMQ佇列
- 訊息佇列之Kafka——從架構技術重新理解Kafka佇列Kafka架構
- RabbitMQ .NET訊息佇列使用入門(五)【RabbitMQ例子】MQ佇列
- 大型網站架構系列:訊息佇列(二)網站架構佇列
- 訊息佇列之RocketMQ佇列MQ
- 訊息佇列之 Kafka佇列Kafka
- 訊息佇列之 ActiveMQ佇列MQ
- 訊息佇列之 RocketMQ佇列MQ
- RabbitMQ訊息佇列(九):Publisher的訊息確認機制MQ佇列
- 訊息佇列Rabbitmq的交換器型別佇列MQ型別
- 總結訊息佇列RabbitMQ的基本用法佇列MQ
- 如何設計一個訊息佇列?佇列
- 高併發架構訊息佇列面試題解析架構佇列面試題
- RabbitMQ訊息佇列(六):使用主題進行訊息分發MQ佇列
- 訊息佇列之概論佇列
- RabbitMQ .NET訊息佇列使用入門(四)【RabbitMQ用法大全】MQ佇列
- RabbitMQ訊息佇列-Centos7下安裝RabbitMQ3.6.1MQ佇列CentOS
- 如果讓你寫一個訊息佇列,該如何進行架構設計啊?佇列架構